1use crate::{Buffer, DnsMessage, DnsMessageError, MutBuffer};
2use crate::parse::Parse;
3use crate::rdata::{RData, RDataParse};
4use crate::write::WriteBytes;
5
6#[derive(Copy, Clone, Debug, PartialEq)]
9pub struct Aaaa {
10 pub address: [u8; 16],
12}
13
14impl<'a> RDataParse<'a> for Aaaa {
15 #[inline]
16 fn parse(rdata: &RData<'a>, i: &mut usize) -> Result<Self, DnsMessageError> {
17 Ok(Self { address: <[u8; 16]>::parse(rdata.buffer, i)? })
18 }
19}
20
21impl WriteBytes for Aaaa {
22 #[inline]
23 fn write<
24 const PTR_STORAGE: usize,
25 const DNS_SECTION: usize,
26 B: MutBuffer + Buffer,
27 >(&self, message: &mut DnsMessage<PTR_STORAGE, DNS_SECTION, B>) -> Result<usize, DnsMessageError> {
28 self.address.write(message)
29 }
30}
31
32#[cfg(test)]
33mod test {
34 use crate::rdata::testutils::parse_write_test;
35
36 use super::*;
37
38 parse_write_test!(
39 16,
40 [
41 0x01, 0x02, 0x03, 0x04,
42 0x01, 0x02, 0x03, 0x04,
43 0x01, 0x02, 0x03, 0x04,
44 0x01, 0x02, 0x03, 0x04,
45 ],
46 Aaaa {
47 address: [
48 0x01, 0x02, 0x03, 0x04,
49 0x01, 0x02, 0x03, 0x04,
50 0x01, 0x02, 0x03, 0x04,
51 0x01, 0x02, 0x03, 0x04,
52 ],
53 },
54 );
55}