rust - 如何在 Rust 中组合来自不同库的类型?
问题描述
我正在使用 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>),
}
将一种类型的实例转换为另一种类型的方法是什么?是否可以在不修改库的情况下获得共同特征?
解决方案
查看 的文档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);
推荐阅读
- magento - magento 2.4.1 电子邮件中的空订单状态
- python - 即使使用“allow_unicode=True”,韩语中的 Slug 也无法在 Django 中工作
- sql-server - 子字符串中的 Mssql 子查询
- docker - 如何配置 docker 代理?
- javascript - 打开窗口,调用 window.print(),打印(静默)并关闭选项卡
- css - Github Pages 没有加载 Bootstrap 样式,尽管在本地运行它完全没问题(使用 gulp)
- python - 如何在考虑子矩阵列的情况下按多列对数据框进行排序
- django - 无法访问 django API
- ansible - Ansible 复制模块。“找不到来源”
- regex - Powershell替换文本文件中的整行