Robust domain name parsing using the Public Suffix List
This library allows you to easily and accurately parse any given domain name.
use addr::{dns, domain, Error};
let domain = domain::Name::parse("www.example.com")?;
assert_eq!(domain.root(), "example.com");
assert_eq!(domain.suffix(), "com");
let name = idna::domain_to_ascii("www.食狮.中国")
.map_err(|_| Error::InvalidDomain)?;
let domain = domain::Name::parse(name.as_str())?;
assert_eq!(domain.root(), "xn--85x722f.xn--fiqs8s");
assert_eq!(domain.suffix(), "xn--fiqs8s");
let domain = domain::Name::parse("www.xn--85x722f.xn--55qx5d.cn")?;
assert_eq!(domain.root(), "xn--85x722f.xn--55qx5d.cn");
assert_eq!(domain.suffix(), "xn--55qx5d.cn");
let domain = domain::Name::parse("a.b.example.uk.com")?;
assert_eq!(domain.root(), "example.uk.com");
assert_eq!(domain.suffix(), "uk.com");
let name = dns::Name::parse("_tcp.example.com.")?;
assert_eq!(name.suffix(), Some("com."));
assert!(domain.has_known_suffix());