//! [![git]](https://git.philomathiclife.com/ascii_domain/log.html) [![crates-io]](https://crates.io/crates/ascii_domain) [![docs-rs]](crate)
//!
//! [git]: https://git.philomathiclife.com/git_badge.svg
//! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust
//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs
//!
//! `ascii_domain` is a library for efficiently parsing domains based on a supplied ASCII character set one
//! wants to enforce each [`dom::Label`] to conform to. The primary type in the library is [`dom::Domain`]
//! which can be thought of as domains in _representation_ format. Technically since any ASCII `u8` except
//! `b'.'` is allowed in a `Label`, it is more general than an actual representation format that doesn’t
//! include some form of escape characters. For a full-fledged DNS library look elsewhere (e.g.,
//! [`domain`](https://docs.rs/domain/latest/domain/)).
//!
//! The purpose of this library is to allow efficient customization of domain name parsing while still retaining
//! the hierarchical structure of a domain. Depending on one’s use case, allowed formats and characters can
//! differ. If one wants to conform to the [Domain Name System (DNS)](https://www.rfc-editor.org/rfc/rfc2181),
//! all octets are allowed; but conforming to [RFC 1123](https://www.rfc-editor.org/rfc/rfc1123) or
//! [RFC 5891](https://datatracker.ietf.org/doc/html/rfc5891) requires stricter formats and a reduced character
//! set.
/// Contains [`char_set::AllowedAscii`] which is how one dictates the character set [`dom::Domain::try_from_bytes`]
/// uses.
/// Contains [`dom::Domain`] which is a domain whose [`dom::Label`]s consist of a subset of the supplied
/// [`char_set::AllowedAscii`].
///
/// Also contains [`dom::Rfc1123Domain`] which is a `Domain` that conforms to
/// [RFC 1123](https://www.rfc-editor.org/rfc/rfc1123#page-13).
/// Contains a Serde [`Visitor`](https://docs.rs/serde/latest/serde/de/trait.Visitor.html) that can be used to help
/// deserialize [`dom::Domain`] wrappers.