polyresolver 0.1.1

DNS resolver for client-side split horizon resolution over multiple domain arenas
Documentation
use std::{net::IpAddr, path::PathBuf, str::FromStr, time::Duration};

use anyhow::anyhow;
use tracing_log::log_tracer;
use tracing_subscriber::FmtSubscriber;

use polyresolver::listener::listen;

#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
    let mut args = std::env::args().skip(1);
    let config_dir = if let Some(arg) = args.next() {
        PathBuf::from_str(&arg)?
    } else {
        return Err(anyhow!(
            "You must provide us with a configuration directory"
        ));
    };

    let ip = if let Some(arg) = args.next() {
        Some(IpAddr::from_str(&arg)?)
    } else {
        None
    };

    log_tracer::Builder::new().init()?;

    let subscriber = FmtSubscriber::builder()
        .with_max_level(tracing::Level::TRACE)
        .finish();

    tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed");

    listen(ip, config_dir, Duration::new(1, 0), None, None).await
}