use core::ops::{Deref, DerefMut};
use crate::op::{Message, Query};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub struct DnsRequestOptions {
#[deprecated]
pub expects_multiple_responses: bool,
pub use_edns: bool,
pub edns_set_dnssec_ok: bool,
pub max_request_depth: usize,
pub recursion_desired: bool,
#[cfg(feature = "std")]
pub case_randomization: bool,
}
impl Default for DnsRequestOptions {
fn default() -> Self {
#[allow(deprecated)]
Self {
max_request_depth: 26,
expects_multiple_responses: false,
use_edns: false,
edns_set_dnssec_ok: false,
recursion_desired: true,
#[cfg(feature = "std")]
case_randomization: false,
}
}
}
#[derive(Clone, PartialEq, Eq)]
pub struct DnsRequest {
message: Message,
options: DnsRequestOptions,
original_query: Option<Query>,
}
impl DnsRequest {
pub fn new(message: Message, options: DnsRequestOptions) -> Self {
Self {
message,
options,
original_query: None,
}
}
pub fn with_original_query(mut self, original_query: Option<Query>) -> Self {
self.original_query = original_query;
self
}
pub fn options(&self) -> &DnsRequestOptions {
&self.options
}
pub fn into_parts(self) -> (Message, DnsRequestOptions) {
(self.message, self.options)
}
pub fn original_query(&self) -> Option<&Query> {
self.original_query.as_ref()
}
}
impl Deref for DnsRequest {
type Target = Message;
fn deref(&self) -> &Self::Target {
&self.message
}
}
impl DerefMut for DnsRequest {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.message
}
}
impl From<Message> for DnsRequest {
fn from(message: Message) -> Self {
Self::new(message, DnsRequestOptions::default())
}
}