| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | use crate::{connection::Connection, error::Error, option, value::Value};use bytes::Bytes;pub fn client(conn: &mut Connection, args: &[Bytes]) -> Result<Value, Error> {    let sub = unsafe { std::str::from_utf8_unchecked(&args[1]) }.to_string();    let expected = match sub.to_lowercase().as_str() {        "setname" => 3,        _ => 2,    };    if args.len() != expected {        return Err(Error::WrongArgument(            "client".to_owned(),            sub.to_uppercase(),        ));    }    match sub.to_lowercase().as_str() {        "id" => Ok((conn.id() as i64).into()),        "info" => Ok(conn.info().as_str().into()),        "getname" => Ok(option!(conn.name().to_owned())),        "setname" => {            let name = unsafe { std::str::from_utf8_unchecked(&args[2]) }.to_string();            conn.set_name(name);            Ok(Value::OK)        }        _ => Err(Error::WrongArgument(            "client".to_owned(),            sub.to_uppercase(),        )),    }}pub fn echo(_conn: &Connection, args: &[Bytes]) -> Result<Value, Error> {    Ok(Value::Blob(args[1].to_owned()))}pub fn ping(_conn: &Connection, args: &[Bytes]) -> Result<Value, Error> {    match args.len() {        1 => Ok(Value::String("PONG".to_owned())),        2 => Ok(Value::Blob(args[1].to_owned())),        _ => Err(Error::InvalidArgsCount("ping".to_owned())),    }}
 |