#![deny(unsafe_code)]
pub mod backup;
pub mod cli;
pub mod cmd;
pub mod config;
pub mod diff;
pub mod exit;
pub(crate) mod files;
pub mod ops;
pub mod plan;
pub mod selector;
pub mod write;
pub(crate) use files::*;
use clap::Parser;
use cli::Cli;
pub fn run() -> anyhow::Result<u8> {
let cli = Cli::parse();
let structured = cli.global.json || cli.global.jsonl;
let compact = cli.global.jsonl;
match cmd::dispatch(cli) {
Ok(code) => Ok(code),
Err(e) if structured => {
let output = serde_json::json!({
"ok": false,
"error": format!("{e:#}")
});
let serialized = if compact {
serde_json::to_string(&output)
} else {
serde_json::to_string_pretty(&output)
};
println!("{}", serialized.unwrap_or_default());
Ok(exit::FAILURE)
}
Err(e) => Err(e),
}
}