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
Deseralizeimplementation that adds an alternate root key to a Struct during deserialization. - serde_
with_ root - Helper macro that will generate both the
SerializeandDeserializeimplementations 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
Seralizeimplementation that adds an alternate root key to a Struct during serialization.