use std::io;
use futures::future::Future;
use domain::base::name::ToDname;
use domain::base::message::Message;
use domain::base::question::Question;
pub trait Resolver {
type Octets: AsRef<[u8]>;
type Answer: AsRef<Message<Self::Octets>>;
type Query: Future<Output = Result<Self::Answer, io::Error>>;
fn query<N, Q>(&self, question: Q) -> Self::Query
where N: ToDname, Q: Into<Question<N>>;
}
pub trait SearchNames {
type Name: ToDname;
type Iter: Iterator<Item = Self::Name>;
fn search_iter(&self) -> Self::Iter;
}