Files
patch-db/patch-db-util/src/main.rs
2023-10-16 15:54:53 -06:00

44 lines
1.4 KiB
Rust

use patch_db::json_ptr::{JsonPointer, PtrSegment};
use serde_json::Value;
#[tokio::main]
async fn main() {
let mut app = clap::App::new("patch-db-util")
.subcommand(
clap::Command::new("dump").arg(
clap::Arg::new("PATH")
.required(true)
.help("Path to the database file"),
),
)
.subcommand(
clap::Command::new("from-dump").arg(
clap::Arg::new("PATH")
.required(true)
.help("Path to the database file"),
),
);
match app.clone().get_matches().subcommand() {
Some(("dump", matches)) => {
let path = matches.value_of("PATH").unwrap();
let db = patch_db::PatchDb::open(path).await.unwrap();
let dump = db.dump().await;
serde_json::to_writer_pretty(&mut std::io::stdout(), &dump.value).unwrap();
println!();
}
Some(("from-dump", matches)) => {
let path = matches.value_of("PATH").unwrap();
let value: Value = serde_json::from_reader(&mut std::io::stdin()).unwrap();
let db = patch_db::PatchDb::open(path).await.unwrap();
db.put(
&JsonPointer::<&str, (&[PtrSegment], &[PtrSegment])>::default(),
&value,
)
.await
.unwrap();
}
_ => app.print_long_help().unwrap(),
}
}