dns-message 0.2.0

DNS message library
Documentation
use crate::header::{Flags, Header};
use crate::message::Message;
use crate::question::{Label, NameElement, Question};
use crate::resource_record::ResourceRecord;
use mt::WireLength;

impl WireLength<usize> for Header {
    fn wire_length(&self) -> usize {
        12
    }
}

impl WireLength<usize> for &Flags {
    fn wire_length(&self) -> usize {
        2
    }
}

impl<'a> WireLength<usize> for &Label<'a> {
    fn wire_length(&self) -> usize {
        1 + self.data.len()
    }
}

impl<'a> WireLength<usize> for NameElement<'a> {
    fn wire_length(&self) -> usize {
        match self {
            NameElement::Label(l) => l.wire_length(),
            NameElement::Pointer(_) => 2,
            NameElement::Root => 1,
            NameElement::Reserved => 0,
        }
    }
}

impl<'a> WireLength<usize> for Question<'a> {
    fn wire_length(&self) -> usize {
        self.q_name.wire_length() + 4
    }
}

impl<'a> WireLength<usize> for ResourceRecord<'a> {
    fn wire_length(&self) -> usize {
        self.rr_name.wire_length() + 10 + self.rr_data.len()
    }
}

impl<'a> WireLength<usize> for Message<'a> {
    fn wire_length(&self) -> usize {
        self.header.wire_length()
            + self.question.wire_length()
            + self.answer.wire_length()
            + self.authority.wire_length()
            + self.additional.wire_length()
    }
}