gpt4 book ai didi

rust - 如何在 Rust 中组合来自不同库的类型?

转载 作者:行者123 更新时间:2023-11-29 08:29:32 29 4
gpt4 key购买 nike

我正在使用 Rust 库 swtweb (与 JavaScript 交互)和 serde-json (使用 JSON)。两者都有一个 Value 类型来表示非常相似的 JavaScript 对象:

swtweb's Value :

#[derive(Clone, PartialEq, Debug)]
pub enum Value {
Undefined,
Null,
Bool(bool),
Number(Number),
Symbol(Symbol),
String(String),
Reference(Reference)
}

serde-json's Value :

#[derive(Clone, PartialEq)]
pub enum Value {
Null,
Bool(bool),
Number(Number),
String(String),
Array(Vec<Value>),
Object(Map<String, Value>),
}

将一种类型的实例转换为另一种类型的方法是什么?是否可以在不修改库的情况下推导出共同特征?

最佳答案

查看 stdweb::Value 的文档,看来他们已经涵盖了您!

它实现了 TryFrom<JsonValue> , 与 JsonValue作为 serde_json::Value 的别名, 所以这可以让你从 serde_json::Value 转换至 stdweb::Value .

它实现了 Serialize , 和 serde_json::to_value 允许您转换任何实现 Serialize 的类型到 serde_json::Value

所以这应该可行:

let json_value: serde_json::Value = json!("my value");
println!("{:#?}", json_value);

let stdweb_value: stdweb::Value = stdweb::Value::try_from(json_value).unwrap();
println!("{:#?}", stdweb_value);

let json_value_again: serde_json::Value = serde_json::to_value(stdweb_value).unwrap();
println!("{:#?}", json_value_again);

关于rust - 如何在 Rust 中组合来自不同库的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139753/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com