Skip to content

refactor(client): allow ?Sized trait objects in dns_resolver - #870

Merged
0x676e67 merged 2 commits into
mainfrom
ref
Aug 6, 2025
Merged

refactor(client): allow ?Sized trait objects in dns_resolver#870
0x676e67 merged 2 commits into
mainfrom
ref

Conversation

@0x676e67

@0x676e67 0x676e67 commented Aug 5, 2025

Copy link
Copy Markdown
Owner

This allows ?Sized type

use std::{
    future::ready,
    net::{IpAddr, Ipv4Addr, SocketAddr},
    sync::{Arc, Mutex},
};

use wreq::{
    ClientBuilder,
    dns::{Name, Resolve, Resolving},
};

#[derive(Clone, Debug)]
pub struct TestDnsResolver {
    port: u16,
}

impl TestDnsResolver {
    pub fn new(port: u16) -> Self {
        Self { port }
    }
}

impl Resolve for TestDnsResolver {
    fn resolve(&self, _name: Name) -> Resolving {
        let addr_list =
            Box::new([SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), self.port)].into_iter());
        Box::pin(ready(Ok(addr_list as _)))
    }
}

static DNS_OVERRIDE: Mutex<Option<Arc<dyn Resolve>>> = Mutex::new(None);

fn main() -> Result<(), Box<dyn std::error::Error>> {
    *DNS_OVERRIDE.lock().unwrap() = Some(Arc::new(TestDnsResolver::new(16384)));

    let mut client_builder = ClientBuilder::new();

    if let Some(ref resolver) = *DNS_OVERRIDE.lock().unwrap() {
        client_builder = client_builder.dns_resolver(resolver.clone());
        client_builder = client_builder.dns_resolver(Arc::new(TestDnsResolver::new(16384)));
    }

    let _client = client_builder.build();

    Ok(())
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR refactors the dns_resolver method in the HTTP client builder to improve its ergonomics by accepting any type that can be converted into Arc<dyn Resolve + 'static> rather than requiring the caller to pre-wrap the resolver in an Arc.

  • Simplified the method signature to accept generic types implementing Into<Arc<dyn Resolve + 'static>>
  • Replaced explicit type casting with .into() for cleaner conversion

Comment thread src/client/http/mod.rs Outdated
@0x676e67 0x676e67 changed the title refactor(client): improve dns_resolver method ergonomics refactor(client): allow ?Sized trait objects in dns_resolver Aug 6, 2025
@0x676e67 0x676e67 changed the title refactor(client): allow ?Sized trait objects in dns_resolver refactor(client): allow ?Sized trait objects in dns_resolver Aug 6, 2025
@0x676e67
0x676e67 marked this pull request as ready for review August 6, 2025 01:08
@0x676e67
0x676e67 merged commit 2baf195 into main Aug 6, 2025
7 checks passed
@0x676e67
0x676e67 deleted the ref branch August 6, 2025 04:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants