# Email type
Email type for approach suggested by Alexis King - ["Parse, don't validate"](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/).
## How to use:
Add dependency:
```toml
email-type-rs = { git = "https://github.com/lebe-dev/email-type-rs", version = "1.0.0", features = ["utils"] }
```
Use:
```rust
let email = Email::from_str("lexi.lambda@gmail.com")?;
let email = "lexi.lambda@gmail.com".parse()?;
// fn some_func(value: &str)
some_func(email.as_str());
some_func(&email);
```
Useful for REST API Endpoints, i.e. `/api/register` accepts:
```rust
#[derive(Deserialize)]
struct UserRegistrationRequest {
pub email: Email,
...
}
```
Incoming JSON with invalid value in `email` field will raise deserialization error (Serde).
## Util functions
Add to `Cargo.toml`:
```toml
[dev-dependencies]
email-type-rs = { git = "https://github.com/lebe-dev/email-type-rs", version = "1.0.0", features = ["utils"] }
```
Functions:
- `get_random_email()` - return random `Email`. Useful for tests.
## Thanks
- Alexis King, article - [Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/)
- Justin Wernick, article - [The Newtype Pattern In Rust](https://www.worthe-it.co.za/blog/2020-10-31-newtype-pattern-in-rust.html)