pub mod domain;
mod raw;
pub use raw::whois_raw;
pub use whos_data::SUFFIX_SERVER_LIST;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("no whois server available")]
NoServer,
#[error("unknown domain suffix")]
UnknownSuffix,
#[error("io error")]
Io(#[from] std::io::Error),
}
pub fn domain(name: &str) -> Result<Option<domain::Domain>, Error> {
for (suffix, maybe_server) in SUFFIX_SERVER_LIST.entries() {
if name.ends_with(suffix) {
return if let Some(server) = maybe_server {
let raw = whois_raw(name, (server, 43))?;
Ok(domain::parse(&raw))
} else {
Err(Error::NoServer)
};
}
}
Err(Error::UnknownSuffix)
}