#![recursion_limit = "128"]
extern crate env_logger;
extern crate futures;
extern crate tokio;
extern crate trust_dns_resolver;
use futures::Future;
use tokio::runtime::Runtime;
use trust_dns_resolver::AsyncResolver;
fn main() {
env_logger::init();
let mut runtime = Runtime::new().expect("Failed to create runtime");
let (resolver, bg) = {
#[cfg(any(unix, windows))]
{
AsyncResolver::from_system_conf().expect("Failed to create AsyncResolver")
}
#[cfg(not(any(unix, windows)))]
{
use trust_dns_resolver::config::{ResolverConfig, ResolverOpts};
AsyncResolver::new(ResolverConfig::google(), ResolverOpts::default())
}
};
runtime.spawn(bg);
let names = &["www.google.com", "www.reddit.com", "www.wikipedia.org"];
let mut futures = names
.iter()
.map(|name| (name, resolver.lookup_ip(*name)))
.collect::<Vec<_>>();
for (name, lookup) in futures.drain(..) {
let ips = runtime.block_on(lookup)
.expect("Failed completing lookup future")
.iter()
.collect::<Vec<_>>();
println!("{} resolved to {:?}", name, ips);
}
drop(resolver);
let shutdown = runtime.shutdown_on_idle();
shutdown.wait().expect("Failed when shutting down runtime");
}