enums - 处理值枚举时类型不匹配

标签 enums rust rpc matching

我正在尝试使用 rmp_rpc Rust 库制作一个服务器,该服务器接受来自用 Python 编写的客户端的命令。我正在修改 this实现我的目标的例子。

如何将不同类型(整数/字符串/ bool 值)的参数处理到匹配语句中,而不会出现“类型不匹配;预期 i32,发现枚举‘rmp_rpc::Value’”错误?对于每种方法,参数类型可能不同。

fn handle_request(&mut self, method: &str, params: &[Value]) -> Self::RequestFuture {
        match method {
            "sum" => Methods::sum(params[0], params[1]),
            "draw" => Methods::draw(params),
            "conc" => Methods::concatenate(params[0], params[1])
        }

最佳答案

您需要在调用站点执行类型检查,或者将类型检查推迟到被调用方(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
    }
}

这是 based on the documentation I could find available .

关于enums - 处理值枚举时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179868/

相关文章:

c - 使用 RPCGen 了解 RPC

java - GWT 远程过程调用 : Use same DB connection across multiple requests

json - 比特币 RPC 身份验证问题 - regtest

rust - 如何使用 winrt-rs 创建 MessageDialog?

for-loop - 对于反向迭代、for 或 while 循环,哪个更快?

rust - vector.into_iter().filter(some_non_trivial_function).collect() 是否可接受

java - 为什么在 android 标准类中使用 static final int 来避免枚举?

java - 如何使用内部静态最终字段初始化 Java 枚举?

java - 复杂的 if() 或枚举?

c++ - 字符串到枚举模板错误