diff --git a/Cargo.lock b/Cargo.lock index 6f5bdb0d..95469ae7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -267,6 +267,21 @@ dependencies = [ "time", ] +[[package]] +name = "clap" +version = "2.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -398,7 +413,7 @@ dependencies = [ "ident_case", "proc-macro2 1.0.18", "quote 1.0.7", - "strsim", + "strsim 0.9.3", "syn 1.0.33", ] @@ -737,6 +752,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hermit-abi" version = "0.1.15" @@ -1269,6 +1293,32 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" +[[package]] +name = "proc-macro-error" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2 1.0.18", + "quote 1.0.7", + "syn 1.0.33", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" +dependencies = [ + "proc-macro2 1.0.18", + "quote 1.0.7", + "syn 1.0.33", + "syn-mid", + "version_check", +] + [[package]] name = "proc-macro-hack" version = "0.5.16" @@ -1794,12 +1844,42 @@ dependencies = [ "syn 1.0.33", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +[[package]] +name = "structopt" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c" +dependencies = [ + "clap", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2 1.0.18", + "quote 1.0.7", + "syn 1.0.33", +] + [[package]] name = "subtle" version = "2.2.3" @@ -1828,6 +1908,17 @@ dependencies = [ "unicode-xid 0.2.1", ] +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +dependencies = [ + "proc-macro2 1.0.18", + "quote 1.0.7", + "syn 1.0.33", +] + [[package]] name = "synstructure" version = "0.12.4" @@ -1873,6 +1964,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "thiserror" version = "1.0.20" @@ -2238,6 +2338,18 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +[[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + [[package]] name = "unicode-xid" version = "0.1.0" @@ -2250,6 +2362,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.2" @@ -2486,6 +2604,14 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "zebra-utils" +version = "0.1.0" +dependencies = [ + "color-eyre", + "structopt", +] + [[package]] name = "zebrad" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 38818d61..e4e4cc5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ members = [ "zebra-rpc", "zebra-client", "zebra-test", + "zebra-utils", "zebrad", ] diff --git a/zebra-utils/Cargo.toml b/zebra-utils/Cargo.toml new file mode 100644 index 00000000..044ef8df --- /dev/null +++ b/zebra-utils/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "zebra-utils" +authors = ["Zcash Foundation "] +license = "MIT OR Apache-2.0" +version = "0.1.0" +edition = "2018" + +[dependencies] +structopt = "0.3.15" +color-eyre = "0.5.0" diff --git a/zebra-utils/src/bin/zebra-checkpoints/args.rs b/zebra-utils/src/bin/zebra-checkpoints/args.rs new file mode 100644 index 00000000..d15c60e1 --- /dev/null +++ b/zebra-utils/src/bin/zebra-checkpoints/args.rs @@ -0,0 +1,12 @@ +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +pub struct Args { + /// Use the test network + #[structopt(short, long)] + pub testnet: bool, + + /// Passthrough args for `zcash-cli` + #[structopt(last = true)] + pub zcli_args: Vec, +} diff --git a/zebra-utils/src/bin/zebra-checkpoints/main.rs b/zebra-utils/src/bin/zebra-checkpoints/main.rs new file mode 100644 index 00000000..cf7573af --- /dev/null +++ b/zebra-utils/src/bin/zebra-checkpoints/main.rs @@ -0,0 +1,33 @@ +#![allow(clippy::try_err)] +use color_eyre::eyre::{eyre, Result}; +use structopt::StructOpt; + +mod args; + +fn main() -> Result<()> { + // todo add tracing setup + + color_eyre::install()?; + + let args = args::Args::from_args(); + + let mut cmd = std::process::Command::new("zcash-cli"); + + if args.testnet { + cmd.arg("-testnet"); + } + + cmd.args(args.zcli_args.into_iter()); + + let mut child = cmd.spawn()?; + + // handle communicating with this child process via it's stdin and stdout handles + + let exit_status = child.wait()?; + + if !exit_status.success() { + Err(eyre!("throw a more informative error here, might wanna shove stdin / stdout in here as custom sections"))?; + } + + Ok(()) +} diff --git a/zebra-utils/src/lib.rs b/zebra-utils/src/lib.rs new file mode 100644 index 00000000..31e1bb20 --- /dev/null +++ b/zebra-utils/src/lib.rs @@ -0,0 +1,7 @@ +#[cfg(test)] +mod tests { + #[test] + fn it_works() { + assert_eq!(2 + 2, 4); + } +}