1use hyper_util::client::legacy::connect::dns::GaiResolver as HyperGaiResolver;
2use tower_service::Service;
3
4use crate::dns::{Addrs, Name, Resolve, Resolving};
5use crate::error::BoxError;
6
7#[derive(Debug)]
9pub struct GaiResolver(HyperGaiResolver);
10
11impl GaiResolver {
12 pub fn new() -> Self {
14 Self(HyperGaiResolver::new())
15 }
16}
17
18impl Default for GaiResolver {
19 fn default() -> Self {
20 GaiResolver::new()
21 }
22}
23
24impl Resolve for GaiResolver {
25 fn resolve(&self, name: Name) -> Resolving {
26 let mut this = self.0.clone();
27 Box::pin(async move {
28 this.call(name.0)
29 .await
30 .map(|addrs| Box::new(addrs) as Addrs)
31 .map_err(|err| Box::new(err) as BoxError)
32 })
33 }
34}