Crate serde_versions_derive[−][src]
Expand description
Serde Versions Derive
serde_versions_derive
exports an attribute macro that adds versioning support for structs.
When serializing a named field struct it will automatically add a new field containing the version. It also allows deserializing the versioned type directly back to the unversioned one.
Under the hood this works by creating a new struct that wraps the original struct plus adds a version byte field.
Internally this new struct uses #[serde(flatten)]
to serialize as expected.
The original struct uses #[serde(to, from)]
to add the version field when serializing and remove it when deserializing.
usage:
#[version(3)] #[derive(Clone, Serialize, Deserialize)] struct S { i: i32, }
This produces the following
#[derive(Clone, Serialize, Deserialize)] #[serde(into = "_Sv3", from = "_Sv3")] struct S { i: i32, } #[derive(Clone, Serialize, Deserialize)] struct _Sv3 { version: u8, #[serde(flatten)] inner: S } // plus implementations of To, From and to_versioned() for S
Note due to limitations of #[serde(to, from)]
this does not support structs with type parameters.
Attribute Macros
version | Generate a new struct with a version field and ensure this struct is converted to that form before serialization. |