Crate serde_email

source ·
Expand description

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 structurally 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.)


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


Building your own email addresses

use ::serde_email::Email;

let email = Email::from_str("").expect("A valid email address");

Validating the email address yourself

use ::serde_email::is_valid_email;

if is_valid_email(&"") {
  // do something

Serialisation / Deserialisation

use ::serde_email::Email;
use ::serde::Deserialize;
use ::serde::Serialize;
use ::serde_json;

#[derive(Deserialize, Serialize)]
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": ""

// 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 {}",,;

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.

Required, the sea-orm feature must be enabled for Sea Orm support.

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

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}

impl ActiveModelBehavior for ActiveModel {}


  • A validated Email object.