use crate::dns_class::DnsClass;
use crate::{DnsError, DnsName, DnsType};
use fixed_buffer::FixedBuf;
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct DnsQuestion {
pub name: DnsName,
pub typ: DnsType,
pub class: DnsClass,
}
impl DnsQuestion {
pub fn read<const N: usize>(buf: &mut FixedBuf<N>) -> Result<Self, DnsError> {
let name = DnsName::read(buf)?;
let typ = DnsType::read(buf)?;
let class = DnsClass::read(buf)?;
if class != DnsClass::Internet && class != DnsClass::Any {
return Err(DnsError::InvalidClass);
}
Ok(DnsQuestion { name, typ, class })
}
pub fn write<const N: usize>(&self, out: &mut FixedBuf<N>) -> Result<(), DnsError> {
self.name.write(out)?;
self.typ.write(out)?;
self.class.write(out)?;
Ok(())
}
}