# c-ares-resolver
DNS resolvers built on [`c-ares`](https://github.com/dimbleby/rust-c-ares/), for
asynchronous DNS requests.
This crate provides three resolver types - the `Resolver`, the `FutureResolver`,
and the `BlockingResolver`:
- The `Resolver` is the thinnest wrapper around the underlying `c-ares` library.
It returns answers via callbacks. The other resolvers are built on top of
this.
- The `FutureResolver` returns answers as `std::future::Future`s.
- The `BlockingResolver` isn't asynchronous at all - as the name suggests, it
blocks until the lookup completes.
[![Crates.io][crates-badge]][crates-url]
[![Build Status][actions-badge]][actions-url]
[crates-badge]: https://img.shields.io/crates/v/c-ares-resolver.svg
[crates-url]: https://crates.io/crates/c-ares-resolver
[actions-badge]: https://github.com/dimbleby/c-ares-resolver/actions/workflows/build.yml/badge.svg
[actions-url]: https://github.com/dimbleby/c-ares-resolver/actions?query=workflow%3ACI+branch%3Amain
## Documentation
API documentation is [here](https://docs.rs/c-ares-resolver).
Setting the feature `build-cmake` will cause the `c-ares` library to be built
using `cmake`.
This is significantly faster than the default `autotools` build on unix
platforms: so if it works for you, you should probably prefer it.
## Examples
```rust
extern crate c_ares_resolver;
extern crate futures_executor;
use futures_executor::block_on;
fn main() {
let resolver = c_ares_resolver::FutureResolver::new().unwrap();
let query = resolver.query_a("google.com");
let response = block_on(query);
match response {
Ok(result) => println!("{}", result),
Err(e) => println!("Lookup failed with error '{}'", e)
}
}
```
Further example programs can be found
[here](https://github.com/dimbleby/c-ares-resolver/tree/main/examples).
## Contributing
Contributions are welcome. Please send pull requests!