#email #email-address #validation #serde #serialization


A validating email type that can be serialised using Serde

4 stable releases

new 1.3.0 Jan 27, 2023
1.2.1 Jan 24, 2023
1.1.0 Nov 21, 2022
1.0.0 Nov 20, 2022

#370 in Encoding

Download history 52/week @ 2022-11-17 9/week @ 2022-11-24 4/week @ 2022-12-01 2/week @ 2022-12-08 1/week @ 2022-12-15 1/week @ 2022-12-29 1/week @ 2023-01-05 4/week @ 2023-01-12 44/week @ 2023-01-19 47/week @ 2023-01-26

96 downloads per month

MIT license

373 lines

Serde Email

A validating email type that can be serialised using Serde (and Sea Orm).

crate docs


This crate is for creating Email objects.

  • It allows you to have Email as a type. i.e. let emails : Vec<Email> = 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. Serialisation with CLIs, requests, etc. Should all work thanks to this.


  • serde Default - Enables serde serialisation and deserialisation.
  • sea-orm - Enables Sea Orm use with DB entities.


Building your own email addresses

use ::emailio::Email;

let email = Email::new("test@example.com".to_string()).expect("A valid email address");

Validating the email address yourself

use ::emailio::is_valid_email;

if is_valid_email(&"test@example.com") {
  // do something

Serialisation / Deserialisation

    use ::emailio::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.

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 {
    pub id: i32,
    pub email: Email, // use as an email field
    pub created: OffsetDateTime,

Special Thanks

The validation is all done by the email_address crate.


~28K SLoC