#![forbid(unsafe_code)]
mod cmd;
mod io;
mod keystore;
mod pubrender;
use std::process::ExitCode;
const USAGE: &str = "usage: archon <keygen|key|login|sign|verify|version> [args]";
fn main() -> ExitCode {
let args: Vec<String> = std::env::args().skip(1).collect();
let Some((command, rest)) = args.split_first() else {
eprintln!("{USAGE}");
return ExitCode::from(2);
};
if command == "--help" || command == "-h" {
println!("{USAGE}");
return ExitCode::SUCCESS;
}
if command == "--version" {
println!("{}", cmd::version::version_line());
return ExitCode::SUCCESS;
}
let result = match command.as_str() {
"keygen" => cmd::keygen::run(rest),
"key" => cmd::key::run(rest),
"login" => cmd::login::run(rest),
"sign" => cmd::sign::run(rest),
"verify" => cmd::verify::run(rest),
"version" => cmd::version::run(rest),
other => {
eprintln!("archon: unknown subcommand {other:?}");
eprintln!("{USAGE}");
return ExitCode::from(2);
}
};
match result {
Ok(()) => ExitCode::SUCCESS,
Err(err) => {
eprintln!("archon {command}: {err}");
ExitCode::FAILURE
}
}
}