1use crate::{dns, domain, email, Result};
4use psl_types::List;
5
6pub trait DomainName {
8 fn parse_domain_name<'a>(&self, name: &'a str) -> Result<'a, domain::Name<'a>>;
12}
13
14impl<T> DomainName for T
15where
16 T: List,
17{
18 fn parse_domain_name<'a>(&self, name: &'a str) -> Result<'a, domain::Name<'a>> {
19 domain::Name::parse(self, name).map_err(|kind| kind.error_with(name))
20 }
21}
22
23pub trait DnsName {
25 fn parse_dns_name<'a>(&self, name: &'a str) -> Result<'a, dns::Name<'a>>;
29}
30
31impl<T> DnsName for T
32where
33 T: List,
34{
35 fn parse_dns_name<'a>(&self, name: &'a str) -> Result<'a, dns::Name<'a>> {
36 dns::Name::parse(self, name).map_err(|kind| kind.error_with(name))
37 }
38}
39
40pub trait EmailAddress {
42 fn parse_email_address<'a>(&self, name: &'a str) -> Result<'a, email::Address<'a>>;
43}
44
45impl<T> EmailAddress for T
46where
47 T: List,
48{
49 fn parse_email_address<'a>(&self, name: &'a str) -> Result<'a, email::Address<'a>> {
52 email::Address::parse(self, name).map_err(|kind| kind.error_with(name))
53 }
54}