[](https://docs.rs/derive-serialize-into)
[](https://crates.io/crates/derive-serialize-into)
# Derive `Serialize`, `Deserialize` for wrapper types
This crate provides several custom derives that provide implementations of
[serde](https://serde.rs/)'s `Serialize` and `Deserialize` traits for wrapper types, as well as
`Deserialize` implementations that perform some validation.
Sometimes you have a single-field type
```rust
#[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
```rust
#[derive(DeserializeTryFrom, TryFromInner)]
#[try_from_inner = "validator::validate_email"]
struct Email(String);
```
or
```rust
#[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.