Expand description
This crate provides macros that enable wrapping Rust structs with
alternate root keys during serialization and deserialization using
Serde. In principle, it offers a functionality similar to the
@JsonRootName
annotation for Java’s
Jackson
framework.
Note that this crate is primarily intended to be used in conjunction
with the serde_json
crate. It
has not been tested with other data formats.
§Usage
Add this to your Cargo.toml:
serde_struct_wrapper = "0.3"
You can use the serde_with_root!
macro as shown below to both
serialize and deserialize a Struct with an alternate root key. (Please
note the use of the #[serde(remote = "Self")]
attribute on the
Struct letting SerDe know of the alernate Serialize
and
Deserialize
implementations provided by the macro.)
extern crate serde;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate serde_struct_wrapper;
#[derive(Serialize, Deserialize, Debug)]
#[serde(remote = "Self")]
pub struct Point {
pub x: i32,
pub y: i32,
}
serde_with_root!("point": Point);
The above will let you serialize/deserialize a JSON structure like the following:
{
"point": {
"x": 1,
"y": 2
}
}
For getting only the Serializer
implementation, use the
serialize_with_root!
macro; likewise with the
deserialize_with_root!
macro for only the Deserializer
implementation.
Macros§
- deserialize_
with_ root - Generates a custom SerDe
Deseralize
implementation that adds an alternate root key to a Struct during deserialization. - serde_
with_ root - Helper macro that will generate both the
Serialize
andDeserialize
implementations with an alternate root key. This is the same as manually calling bothdeserialize_with_root!
andserialize_with_root!
. - serialize_
with_ root - Generates a custom SerDe
Seralize
implementation that adds an alternate root key to a Struct during serialization.