reqwest/dns/
gai.rs

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)]
8pub struct GaiResolver(HyperGaiResolver);
9
10impl GaiResolver {
11    pub fn new() -> Self {
12        Self(HyperGaiResolver::new())
13    }
14}
15
16impl Default for GaiResolver {
17    fn default() -> Self {
18        GaiResolver::new()
19    }
20}
21
22impl Resolve for GaiResolver {
23    fn resolve(&self, name: Name) -> Resolving {
24        let mut this = self.0.clone();
25        Box::pin(async move {
26            this.call(name.0)
27                .await
28                .map(|addrs| Box::new(addrs) as Addrs)
29                .map_err(|err| Box::new(err) as BoxError)
30        })
31    }
32}