serde_struct_wrapper

Crates.ioserde_struct_wrapper
lib.rsserde_struct_wrapper
version0.3.2
sourcesrc
created_at2018-08-18 06:35:20.002805
updated_at2018-08-18 06:56:15.408165
descriptionWrap Structs with an alternate root element during serialization and deserialization using Serde
homepage
repositoryhttps://github.com/balajisivaraman/serde_struct_wrapper
max_upload_size
id80030
size27,906
Balaji Sivaraman (balajisivaraman)

documentation

https://docs.rs/serde_struct_wrapper/

README

Serde Struct Wrapper

Build
Status Latest
Version Rust
Documentation

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.

License

Serde is licensed under either of

at your option.

Credits

The initial Deserializer implementation for this crate was provided by David Tolnay in this Github issue. The code provided there was used as the base to provide this crate.

Commit count: 15

cargo fmt