barehttp 0.1.0

Blocking HTTP/1.1 client for no_std + alloc
Documentation
//! DNS resolver trait and OS resolver.

mod os;

use crate::error::DnsError;
use crate::util::IpAddr;
use alloc::vec::Vec;

/// Resolve hostnames to IP addresses.
///
/// New methods added to this trait will provide default implementations when
/// possible so existing resolvers keep compiling.
///
/// # Examples
///
/// ```no_run
/// use barehttp::{DnsResolver, OsDnsResolver};
///
/// let ips = OsDnsResolver.resolve("example.com")?;
/// assert!(!ips.is_empty());
/// # Ok::<(), barehttp::DnsError>(())
/// ```
pub trait DnsResolver {
  /// Look up `host`. An empty `Vec` means NXDOMAIN / no records.
  ///
  /// # Errors
  /// [`DnsError::ResolutionFailed`] when the OS resolver itself fails.
  fn resolve(
    &self,
    host: &str,
  ) -> Result<Vec<IpAddr>, DnsError>;
}

/// Operating system DNS resolver (`getaddrinfo`).
#[derive(Debug, Default, Clone, Copy)]
pub struct OsDnsResolver;

impl DnsResolver for OsDnsResolver {
  fn resolve(
    &self,
    host: &str,
  ) -> Result<Vec<IpAddr>, DnsError> {
    os::resolve_host(host)
  }
}