dns_message_parser/decode/
question.rs1use 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);