use futures_util::future::FutureExt;
use hyper::client::connect::dns::{GaiResolver as HyperGaiResolver, Name};
use hyper::service::Service;
use crate::dns::{Addrs, Resolve, Resolving};
use crate::error::BoxError;
#[derive(Debug)]
pub struct GaiResolver(HyperGaiResolver);
impl GaiResolver {
pub fn new() -> Self {
Self(HyperGaiResolver::new())
}
}
impl Default for GaiResolver {
fn default() -> Self {
GaiResolver::new()
}
}
impl Resolve for GaiResolver {
fn resolve(&self, name: Name) -> Resolving {
let this = &mut self.0.clone();
Box::pin(Service::<Name>::call(this, name).map(|result| {
result
.map(|addrs| -> Addrs { Box::new(addrs) })
.map_err(|err| -> BoxError { Box::new(err) })
}))
}
}