use crate::common::allocator::Allocator;
use crate::common::error::Error;
use crate::io::event_loop::EventLoopGroup;
use crate::io::io_library_init;
use crate::CrtError as _;
use mountpoint_s3_crt_sys::*;
use std::ptr::NonNull;
#[derive(Debug)]
pub struct HostResolverDefaultOptions<'a> {
pub max_entries: usize,
pub event_loop_group: &'a mut EventLoopGroup,
}
#[derive(Debug)]
pub struct HostResolver {
pub(crate) inner: NonNull<aws_host_resolver>,
}
impl HostResolver {
pub fn new_default(allocator: &Allocator, options: &HostResolverDefaultOptions) -> Result<Self, Error> {
io_library_init(allocator);
let inner_options = aws_host_resolver_default_options {
el_group: options.event_loop_group.inner.as_ptr(),
max_entries: options.max_entries,
..Default::default()
};
let inner =
unsafe { aws_host_resolver_new_default(allocator.inner.as_ptr(), &inner_options).ok_or_last_error()? };
Ok(Self { inner })
}
}
impl Clone for HostResolver {
fn clone(&self) -> Self {
let inner = unsafe { NonNull::new_unchecked(aws_host_resolver_acquire(self.inner.as_ptr())) };
Self { inner }
}
}
impl Drop for HostResolver {
fn drop(&mut self) {
unsafe {
aws_host_resolver_release(self.inner.as_ptr());
}
}
}