Crate serde_struct_wrapper[][src]

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 and Deserialize implementations with an alternate root key. This is the same as manually calling both deserialize_with_root! and serialize_with_root!.

serialize_with_root

Generates a custom SerDe Seralize implementation that adds an alternate root key to a Struct during serialization.