dns_message_parser/decode/
question.rs

1use crate::{
2    decode::Decoder,
3    question::{QClass, QType, Question},
4    {DecodeError, DecodeResult},
5};
6use std::convert::TryFrom;
7
8impl<'a, 'b: 'a> Decoder<'a, 'b> {
9    pub fn q_type(&mut self) -> DecodeResult<QType> {
10        let buffer = self.u16()?;
11        match QType::try_from(buffer) {
12            Ok(q_type) => Ok(q_type),
13            Err(buffer) => Err(DecodeError::QType(buffer)),
14        }
15    }
16
17    pub fn q_class(&mut self) -> DecodeResult<QClass> {
18        let buffer = self.u16()?;
19        match QClass::try_from(buffer) {
20            Ok(q_class) => Ok(q_class),
21            Err(buffer) => Err(DecodeError::QClass(buffer)),
22        }
23    }
24
25    pub fn question(&mut self) -> DecodeResult<Question> {
26        let domain_name = self.domain_name()?;
27        let q_type = self.q_type()?;
28        let q_class = self.q_class()?;
29
30        Ok(Question {
31            domain_name,
32            q_class,
33            q_type,
34        })
35    }
36}
37
38impl_decode!(QType, q_type);
39
40impl_decode!(QClass, q_class);
41
42impl_decode!(Question, question);