use clap::Parser; mod config; mod error; mod management; mod chunker; mod hasher; mod compression; mod encryption; mod pack_writer; mod pack_reader; mod global_index; mod repository; mod snapshot; mod lock; mod ingest; mod restore; mod verify; mod prune; mod repair; #[derive(Parser, Debug)] #[command(name = "containerarchive", about = "Content-addressed incremental backup engine")] struct Cli { /// Run in management mode (JSON IPC over stdin/stdout) #[arg(long)] management: bool, } #[tokio::main] async fn main() -> anyhow::Result<()> { // Initialize logging to stderr (stdout is reserved for IPC) tracing_subscriber::fmt() .with_writer(std::io::stderr) .with_env_filter( tracing_subscriber::EnvFilter::from_default_env() .add_directive(tracing::Level::INFO.into()), ) .init(); let cli = Cli::parse(); if cli.management { management::management_loop().await?; } else { eprintln!("containerarchive: use --management for IPC mode"); std::process::exit(1); } Ok(()) }