我正在使用Rust库swtweb(用于与JavaScript交互)和serde-json(用于JSON)。两者都有一种Value
类型来表示非常相似的JavaScript对象:
#[derive(Clone, PartialEq, Debug)]
pub enum Value {
Undefined,
Null,
Bool(bool),
Number(Number),
Symbol(Symbol),
String(String),
Reference(Reference)
}
#[derive(Clone, PartialEq)]
pub enum Value {
Null,
Bool(bool),
Number(Number),
String(String),
Array(Vec<Value>),
Object(Map<String, Value>),
}
将一种类型的实例转换为另一种类型的方法是什么?是否可以在不修改库的情况下得出一个共同的特征?
答案 0 :(得分:1)
看着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);