From b7025344f11bc7ae05d2a4d7c6f0f20dbeecf9b6 Mon Sep 17 00:00:00 2001 From: Philipp Korber Date: Mon, 3 Dec 2018 17:32:58 +0100 Subject: feat(Domain) impl `FromStr` for domain --- headers/src/header_components/email.rs | 29 ++++++++++++++++++++++++----- mail/README.md | 4 ++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/headers/src/header_components/email.rs b/headers/src/header_components/email.rs index afe549f..5b9ad4b 100644 --- a/headers/src/header_components/email.rs +++ b/headers/src/header_components/email.rs @@ -1,5 +1,6 @@ use std::ops::Deref; use std::borrow::Cow; +use std::str::FromStr; use failure::Fail; use soft_ascii_string::{SoftAsciiStr, SoftAsciiString, SoftAsciiChar}; @@ -163,19 +164,28 @@ impl Deref for LocalPart { impl HeaderTryFrom for Domain where T: HeaderTryInto { - fn try_from( input: T ) -> Result { + fn try_from(input: T) -> Result { let input = input.try_into()?; let item = - match Domain::check_domain( input.as_str() )? { + match Domain::check_domain(input.as_str())? { MailType::Ascii | MailType::Mime8BitEnabled => { - SimpleItem::Ascii( input.into_ascii_item_unchecked() ) + SimpleItem::Ascii(input.into_ascii_item_unchecked()) }, MailType::Internationalized => { - SimpleItem::from_utf8_input( input ) + SimpleItem::from_utf8_input(input) } }; - Ok( Domain( item ) ) + Ok(Domain(item)) + } +} + +impl FromStr for Domain { + type Err = ComponentCreationError; + + fn from_str(domain: &str) -> Result { + let input = Input::from(domain); + Self::try_from(input) } } @@ -401,4 +411,13 @@ mod test { let stringified = domain.into_ascii_string().unwrap(); assert_eq!(&*stringified, "xn--h-1ga.test") } + + #[test] + fn domain_from_str() { + let domain: Domain = "1aim.com".parse().unwrap(); + assert_eq!(domain.as_str(), "1aim.com"); + + let res: Result = "...".parse(); + assert!(res.is_err()); + } } \ No newline at end of file diff --git a/mail/README.md b/mail/README.md index 994c5c0..4dd7ee5 100644 --- a/mail/README.md +++ b/mail/README.md @@ -1,6 +1,6 @@ -# mail / mail-api   +# mail   -Documentation can be [viewed on docs.rs](https://docs.rs/mail-api). +Documentation can be [viewed on docs.rs](https://docs.rs/mail). Facade which re-exports functionality from a number of mail related crates. -- cgit v1.2.3