flex_dns/rdata/
eui64.rs

1use crate::{Buffer, DnsMessage, DnsMessageError, MutBuffer};
2use crate::parse::Parse;
3use crate::rdata::{RData, RDataParse};
4use crate::write::WriteBytes;
5
6/// # MAC address record (EUI-64)
7/// This record is used to translate between a 64-bit MAC address used by the
8/// IEEE 802 protocol family and a fully qualified domain name.
9#[derive(Copy, Clone, Debug, PartialEq)]
10pub struct EUI64 {
11    /// mac_address is the MAC address
12    pub mac_address: [u8; 8],
13}
14
15impl<'a> RDataParse<'a> for EUI64 {
16    #[inline]
17    fn parse(rdata: &RData<'a>, i: &mut usize) -> Result<Self, DnsMessageError> {
18        let mac_address = <[u8; 8]>::parse(rdata, i)?;
19
20        Ok(Self {
21            mac_address,
22        })
23    }
24}
25
26impl<'a> WriteBytes for EUI64 {
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.mac_address.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        8,
45        [
46            0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
47            0x07, 0x08,
48        ],
49        EUI64 {
50            mac_address: [
51                0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
52            ],
53        },
54    );
55}