Skip to main content

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/// DNS resolver backed by the OS `getaddrinfo` (system resolver).
8#[derive(Debug)]
9pub struct GaiResolver(HyperGaiResolver);
10
11impl GaiResolver {
12    /// Create a new system resolver.
13    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}