#![forbid(unsafe_code)]
#![deny(missing_docs)]
#![deny(rustdoc::broken_intra_doc_links)]
use std::path::PathBuf;
use clap::{Parser, Subcommand, ValueEnum};
mod backup;
mod check;
mod dump;
mod stat;
#[derive(Debug, Parser)]
#[command(
name = "obj",
about = "Command-line tools for `obj` — embedded document database.",
version,
propagate_version = true
)]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Debug, Subcommand)]
enum Command {
Check {
path: PathBuf,
},
Stat {
path: PathBuf,
},
Dump {
path: PathBuf,
#[arg(long)]
collection: String,
#[arg(long, default_value_t = 20)]
limit: usize,
#[arg(long, value_enum, default_value_t = DumpFormat::Header)]
format: DumpFormat,
},
Backup {
src: PathBuf,
dest: PathBuf,
},
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub(crate) enum DumpFormat {
Header,
Hex,
}
#[must_use]
pub fn run() -> i32 {
let cli = match Cli::try_parse() {
Ok(c) => c,
Err(err) => {
let _ = err.print();
return 3;
}
};
match cli.command {
Command::Check { path } => check::run(&path),
Command::Stat { path } => stat::run(&path),
Command::Dump {
path,
collection,
limit,
format,
} => dump::run(&path, &collection, limit, format),
Command::Backup { src, dest } => backup::run(&src, &dest),
}
}