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.