1个不稳定版本
0.1.0 | 2023年4月30日 |
---|
#1318 在 数据结构
9KB
96 行
AnyStruct包
AnyStruct是一个Rust包,它提供了在JSON和Protocol Buffers (Proto)数据结构之间转换的特质。具体来说,它提供了以下特质
IntoJSON
:将来自prost_types
包的Value
结构体转换为serde_json::Value
结构体。IntoProto
:将serde_json::Value
结构体转换为来自prost_types
包的Value
结构体。IntoJSONStruct
:将来自prost_types
包的Struct
结构体转换为serde_json::Map
结构体。IntoProtoStruct
:将serde_json::Map
结构体转换为来自prost_types
包的Struct
结构体。
使用方法
要在Rust项目中使用AnyStruct,请在您的Cargo.toml
文件中添加以下行
[dependencies]
anystruct = "0.1.0"
以下是将JSON字符串转换为Proto结构体的示例用法
use anystruct::{IntoProto, ProtoStruct};
let json_str = r#"{
"name": "John Doe",
"age": 42,
"is_student": true,
"grades": [80, 85, 90],
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA"
}
}"#;
let json_value = serde_json::from_str(json_str).unwrap();
let proto_value = json_value.into_proto();
let proto_struct = ProtoStruct { fields: [("my_data".to_string(), proto_value)].iter().cloned().collect() };
以下是将Proto结构体转换为JSON字符串的示例用法
use anystruct::{IntoJSON, IntoJSONStruct};
let proto_value = prost_types::Value {
kind: Some(prost_types::value::Kind::StructValue(prost_types::Struct {
fields: [("name".to_string(), prost_types::Value {
kind: Some(prost_types::value::Kind::StringValue("John Doe".to_string())),
})].iter().cloned().collect(),
})),
};
let json_value = proto_value.into_json();
let json_map = json_value.as_object().unwrap().clone();
let json_str = serde_json::to_string_pretty(&json_map).unwrap();
您还可以使用IntoProtoStruct
和IntoJSONStruct
特质在Struct
和serde_json::Map
结构体之间进行转换
let proto_struct = json_map.into_proto_struct();
let json_map2 = proto_struct.into_json_struct();
依赖
~3MB
~66K SLoC