处理值枚举时类型不匹配

时间:2018-07-04 19:27:07

标签: enums rust rpc matching

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

如何将各种类型(整数/字符串/布尔值)的参数处理到匹配语句中,而不会出现“类型不匹配;预期为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])
        }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我根据西蒙所做的是
string mongoEndpoint = "mongodb://localhost:27017"; MongoClient dbClient = new MongoClient(mongoEndpoint); string xml = System.IO.File.ReadAllText("C:\\Users\\user\\Downloads\\injection_00001.xml"); XmlDocument doc = new XmlDocument();[![enter image description here][1]][1] doc.LoadXml(xml); string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc); //Get Database IMongoDatabase db = dbClient.GetDatabase("MyWorkMongoDB"); //Get Collection var personColl = db.GetCollection<BsonDocument>("PatientCollection"); BsonDocument document = BsonDocument.Parse(json); personColl.InsertOneAsync(document); Console.WriteLine("Doc added successfully"); Console.Read(); [![output which I am getting][1]][1]
还要将每个函数的输出固定为Result <'Value,Value> 为了避免不兼容的类型错误