在rust中等效的枚举类型之间转换

时间:2019-08-01 19:09:57

标签: rust

在rust中,有没有比以下更好的方法可以在等效的枚举类型之间进行转换(例如在不同的库中进行转换):

//similar pattern patching to get the rust f64 out of the avro_rs::Double enum
//and build an influx db Float
let pr = recmap.get(&"price".to_string()).unwrap();
match pr {
    Double(p) => {
        let price = influx_db_client::Value::Float(*p);
        point.add_field("price", price);
    },
    _ => ()
}

这里我们有一个avro_rs库Double(f64)类型,并且需要一个入库db Float(f64)枚举类型。

我在上面使用模式匹配样板进行了此操作,但是对于锈蚀还是陌生的,是否有较短或更惯用的方式实现相同效果?

1 个答案:

答案 0 :(得分:0)

if let pattern帮助您将整个替换为

if let Some(Double(p)) = recmap.get("price") {
    let price = influx_db_client::Value::Float(*p);
    point.add_field("price", price);
}

通常,您还会有一些use语句,以避免在代码中间出现influx_db_client::Value::Float

侧面说明:这里的区别是,如果recmap.get返回None,则您的代码会因unwrap()而崩溃,而我的代码会忽略它。