use aev_audio::{ping, watch, WatchConfig, PLUGIN_INIT_JSON};
use std::env;
use std::path::PathBuf;
use std::process::ExitCode;
fn main() -> ExitCode {
match run() {
Ok(()) => ExitCode::SUCCESS,
Err(error) => {
eprintln!("aev-audio: {error}");
ExitCode::FAILURE
}
}
}
fn run() -> Result<(), String> {
let mut args = env::args().skip(1);
let command = args.next().unwrap_or_else(|| "watch".to_string());
match command.as_str() {
"ping" => ping().map_err(|error| error.to_string()),
"manifest" => {
println!("{PLUGIN_INIT_JSON}");
Ok(())
}
"watch" => {
let mut workspace = env::current_dir().map_err(|error| error.to_string())?;
let mut from_start = false;
let mut once = false;
while let Some(argument) = args.next() {
match argument.as_str() {
"--workspace" | "-w" => {
workspace = PathBuf::from(
args.next()
.ok_or_else(|| "--workspace requires a path".to_string())?,
);
}
"--from-start" => from_start = true,
"--once" => once = true,
"--help" | "-h" => {
print_help();
return Ok(());
}
unknown => return Err(format!("unknown watch option `{unknown}`")),
}
}
watch(&WatchConfig {
workspace,
from_start,
once,
})
.map_err(|error| error.to_string())
}
"help" | "--help" | "-h" => {
print_help();
Ok(())
}
unknown => Err(format!("unknown command `{unknown}`; use `aev-audio help`")),
}
}
fn print_help() {
println!(
"aev-audio - minimal Aev completion ping\n\nUSAGE:\n aev-audio ping\n aev-audio watch [--workspace PATH] [--from-start] [--once]\n aev-audio manifest\n\n`watch` tails PATH/.aev/journal.jsonl and rings on new assistant_completed events."
);
}