8 个重大版本发布
0.44.0 | 2022 年 2 月 8 日 |
---|---|
0.42.0 | 2021 年 12 月 28 日 |
0.40.0 | 2021 年 11 月 16 日 |
#2271 在 编码
84 每月下载量
1MB
22K SLoC
serde-nu
使用 nu_serde::to_value
将实现 serde::Serialize
的任何值转换为 nu_protocol::Value
。比较以下手动实现和使用 nu_serde
的实现。
use nu_protocol::{Dictionary, Primitive, UntaggedValue, Value};
use nu_source::Tag;
use serde::Serialize;
#[derive(Serialize)]
struct MyStruct {
index: usize,
name: String,
}
fn manual(s: MyStruct, tag: Tag) -> Value {
let mut dict = Dictionary::default();
dict.insert(
"index".into(),
Value {
value: UntaggedValue::Primitive(Primitive::Int(s.index as i64)),
tag: tag.clone(),
},
);
dict.insert(
"name".into(),
Value {
value: UntaggedValue::Primitive(Primitive::String(s.name)),
tag: tag.clone(),
},
);
Value {
value: UntaggedValue::Row(dict),
tag,
}
}
fn auto(s: &MyStruct, tag: Tag) -> Value {
nu_serde::to_value(s, tag).unwrap()
}
lib.rs
:
使用 nu_serde::to_value
将实现 serde::Serialize
的任何值转换为 nu_protocol::Value
。比较以下手动实现和使用 nu_serde
的实现。
use nu_protocol::{Dictionary, Primitive, UntaggedValue, Value};
use nu_source::Tag;
use serde::Serialize;
#[derive(Serialize)]
struct MyStruct {
index: usize,
name: String,
}
fn manual(s: MyStruct, tag: Tag) -> Value {
let mut dict = Dictionary::default();
dict.insert(
"index".into(),
Value {
value: UntaggedValue::Primitive(Primitive::Int(s.index as i64)),
tag: tag.clone(),
},
);
dict.insert(
"name".into(),
Value {
value: UntaggedValue::Primitive(Primitive::String(s.name)),
tag: tag.clone(),
},
);
Value {
value: UntaggedValue::Row(dict),
tag,
}
}
fn auto(s: &MyStruct, tag: Tag) -> Value {
nu_serde::to_value(s, tag).unwrap()
}
依赖关系
~5–13MB
~153K SLoC