3 stable releases

2.0.0 Apr 8, 2025
1.0.1 Jan 10, 2024
1.0.0 Feb 24, 2023

#1933 in Network programming

Download history 31/week @ 2025-03-14 119/week @ 2025-03-21 106/week @ 2025-03-28 153/week @ 2025-04-04 142/week @ 2025-04-11 21/week @ 2025-04-18 46/week @ 2025-04-25 124/week @ 2025-05-02 152/week @ 2025-05-09 49/week @ 2025-05-16 55/week @ 2025-05-23 27/week @ 2025-05-30 56/week @ 2025-06-06 47/week @ 2025-06-13 31/week @ 2025-06-20 29/week @ 2025-06-27

170 downloads per month

MIT license

53KB
437 lines

dns_name

Robust domain name parsing using the Public Suffix List

This library allows you to easily and accurately parse any given domain name.

let list = List::from_path("suffix-list.txt").unwrap();

let domain = list.parse_dns_name("www.example.com")?;
assert_eq!(domain.name(), "www.example.com");
assert_eq!(domain.rname(), "moc.elpmaxe.www");
assert_eq!(domain.root(), Some("example.com"));
assert_eq!(domain.suffix(), Some("com"));
assert_eq!(domain.registrable(), Some("example"));

// 2-level TLD
let domain = list.parse_dns_name("wWw.BlUeCaTnEtWoRkS.Uk.CoM.")?;
assert_eq!(domain.name(), "www.bluecatnetworks.uk.com.");
assert_eq!(domain.rname(), ".moc.ku.skrowtentaceulb.www");
assert_eq!(domain.root(), Some("bluecatnetworks.uk.com."));
assert_eq!(domain.suffix(), Some("uk.com."));
assert_eq!(domain.registrable(), Some("bluecatnetworks"));

// the root name
let domain = list.parse_dns_name(".")?;
assert_eq!(domain.name(), ".");
assert_eq!(domain.rname(), ".");
assert_eq!(domain.root(), None);
assert_eq!(domain.suffix(), None);
assert_eq!(domain.registrable(), None);

Dependencies

~15–25MB
~434K SLoC