use http::Version;
use crate::Result;
use std::{future::Future, net::IpAddr};
#[derive(Default, Debug)]
pub struct Builder {
pub(crate) protos: Vec<Version>,
pub(crate) addrs: Vec<IpAddr>,
}
impl Builder {
pub fn protos(mut self, protos: Vec<Version>) -> Self {
self.protos = protos;
self
}
pub fn addresses(mut self, addrs: Vec<IpAddr>) -> Self {
self.addrs = addrs;
self
}
pub fn build(self) -> DnsResponse {
DnsResponse { protos: self.protos, addrs: self.addrs }
}
}
#[derive(Default, Debug, Clone)]
pub struct DnsResponse {
pub(crate) protos: Vec<Version>,
pub(crate) addrs: Vec<IpAddr>,
}
impl DnsResponse {
pub fn builder() -> Builder {
Builder::default()
}
pub fn protos(&self) -> &Vec<Version> {
&self.protos
}
pub fn addresses(&self) -> &Vec<IpAddr> {
&self.addrs
}
}
pub trait DnsResolver: Send + 'static {
fn resolve(&self, host: String, port: u16) -> impl Future<Output = Result<DnsResponse>>;
}