use std::process::ExitCode;
use std::time::Duration;
use clap::Parser;
use digit::protocol::finger;
use digit::query::{Query, DEFAULT_PORT};
#[derive(Parser, Debug)]
#[command(version, about)]
struct Cli {
query: Option<String>,
#[arg(short, long)]
long: bool,
#[arg(short, long, default_value_t = DEFAULT_PORT)]
port: u16,
#[arg(short, long, default_value_t = 10)]
timeout: u64,
}
fn main() -> ExitCode {
let cli = Cli::parse();
let query = match Query::parse(cli.query.as_deref(), cli.long, cli.port) {
Ok(q) => q,
Err(e) => {
eprintln!("digit: {}", e);
return ExitCode::FAILURE;
}
};
let timeout = Duration::from_secs(cli.timeout);
match finger(&query, timeout) {
Ok(response) => {
print!("{}", response);
ExitCode::SUCCESS
}
Err(e) => {
eprintln!("digit: {}", e);
ExitCode::FAILURE
}
}
}