#![cfg_attr(rustfmt, rustfmt_skip)]
/// DNS CLASS
///
/// Originally QCLASS was a superset of CLASS; RFC 6895 now defines:
///
/// > There are currently two subcategories of DNS CLASSes: normal,
/// > data-containing classes; and QCLASSes that are only meaningful in
/// > queries or updates.
///
/// ## `ANY`
///
/// QTYPE 255 either (rules from RFC 6895):
///
/// - doesn't have a mnemonic, violating the existence rule
/// - has "*" as mnemonic, violating the formatting rule
/// - has "ANY" as mnemonic, violating the uniquess rule (class ANY)
///
/// The QCLASS `ANY` is mostly useless anyway and shouldn't be used in
/// normal queries.
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
pub struct Class(pub u16);
impl Class {
/// CLASS Internet
pub const IN: Self = Self(0x0001); // RFC 1035
// CS = 0x0002, // "CSNET" (not just obsolete; unassigned in the IANA registry)
/// CLASS "Chaos"
pub const CH: Self = Self(0x0003); // "Chaos"
/// CLASS "Hesiod"
pub const HS: Self = Self(0x0004); // "Hesiod"
/// QCLASS NONE
pub const NONE: Self = Self(0x00fe); // RFC 2136
/// QCLASS "*" (ANY)
pub const ANY: Self = Self(0x00ff); // RFC 1035
}
/// DNS (RR)TYPE
///
/// Originally QTYPE was a superset of TYPE; RFC 6895 now defines:
///
/// > There are three subcategories of RRTYPE numbers: data TYPEs,
/// > QTYPEs, and Meta-TYPEs.
///
/// ## `ANY`
///
/// QTYPE 255 ("*") doesn't seem to have an official mnemonic; `ANY` is
/// used in most tools though.
///
/// The `ANY` mnemonic conflicts with the QCLASS `ANY` though...
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
pub struct Type(pub u16);
impl Type {
/// a host address
pub const A: Self = Self(0x0001); // RFC 1035
/// an authoritative name server
pub const NS: Self = Self(0x0002); // RFC 1035
/// a mail destination (OBSOLETE - use MX)
pub const MD: Self = Self(0x0003); // RFC 1035
/// a mail forwarder (OBSOLETE - use MX)
pub const MF: Self = Self(0x0004); // RFC 1035
/// the canonical name for an alias
pub const CNAME: Self = Self(0x0005); // RFC 1035
/// marks the start of a zone of authority
pub const SOA: Self = Self(0x0006); // RFC 1035
/// a mailbox domain name (EXPERIMENTAL)
pub const MB: Self = Self(0x0007); // RFC 1035
/// a mail group member (EXPERIMENTAL)
pub const MG: Self = Self(0x0008); // RFC 1035
/// a mail rename domain name (EXPERIMENTAL)
pub const MR: Self = Self(0x0009); // RFC 1035
/// a null RR (EXPERIMENTAL)
pub const NULL: Self = Self(0x000a); // RFC 1035
/// a well known service description
pub const WKS: Self = Self(0x000b); // RFC 1035
/// a domain name pointer
pub const PTR: Self = Self(0x000c); // RFC 1035
/// host information
pub const HINFO: Self = Self(0x000d); // RFC 1035
/// mailbox or mail list information
pub const MINFO: Self = Self(0x000e); // RFC 1035
/// mail exchange
pub const MX: Self = Self(0x000f); // RFC 1035
/// text strings
pub const TXT: Self = Self(0x0010); // RFC 1035
/// for Responsible Person
pub const RP: Self = Self(0x0011); // RFC 1183
/// for AFS Data Base location
pub const AFSDB: Self = Self(0x0012); // RFC 1183
/// for X.25 PSDN address
pub const X25: Self = Self(0x0013); // RFC 1183
/// for ISDN address
pub const ISDN: Self = Self(0x0014); // RFC 1183
/// for Route Through
pub const RT: Self = Self(0x0015); // RFC 1183
/// for NSAP address, NSAP style A record
pub const NSAP: Self = Self(0x0016); // RFC 1706
/// for domain name pointer, NSAP style
pub const NSAP_PTR: Self = Self(0x0017); // RFC 1348
/// for security signature
pub const SIG: Self = Self(0x0018); // RFC 2535
/// for security key
pub const KEY: Self = Self(0x0019); // RFC 2535
/// X.400 mail mapping information
pub const PX: Self = Self(0x001a); // RFC 2163
/// Geographical Position
pub const GPOS: Self = Self(0x001b); // RFC 1712
/// IP6 Address
pub const AAAA: Self = Self(0x001c); // RFC 3596
/// Location Information
pub const LOC: Self = Self(0x001d); // RFC 1876
/// Next Domain (OBSOLETE)
pub const NXT: Self = Self(0x001e); // RFC 2535
/// Endpoint Identifier
pub const EID: Self = Self(0x001f); // Michael Patton: http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt
/// Nimrod Locator
pub const NIMLOC: Self = Self(0x0020); // Michael Patton: http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt
/// Server Selection
pub const SRV: Self = Self(0x0021); // RFC 2782
/// ATM Address
pub const ATMA: Self = Self(0x0022); // http://www.broadband-forum.org/ftp/pub/approved-specs/af-dans-0152.000.pdf
/// Naming Authority Pointer
pub const NAPTR: Self = Self(0x0023); // RFC 2168
/// Key Exchanger
pub const KX: Self = Self(0x0024); // RFC 2230
/// CERT
pub const CERT: Self = Self(0x0025); // RFC 4398
/// A6 (OBSOLETE - use AAAA)
pub const A6: Self = Self(0x0026); // RFC 2874
/// DNAME
pub const DNAME: Self = Self(0x0027); // RFC 6672
/// SINK
pub const SINK: Self = Self(0x0028); // Donald E Eastlake: http://tools.ietf.org/html/draft-eastlake-kitchen-sink
/// OPT
pub const OPT: Self = Self(0x0029); // RFC 6891
/// APL
pub const APL: Self = Self(0x002a); // RFC 3123
/// Delegation Signer
pub const DS: Self = Self(0x002b); // RFC 3658
/// SSH Key Fingerprint
pub const SSHFP: Self = Self(0x002c); // RFC 4255
/// IPSECKEY
pub const IPSECKEY: Self = Self(0x002d); // RFC 4025
/// RRSIG
pub const RRSIG: Self = Self(0x002e); // RFC 4034
/// NSEC
pub const NSEC: Self = Self(0x002f); // RFC 4034
/// DNSKEY
pub const DNSKEY: Self = Self(0x0030); // RFC 4034
/// DHCID
pub const DHCID: Self = Self(0x0031); // RFC 4701
/// NSEC3
pub const NSEC3: Self = Self(0x0032); // RFC 5155
/// NSEC3PARAM
pub const NSEC3PARAM: Self = Self(0x0033); // RFC 5155
/// TLSA
pub const TLSA: Self = Self(0x0034); // RFC 6698
/// S/MIME cert association
pub const SMIMEA: Self = Self(0x0035); // RFC 8162
/// Host Identity Protocol
pub const HIP: Self = Self(0x0037); // RFC 8005
/// NINFO
pub const NINFO: Self = Self(0x0038); // Jim Reid: https://tools.ietf.org/html/draft-reid-dnsext-zs-01
/// RKEY
pub const RKEY: Self = Self(0x0039); // Jim Reid: https://tools.ietf.org/html/draft-reid-dnsext-rkey-00
/// Trust Anchor LINK
pub const TALINK: Self = Self(0x003a); // Wouter Wijngaards
/// Child DS
pub const CDS: Self = Self(0x003b); // RFC 7344
/// DNSKEY(s) the Child wants reflected in DS
pub const CDNSKEY: Self = Self(0x003c); // RFC 7344
/// OpenPGP Key
pub const OPENPGPKEY: Self = Self(0x003d); // RFC 7929
/// Child-To-Parent Synchronization
pub const CSYNC: Self = Self(0x003e); // RFC 7477
/// SPF
pub const SPF: Self = Self(0x0063); // RFC 7208
/// UINFO
pub const UINFO: Self = Self(0x0064); // IANA-Reserved
/// UID
pub const UID: Self = Self(0x0065); // IANA-Reserved
/// GID
pub const GID: Self = Self(0x0066); // IANA-Reserved
/// UNSPEC
pub const UNSPEC: Self = Self(0x0067); // IANA-Reserved
/// NID
pub const NID: Self = Self(0x0068); // RFC 6742
/// L32
pub const L32: Self = Self(0x0069); // RFC 6742
/// L64
pub const L64: Self = Self(0x006a); // RFC 6742
/// LP
pub const LP: Self = Self(0x006b); // RFC 6742
/// an EUI-48 address
pub const EUI48: Self = Self(0x006c); // RFC 7043
/// an EUI-64 address
pub const EUI64: Self = Self(0x006d); // RFC 7043
// 0x0080..0x00ff: meta and qtypes
/// Transaction Key
pub const TKEY: Self = Self(0x00f9); // RFC 2930
/// Transaction Signature
pub const TSIG: Self = Self(0x00fa); // RFC 2845
/// incremental transfer
pub const IXFR: Self = Self(0x00fb); // RFC 1995
/// transfer of an entire zone
pub const AXFR: Self = Self(0x00fc); // RFC 1035
/// mailbox-related RRs (MB, MG or MR)
pub const MAILB: Self = Self(0x00fd); // RFC 1035
/// mail agent RRs (OBSOLETE - see MX)
pub const MAILA: Self = Self(0x00fe); // RFC 1035
/// "*", a request for all records the server/cache has available
pub const ANY: Self = Self(0x00ff); // RFC 1035
/// URI
pub const URI: Self = Self(0x0100); // RFC 7553
/// Certification Authority Restriction
pub const CAA: Self = Self(0x0101); // RFC 6844
/// Application Visibility and Control
pub const AVC: Self = Self(0x0102); // Wolfgang Riedel
/// Digital Object Architecture
pub const DOA: Self = Self(0x0103); // http://www.iana.org/go/draft-durand-doa-over-dns
/// DNSSEC Trust Authorities
pub const TA: Self = Self(0x8000); //
/// DNSSEC Lookaside Validation
pub const DLV: Self = Self(0x8001); // RFC 4431
}