webrtc_mdns/message/resource/
mx.rs

1use super::*;
2use crate::error::Result;
3use crate::message::name::*;
4use crate::message::packer::*;
5
6// An MXResource is an mx Resource record.
7#[derive(Default, Debug, Clone, PartialEq, Eq)]
8pub struct MxResource {
9    pub pref: u16,
10    pub mx: Name,
11}
12
13impl fmt::Display for MxResource {
14    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15        write!(
16            f,
17            "dnsmessage.MXResource{{pref: {}, mx: {}}}",
18            self.pref, self.mx
19        )
20    }
21}
22
23impl ResourceBody for MxResource {
24    fn real_type(&self) -> DnsType {
25        DnsType::Mx
26    }
27
28    // pack appends the wire format of the MXResource to msg.
29    fn pack(
30        &self,
31        mut msg: Vec<u8>,
32        compression: &mut Option<HashMap<String, usize>>,
33        compression_off: usize,
34    ) -> Result<Vec<u8>> {
35        msg = pack_uint16(msg, self.pref);
36        msg = self.mx.pack(msg, compression, compression_off)?;
37        Ok(msg)
38    }
39
40    fn unpack(&mut self, msg: &[u8], off: usize, _length: usize) -> Result<usize> {
41        let (pref, off) = unpack_uint16(msg, off)?;
42        self.pref = pref;
43        self.mx.unpack(msg, off)
44    }
45}