https-dns 0.2.0

Minimal and efficient DNS-over-HTTPS (DoH) client
Documentation
use crate::cli::Args;
use crate::local::UdpListener;
use crate::upstream::HttpsClient;
use clap::Parser;
use std::process::ExitCode;
use tracing::error;

mod bootstrap;
mod cache;
mod cli;
mod error;
mod local;
mod upstream;
mod utils;

#[tokio::main]
async fn main() -> ExitCode {
    tracing_subscriber::fmt().with_target(false).init();

    let Args {
        upstream_address,
        local_address,
        local_port,
        upstream_port,
    } = cli::Args::parse();

    let https_client = match HttpsClient::new(upstream_address, upstream_port).await {
        Ok(https_client) => https_client,
        Err(error) => {
            error!("{}", error);
            return ExitCode::FAILURE;
        }
    };

    let udp_listener = match UdpListener::new(local_address, local_port, https_client).await {
        Ok(udp_listener) => udp_listener,
        Err(error) => {
            error!("{}", error);
            return ExitCode::FAILURE;
        }
    };
    udp_listener.listen().await;
    ExitCode::SUCCESS
}