xref: /webrtc/mdns/src/message/resource/mx.rs (revision ffe74184)
1 use super::*;
2 use crate::error::Result;
3 use crate::message::name::*;
4 use crate::message::packer::*;
5 
6 // An MXResource is an mx Resource record.
7 #[derive(Default, Debug, Clone, PartialEq, Eq)]
8 pub struct MxResource {
9     pub pref: u16,
10     pub mx: Name,
11 }
12 
13 impl fmt::Display for MxResource {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result14     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 
23 impl ResourceBody for MxResource {
real_type(&self) -> DnsType24     fn real_type(&self) -> DnsType {
25         DnsType::Mx
26     }
27 
28     // pack appends the wire format of the MXResource to msg.
pack( &self, mut msg: Vec<u8>, compression: &mut Option<HashMap<String, usize>>, compression_off: usize, ) -> Result<Vec<u8>>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 
unpack(&mut self, msg: &[u8], off: usize, _length: usize) -> Result<usize>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 }
46