feat(cli): add command line interface with logging

- integrate clap for parsing command line arguments
- add verbosity flag for logging level control
- implement basic "list" subcommand structure
This commit is contained in:
Jeremiah Russell
2025-09-30 11:04:14 +01:00
committed by Jeremiah Russell
parent 7cb7fe15ab
commit 334af3ba7f

View File

@@ -1,3 +1,58 @@
fn main() {
println!("hello world");
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Cli {
#[clap(flatten)]
logging: clap_verbosity_flag::Verbosity,
#[command(subcommand)]
command: Option<Commands>,
}
#[derive(Subcommand, Debug)]
enum Commands {
/// List messages
#[clap(name = "list")]
List,
}
fn main() {
let args = Cli::parse();
let mut logging = get_logging(args.logging.log_level_filter());
logging.init();
run(args);
// match run(args) {
// Ok(_) => {}
// Err(e) => {
// if let Some(src) = e.source() {
// log::error!("{e}: {src}");
// eprintln!("{e}: {src}");
// } else {
// log::error!("{e}");
// eprintln!("{e}");
// }
// std::process::exit(101);
// }
// }
}
fn run(args: Cli) {
if let Some(cmds) = args.command {
match cmds {
Commands::List => todo!(),
}
}
// Ok(())
}
fn get_logging(level: log::LevelFilter) -> env_logger::Builder {
let mut builder = env_logger::Builder::new();
builder.filter(None, level);
builder.format_timestamp_secs().format_module_path(false);
builder
}