Skip to main content

moonlight_cli/
lib.rs

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}