flex_dns/rdata/
ta.rs

1use crate::{Buffer, DnsMessage, DnsMessageError, MutBuffer};
2use crate::characters::Characters;
3use crate::parse::Parse;
4use crate::rdata::{RData, RDataParse};
5use crate::write::WriteBytes;
6
7/// # DNSSEC trust authorities record (TA)
8/// This record is used to publish the public key of a DNSSEC trust anchor.
9#[derive(Copy, Clone, Debug, PartialEq)]
10pub struct Ta<'a> {
11    /// trust_anchor_link is the trust anchor link
12    pub trust_anchor_link: Characters<'a>,
13}
14
15impl<'a> RDataParse<'a> for Ta<'a> {
16    #[inline]
17    fn parse(rdata: &RData<'a>, i: &mut usize) -> Result<Self, DnsMessageError> {
18        let trust_anchor_link = Characters::parse(rdata, i)?;
19
20        Ok(Self {
21            trust_anchor_link,
22        })
23    }
24}
25
26impl<'a> WriteBytes for Ta<'a> {
27    #[inline]
28    fn write<
29        const PTR_STORAGE: usize,
30        const DNS_SECTION: usize,
31        B: MutBuffer + Buffer,
32    >(&self, message: &mut DnsMessage<PTR_STORAGE, DNS_SECTION, B>) -> Result<usize, DnsMessageError> {
33        self.trust_anchor_link.write(message)
34    }
35}
36
37#[cfg(test)]
38mod test {
39    use crate::rdata::testutils::parse_write_test;
40
41    use super::*;
42
43    parse_write_test!(
44        4,
45        [
46            0x03,
47            b'w', b'w', b'w', // trust_anchor_link
48        ],
49        Ta {
50            trust_anchor_link: unsafe { Characters::new_unchecked(b"www") },
51        },
52    );
53}