use clap::{Parser, Subcommand};
use url::Url;
use crate::tools::push::PushArgs;
use crate::tools::replay::ReplayArgs;
use crate::tools::tail::TailArgs;
use crate::tools::types;
#[derive(Debug, Parser)]
#[command(
name = "domi",
version,
about = "DOMicile agent CLI — tail, replay, and push audit events",
long_about = None,
)]
pub struct Cli {
#[arg(long, global = true, default_value = types::DEFAULT_SERVER)]
pub server: String,
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Tail(TailArgs),
Replay(ReplayArgs),
Push(PushArgs),
}
pub async fn run() -> i32 {
let cli = Cli::parse();
let server: Url = match types::parse_server(&cli.server) {
Ok(u) => u,
Err(e) => {
eprintln!("invalid --server: {e}");
return 2;
}
};
match cli.command {
Command::Tail(args) => crate::tools::tail::run(args, &server).await,
Command::Replay(args) => crate::tools::replay::run(args, &server).await,
Command::Push(args) => crate::tools::push::run(args, &server).await,
}
}