use futures_util::stream::Stream;
use tracing::debug;
use crate::{
error::NetError,
proto::op::{DnsRequest, DnsRequestOptions, DnsResponse, Query, SerialMessage},
runtime::RuntimeProvider,
};
pub trait DnsStreamHandle: 'static + Send {
fn send(&mut self, buffer: SerialMessage) -> Result<(), NetError>;
}
pub trait DnsHandle: 'static + Clone + Send + Sync + Unpin {
type Response: Stream<Item = Result<DnsResponse, NetError>> + Send + Unpin + 'static;
type Runtime: RuntimeProvider;
fn is_verifying_dnssec(&self) -> bool {
false
}
fn is_using_edns(&self) -> bool {
true
}
fn send(&self, request: DnsRequest) -> Self::Response;
fn lookup(&self, query: Query, options: DnsRequestOptions) -> Self::Response {
debug!("querying: {} {:?}", query.name(), query.query_type());
self.send(DnsRequest::from_query(query, options))
}
}