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::::call(this, name).map(|result| { result .map(|addrs| -> Addrs { Box::new(addrs) }) .map_err(|err| -> BoxError { Box::new(err) }) })) } }