dns-message-parser 0.9.0

Libary to encode and decode DNS packets
Documentation
use crate::{
    decode::Decoder,
    question::{QClass, QType, Question},
    {DecodeError, DecodeResult},
};
use std::convert::TryFrom;

impl<'a, 'b: 'a> Decoder<'a, 'b> {
    pub fn q_type(&mut self) -> DecodeResult<QType> {
        let buffer = self.u16()?;
        match QType::try_from(buffer) {
            Ok(q_type) => Ok(q_type),
            Err(buffer) => Err(DecodeError::QType(buffer)),
        }
    }

    pub fn q_class(&mut self) -> DecodeResult<QClass> {
        let buffer = self.u16()?;
        match QClass::try_from(buffer) {
            Ok(q_class) => Ok(q_class),
            Err(buffer) => Err(DecodeError::QClass(buffer)),
        }
    }

    pub fn question(&mut self) -> DecodeResult<Question> {
        let domain_name = self.domain_name()?;
        let q_type = self.q_type()?;
        let q_class = self.q_class()?;

        Ok(Question {
            domain_name,
            q_class,
            q_type,
        })
    }
}

impl_decode!(QType, q_type);

impl_decode!(QClass, q_class);

impl_decode!(Question, question);