5 unstable releases
Uses old Rust 2015
0.3.1 | Apr 14, 2018 |
---|---|
0.3.0 | Apr 14, 2018 |
0.2.1 | Apr 13, 2018 |
0.2.0 | Apr 12, 2018 |
0.1.0 | Apr 12, 2018 |
#53 in #derive-deserialize
29 downloads per month
22KB
238 lines
Derive Serialize
, Deserialize
for wrapper types
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 ""user@domain.com"
" instead of "{ "email": "user@domain.com" }
". 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.
Dependencies
~2MB
~47K SLoC