mod commands;
mod terminal;
use std::process::ExitCode;
use zond_engine::core::config::ZondConfig;
use zond_engine::error;
use crate::{
commands::{CommandLine, Commands, discover, info, listen, scan},
terminal::{print::Print, spinner},
};
#[tokio::main]
async fn main() -> ExitCode {
let commands = CommandLine::parse_args();
spinner::init_logging(commands.verbosity);
let cfg = ZondConfig::from(&commands);
let _ = Print::init(&cfg);
Print::banner();
let result = match &commands.command {
Commands::Info => info::info(&cfg),
Commands::Listen => listen::listen(&cfg),
Commands::Discover { targets } => discover::discover(targets, &cfg).await,
Commands::Scan { targets } => scan::scan(targets, commands.ports.clone(), &cfg).await,
};
let exit_code = match result {
Ok(_) => ExitCode::SUCCESS,
Err(e) => {
error!("Critical failure: {e}");
ExitCode::FAILURE
}
};
Print::end_of_program();
exit_code
}