我正在尝试使用rmp_rpc Rust libary来创建一个服务器,该服务器接受来自用Python编写的客户端的命令。我正在修改此示例以达到我的目标。
我怎么处理一个论点……
您需要在呼叫站点执行此类型检查,或者将类型检查推迟到被调用者( Echo::<whatever> 方法)。
Echo::<whatever>
在通话现场:
match method { "sum" => Echo::sum(params[0].as_u64().expect("expected u64"), params[1].as_u64().expect("expected u64")), "draw" => Echo::draw(params), // <-- this must continue to be passed as &[Value] "concatenate => Echo::conc(params[0].as_str().expect("expected str"), params[1].as_str().expect("expected str")) }
在被叫方:
impl Echo { pub fn sum(v1: Value, v2: Value) -> u64 { let v1 = v1.as_u64().expect("expected u64"); let v2 = v2.as_u64().expect("expected u64"); v1 + v2 } }
这是 基于我可以找到的文档 。
我根据西蒙所做的是 match method { "sum" => Methods::sum(params[0].as_u64().expect("expected u64"), params[1].as_u64().expect("expected u64")), "conc" => Methods::concatenate(params[0].as_str().expect("expected str"), params[1].as_str().expect("expected str")), "draw" => Methods::draw(params), _ => Err("invalid argument".into()) } 但也将每个函数的输出固定为Result&lt;'Value,Value&gt; 为了避免不兼容的类型错误
match method { "sum" => Methods::sum(params[0].as_u64().expect("expected u64"), params[1].as_u64().expect("expected u64")), "conc" => Methods::concatenate(params[0].as_str().expect("expected str"), params[1].as_str().expect("expected str")), "draw" => Methods::draw(params), _ => Err("invalid argument".into()) }