Serde Email
A validating email type that can be serialised using Serde (and Sea Orm).
[![crate](https://img.shields.io/crates/v/serde-email.svg)](https://crates.io/crates/serde-email)
[![docs](https://docs.rs/serde-email/badge.svg)](https://docs.rs/serde-email)
## Introduction
This crate is for creating `Email` objects.
* It allows you to have Email **as a type**. i.e. `let emails : Vec = vec![]`.
* The `Email` type guarantees to be **validated**. Once it is created, you can be confident it's safe to use as an email.
* The `Email` type can also be **used as strings**. This allows interoptability with lots of connector functions which will take a String.
* It **supports Serde** out of the box. For Serialisation with CLIs, requests, etc.
(Note this library will not check if the Email address exists. It only validates that it looks correct.)
## Features
* `serde` **Default** - Enables serde serialisation and deserialisation.
* `sea-orm` - Enables Sea Orm use with DB entities.
## Usage
### Building your own email addresses
```rust
use ::serde_email::Email;
let email = Email::from_str("test@example.com").expect("A valid email address");
```
### Validating the email address yourself
```rust
use ::serde_email::is_valid_email;
if is_valid_email(&"test@example.com") {
// do something
}
```
### Serialisation / Deserialisation
```rust
use ::serde_email::Email;
use ::serde_json;
struct Person {
name: String,
email: Email,
}
// Some JSON input data as a &str. Maybe this comes from the user.
let data = r#"
{
"name": "John Doe",
"email": "john@example.com"
}"#;
// Parse the string of data into serde_json::Value.
let person: Person = serde_json::from_str(data).unwrap();
// Access parts of the data by indexing with square brackets.
println!("Hello {} I'll email you are {}", person.name, person.email);
```
### Sea Orm Entities
You can use the `Email` type with Sea Orm, including using it to save data to the DB.
Underneath it will serialise to a `Text` type within the DB.
```rust
use ::sea_orm::entity::prelude::*;
use ::serde::Deserialize;
use ::serde::Serialize;
use ::serde_email::Email;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "user")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub email: Email, // use as an email field
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}
```
## Special Thanks
The validation is all done by the [email_address crate](https://crates.io/crates/email_address).