1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#[cfg(any(feature = "net", feature = "serde-net"))]
use crate::email;
use crate::error::Error;
use crate::{dns, domain, Result};
use psl_types::List;
pub trait DomainName<'a> {
fn parse_domain_name(&self, name: &'a str) -> Result<'a, domain::Name<'a>>;
}
impl<'a, T> DomainName<'a> for T
where
T: List<'a>,
{
fn parse_domain_name(&self, name: &'a str) -> Result<'a, domain::Name<'a>> {
domain::Name::parse(self, name).map_err(|kind| Error::new(kind, name))
}
}
pub trait DnsName<'a> {
fn parse_dns_name(&self, name: &'a str) -> Result<'a, dns::Name<'a>>;
}
impl<'a, T> DnsName<'a> for T
where
T: List<'a>,
{
fn parse_dns_name(&self, name: &'a str) -> Result<'a, dns::Name<'a>> {
dns::Name::parse(self, name).map_err(|kind| Error::new(kind, name))
}
}
#[cfg(any(feature = "net", feature = "serde-net"))]
pub trait EmailAddress<'a> {
fn parse_email_address(&self, name: &'a str) -> Result<'a, email::Address<'a>>;
}
#[cfg(any(feature = "net", feature = "serde-net"))]
impl<'a, T> EmailAddress<'a> for T
where
T: List<'a>,
{
fn parse_email_address(&self, name: &'a str) -> Result<'a, email::Address<'a>> {
email::Address::parse(self, name).map_err(|kind| Error::new(kind, name))
}
}