1#![allow(missing_docs)] pub mod a;
6pub mod aaaa;
7pub mod all;
8pub mod axfr;
9pub mod cname;
10pub mod hinfo;
11pub mod maila;
12pub mod mailb;
13pub mod mb;
14pub mod mf;
15pub mod mg;
16pub mod minfo;
17pub mod mr;
18pub mod mx;
19pub mod ns;
20pub mod nsec;
21pub mod null;
22pub mod opt;
23pub mod ptr;
24pub mod soa;
25pub mod srv;
26pub mod txt;
27pub mod wks;
28
29use {Type, Error};
30
31pub use self::a::Record as A;
32pub use self::aaaa::Record as Aaaa;
33pub use self::cname::Record as Cname;
34pub use self::mx::Record as Mx;
35pub use self::ns::Record as Ns;
36pub use self::nsec::Record as Nsec;
37pub use self::opt::Record as Opt;
38pub use self::ptr::Record as Ptr;
39pub use self::soa::Record as Soa;
40pub use self::srv::Record as Srv;
41pub use self::txt::Record as Txt;
42
43pub type RDataResult<'a> = Result<RData<'a>, Error>;
44
45#[derive(Debug)]
47pub enum RData<'a> {
48 A(A),
49 AAAA(Aaaa),
50 CNAME(Cname<'a>),
51 MX(Mx<'a>),
52 NS(Ns<'a>),
53 PTR(Ptr<'a>),
54 SOA(Soa<'a>),
55 SRV(Srv<'a>),
56 TXT(Txt<'a>),
57 Unknown(&'a [u8]),
59}
60
61pub (crate) trait Record<'a> {
62 const TYPE: isize;
63
64 fn parse(rdata: &'a [u8], original: &'a [u8]) -> RDataResult<'a>;
65}
66
67impl<'a> RData<'a> {
68 pub fn parse(typ: Type, rdata: &'a [u8], original: &'a [u8]) -> RDataResult<'a> {
70 match typ {
71 Type::A => A::parse(rdata, original),
72 Type::AAAA => Aaaa::parse(rdata, original),
73 Type::CNAME => Cname::parse(rdata, original),
74 Type::NS => Ns::parse(rdata, original),
75 Type::MX => Mx::parse(rdata, original),
76 Type::PTR => Ptr::parse(rdata, original),
77 Type::SOA => Soa::parse(rdata, original),
78 Type::SRV => Srv::parse(rdata, original),
79 Type::TXT => Txt::parse(rdata, original),
80 _ => Ok(RData::Unknown(rdata)),
81 }
82 }
83}