Crates.io | adbyss_psl |
lib.rs | adbyss_psl |
version | |
source | src |
created_at | 2021-06-24 21:12:39.796225 |
updated_at | 2024-11-28 20:02:42.222987 |
description | A minimal Public Suffix List hostname validator. |
homepage | |
repository | https://github.com/Blobfolio/adbyss |
max_upload_size | |
id | 414619 |
Cargo.toml error: | TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
This library contains a single public-facing struct — adbyss_psl::Domain
— used for validating and normalizing Internet hostnames, like "www.domain.com".
It will:
Validate, normalize, and Puny-encode internationalized/Unicode labels (RFC 3492);
Validate and normalize the public suffix;
Ensure conformance with RFC 1123;
And locate the boundaries of the subdomain (if any), root (required), and suffix (required);
New instances of Domain
can be initialized using either Domain::new
or TryFrom<&str>
.
use adbyss_psl::Domain;
// These are equivalent and fine:
assert!(Domain::new("www.MyDomain.com").is_some());
assert!(Domain::try_from("www.MyDomain.com").is_ok());
// The following is valid DNS, but invalid as an Internet hostname:
assert!(Domain::new("_acme-challenge.mydomain.com").is_none());
Valid Internet hostnames must be no longer than 253 characters, and contain both root and (valid) suffix components.
Their labels — the bits between the dots — must additionally:
-
;Unicode/internationalized labels are allowed, but must be Puny-encodable and not contain any conflicting bidirectionality constraints. Domain
will encode such labels using Punycode when it finds them, ensuring the resulting hostname will always be ASCII-only.
Post-parsing, Domain
gives you access to each individual component, or the whole thing:
use adbyss_psl::Domain;
let dom = Domain::new("www.MyDomain.com").unwrap();
// Pull out the pieces if you're into that sort of thing.
assert_eq!(dom.host(), "www.mydomain.com");
assert_eq!(dom.subdomain(), Some("www"));
assert_eq!(dom.root(), "mydomain");
assert_eq!(dom.suffix(), "com");
assert_eq!(dom.tld(), "mydomain.com");
// If you just want the sanitized host back as an owned value, use
// `Domain::take` or `String::from`:
let owned = dom.take(); // "www.mydomain.com"
serde
: Enables serialization/deserialization support.