add cli utility (#41)

* add util

* add cli util
This commit is contained in:
Aiden McClelland
2022-09-02 13:01:26 -06:00
committed by GitHub
parent f4732b18a2
commit 3e0a0204bc
3 changed files with 59 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ members = [
"patch-db",
"patch-db-macro",
"patch-db-macro-internals",
"patch-db-util",
"cbor",
"json-patch",
"json-ptr",

12
patch-db-util/Cargo.toml Normal file
View File

@@ -0,0 +1,12 @@
[package]
name = "patch-db-util"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
clap = "3.2.16"
patch-db = { path = "../patch-db" }
serde_json = "1.0.85"
tokio = { version = "1.20.1", features = ["full"] }

46
patch-db-util/src/main.rs Normal file
View File

@@ -0,0 +1,46 @@
use std::path::Path;
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,
None,
)
.await
.unwrap();
}
_ => app.print_long_help().unwrap(),
}
}