1mod args;
2mod batch;
3mod command;
4mod config;
5mod execute;
6mod input;
7mod run_once;
8mod types;
9
10use anyhow::Context;
11use args::{Cli, CliCommand};
12use clap::Parser;
13use moonlight_core::storage::Storage;
14
15pub async fn run_cli() -> anyhow::Result<()> {
16 let cli = Cli::parse();
17
18 match cli.command {
19 CliCommand::Run(args) => run_once::run(args).await,
20 CliCommand::Batch(args) => batch::batch(args).await,
21 CliCommand::List(args) => {
22 let storage = Storage::load(args.storage_path).await?;
23 println!("{}", serde_json::to_string_pretty(&storage.list().await)?);
24 Ok(())
25 }
26 CliCommand::Stats(args) => {
27 let storage = Storage::load(args.storage_path).await?;
28 println!("{}", serde_json::to_string_pretty(&storage.stats().await)?);
29 Ok(())
30 }
31 CliCommand::Show(args) => {
32 let storage = Storage::load(args.storage.storage_path).await?;
33 let run = storage
34 .get(args.id)
35 .await
36 .with_context(|| format!("comparison run {} was not found", args.id))?;
37 println!("{}", serde_json::to_string_pretty(&run)?);
38 Ok(())
39 }
40 }
41}