domain/rdata/
dname.rs

1use crate::base::cmp::CanonicalOrd;
2use crate::base::name::{ParsedDname, ToDname};
3use crate::base::wire::ParseError;
4use core::cmp::Ordering;
5use core::str::FromStr;
6use core::{fmt, hash};
7use octseq::octets::{Octets, OctetsFrom};
8use octseq::parse::Parser;
9
10//------------ Dname --------------------------------------------------------
11
12dname_type_canonical! {
13    /// DNAME record data.
14    ///
15    /// The DNAME record provides redirection for a subtree of the domain
16    /// name tree in the DNS.
17    ///
18    /// The DNAME type is defined in RFC 6672.
19    (Dname, Dname, dname, into_dname)
20}
21
22//============ Testing ======================================================
23
24#[cfg(test)]
25#[cfg(all(feature = "std", feature = "bytes"))]
26mod test {
27    use super::*;
28    use crate::base::name::Dname as Name;
29    use crate::base::rdata::test::{
30        test_compose_parse, test_rdlen, test_scan,
31    };
32    use core::str::FromStr;
33    use std::vec::Vec;
34
35    #[test]
36    fn create_dname() {
37        let name = Name::<Vec<u8>>::from_str("bar.example.com").unwrap();
38        let rdata = Dname::new(name.clone());
39        assert_eq!(rdata.dname(), &name);
40    }
41    // This covers all the other generated types, too.
42
43    #[test]
44    #[allow(clippy::redundant_closure)] // lifetimes ...
45    fn dname_compose_parse_scan() {
46        let rdata =
47            Dname::<Name<Vec<u8>>>::from_str("www.example.com").unwrap();
48        test_rdlen(&rdata);
49        test_compose_parse(&rdata, |parser| Dname::parse(parser));
50        test_scan(&["www.example.com"], Dname::scan, &rdata);
51    }
52}