From 3c67fcb5bcd54be6125114169b3b4fad034315da Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 2 Jul 2022 18:37:22 +0800 Subject: [PATCH] feat: update clap --- Cargo.lock | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 5 +++-- src/main.rs | 42 +++++++++++++++++++++++++++++++++-- 3 files changed, 107 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4805be6..6de542a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,26 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -66,6 +86,21 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "cpufeatures" version = "0.2.2" @@ -388,6 +423,7 @@ checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" name = "local-mini-kms" version = "0.1.0" dependencies = [ + "clap", "hex", "rust_util", "serde", @@ -652,6 +688,7 @@ version = "0.6.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df24005feacce81f4ae340464b39c380f7e01e7225bfdef62d40cb44cb1c11d7" dependencies = [ + "clap", "lazy_static", "libc", "term", @@ -786,6 +823,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "syn" version = "1.0.98" @@ -832,6 +875,15 @@ dependencies = [ "winapi", ] +[[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.31" @@ -1047,6 +1099,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + [[package]] name = "url" version = "2.2.2" @@ -1065,6 +1123,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[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.4" diff --git a/Cargo.toml b/Cargo.toml index 8f7c784..ee96e1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,10 +6,11 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +clap = "2.33" hex = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -rust_util = "0.6" +rust_util = { version = "0.6", features = ["use_clap"] } tokio = { version = "1.19", features = ["full"] } serde_derive = "1.0" -warp = "0.3" \ No newline at end of file +warp = "0.3" diff --git a/src/main.rs b/src/main.rs index e7a11a9..2bc38ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,41 @@ -fn main() { - println!("Hello, world!"); +use clap::{App, AppSettings, ArgMatches}; +use rust_util::{failure_and_exit, information}; +use rust_util::util_clap::{Command, CommandError}; + +pub struct DefaultCommandImpl; + +impl DefaultCommandImpl { + pub fn process_command<'a>(app: App<'a, 'a>) -> App<'a, 'a> { + app + } + pub fn run(_arg_matches: &ArgMatches) -> CommandError { + information!("Local mini KMS cli, use --help for help"); + Ok(None) + } } + +fn main() { + if let Err(e) = inner_main() { + failure_and_exit!("Run local-mini-kms error: {}", e); + } +} + +fn inner_main() -> CommandError { + let commands: Vec> = vec![]; + let mut app = App::new(env!("CARGO_PKG_NAME")) + .version(env!("CARGO_PKG_VERSION")) + .about(env!("CARGO_PKG_DESCRIPTION")) + .long_about("Local mini KMS") + .setting(AppSettings::ColoredHelp); + app = DefaultCommandImpl::process_command(app); + for command in &commands { + app = app.subcommand(command.subcommand()); + } + let matches = app.get_matches(); + for command in &commands { + if let Some(sub_cmd_matches) = matches.subcommand_matches(command.name()) { + return command.run(&matches, sub_cmd_matches); + } + } + DefaultCommandImpl::run(&matches) +} \ No newline at end of file