This crate provides several custom derives that provide implementations of
serde's Serialize
and Deserialize
traits for wrapper types, as well as
Deserialize
implementations that perform some validation.
Sometimes you have a single-field type
#[derive(DeserializeFrom, FromInner, IntoInner, SerializeInto)]
struct Contact {
email: String,
}
which you want to serialize and deserialize as a string instead of a struct, e.g. you want its JSON
representation to just be ""[email protected]"
" instead of "{ "email": "[email protected]" }
". The
above derive attribute creates Serialize
and Deserialize
implementations for that purpose, as
well as Into
and From
implementations to convert between String
and Contact
.
Another example is a validated wrapper type like
#[derive(DeserializeTryFrom, TryFromInner)]
#[try_from_inner = "validator::validate_email"]
struct Email(String);
or
#[derive(DeserializeTryFrom, TryFromInner)]
#[try_from_inner_regex = "^\\+?[[:digit:]]+$"]
struct Phone(String);
that should never be instantianted with a string that doesn't represent a valid email address or
phone number. The above examples create Deserialize
and TryFrom
implementations accordingly.