处理值枚举时类型不匹配

问题描述 投票:0回答:2

我正在尝试使用qazxsw poi Rust库来创建一个服务器,该服务器接受来自用Python编写的客户端的命令。我正在修改qazxsw poi示例以达到我的目标。

如何处理不同类型的参数(整数/字符串/布尔值)到匹配语句而不会得到“不匹配的类型;期望i32,找到枚举'rmp_rpc ::值'”错误?对于每种方法,参数类型可能不同。

rmp_rpc
enums rust rpc matching
2个回答
0
投票

您需要在调用站点执行此类型检查,或者将类型检查推迟到被调用者(this方法)。

在通话现场:

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")) }


0
投票

我根据西蒙所做的是 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 } } 但也要将每个函数的输出修复为Result <'Value,Value>,以避免不兼容的类型错误

© www.soinside.com 2019 - 2024. All rights reserved.