nushell/crates/nu-serde/README.md
Lily Mara 0a1cdc5107
Add the nu-serde crate (#3878)
* Add the nu-serde crate

nu-serde is a crate that can be used to turn a value implementing
`serde::Serialize` into a `nu-protocol::Value`. This has the potential to
significantly simplify plugin authorship.

This crate was the previously independent
[serde-nu](https://github.com/lily-mara/serde-nu) but the nushell maintainers
expressed an interest in having it added to the mainline nushell repository.

* fixup! Add the nu-serde crate
2021-07-31 22:03:13 -05:00

45 lines
994 B
Markdown

# `serde-nu`
Convert any value implementing `serde::Serialize` into a
`nu_protocol::Value` using `nu_serde::to_value`. Compare the below manual
implemeentation and the one using `nu_serde`.
```rust
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()
}
```