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