From ef234f0ec09fee5a494bb628cc89b62da954aa8e Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Tue, 28 Nov 2023 12:20:49 +0900 Subject: [PATCH] Replace dependency structopt with clap --- Cargo.lock | 167 ++++++++++++++++++++++++++++++----------------- Cargo.toml | 2 +- README.md | 49 ++++++++------ src/debug_log.rs | 16 ++--- src/main.rs | 36 +++++----- 5 files changed, 163 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 44cb503..d33a857 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -117,6 +117,54 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "approx" version = "0.5.1" @@ -189,7 +237,7 @@ dependencies = [ "cexpr", "cfg-if 0.1.10", "clang-sys", - "clap", + "clap 2.34.0", "env_logger", "lazy_static", "lazycell", @@ -432,12 +480,52 @@ dependencies = [ "ansi_term", "atty", "bitflags 1.3.2", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", ] +[[package]] +name = "clap" +version = "4.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46ca43acc1b21c6cc2d1d3129c19e323a613935b5bc28fb3b33b5b2e5fb00030" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.10.0", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.22", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + [[package]] name = "claxon" version = "0.4.3" @@ -469,6 +557,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "com-rs" version = "0.2.1" @@ -1125,12 +1219,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -1579,10 +1670,10 @@ name = "mpd_info_screen" version = "0.4.7" dependencies = [ "bindgen", + "clap 4.4.9", "freetype", "ggez", "image", - "structopt", "wgpu", ] @@ -1991,30 +2082,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.107", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.63" @@ -2399,28 +2466,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] -name = "structopt" -version = "0.3.26" +name = "strsim" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.107", -] +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "symphonia" @@ -2670,12 +2719,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - [[package]] name = "unicode-width" version = "0.1.10" @@ -2688,6 +2731,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "1.2.2" diff --git a/Cargo.toml b/Cargo.toml index 794d408..8ffbf99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ resolver = "2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -structopt = "0.3" +clap = { version = "4.4", features = ["derive"] } image = "0.24" ggez = "0.9.3" freetype = { version = "0.7", optional = true } diff --git a/README.md b/README.md index 4dfed71..59c9a3c 100644 --- a/README.md +++ b/README.md @@ -35,28 +35,39 @@ or through crates.io: # Usage - USAGE: - mpd_info_screen [FLAGS] [OPTIONS] [port] + Displays info on currently playing music from an MPD daemon - FLAGS: - --disable-show-album disable album display - --disable-show-artist disable artist display - --disable-show-filename disable filename display - --disable-show-title disable title display - --no-scale-fill don't scale-fill the album art to the window - --pprompt input password via prompt - -h, --help Prints help information - -V, --version Prints version information + Usage: mpd_info_screen [OPTIONS] [PORT] - OPTIONS: - -l, --log-level [default: Error] [possible values: Error, Warning, Debug, Verbose] - -p - --pfile read password from file - -t, --text-bg-opacity sets the opacity of the text background (0-255) [default: 190] + Arguments: + + [PORT] [default: 6600] - ARGS: - - [default: 6600] + Options: + -p + + --disable-show-title + disable title display + --disable-show-artist + disable artist display + --disable-show-album + disable album display + --disable-show-filename + disable filename display + --pprompt + input password via prompt + --pfile + read password from file + --no-scale-fill + don't scale-fill the album art to the window + -l, --log-level + [default: error] [possible values: error, warning, debug, verbose] + -t, --text-bg-opacity + sets the opacity of the text background (0-255) [default: 190] + -h, --help + Print help + -V, --version + Print version Note that presing the Escape key when the window is focused closes the program. diff --git a/src/debug_log.rs b/src/debug_log.rs index 1b151c2..98c8c18 100644 --- a/src/debug_log.rs +++ b/src/debug_log.rs @@ -1,5 +1,5 @@ use std::fmt::Display; -use structopt::clap::arg_enum; +use clap::ValueEnum; #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum LogState { @@ -9,14 +9,12 @@ pub enum LogState { Verbose, } -arg_enum! { - #[derive(Copy, Clone, Debug, PartialEq, Eq)] - pub enum LogLevel { - Error, - Warning, - Debug, - Verbose, - } +#[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)] +pub enum LogLevel { + Error, + Warning, + Debug, + Verbose, } pub fn log(msg: T, state: LogState, level: LogLevel) diff --git a/src/main.rs b/src/main.rs index 2f697f4..ec4ed85 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,44 +15,42 @@ use std::net::Ipv4Addr; use std::path::PathBuf; use std::thread; use std::time::{Duration, Instant}; -use structopt::StructOpt; +use clap::Parser; use debug_log::log; -#[derive(StructOpt, Debug, Clone)] -#[structopt(name = "mpd_info_screen")] +#[derive(Parser, Debug, Clone)] +#[command(author, version, about, long_about = None)] pub struct Opt { host: Ipv4Addr, - #[structopt(default_value = "6600")] + #[arg(default_value = "6600")] port: u16, - #[structopt(short = "p")] + #[arg(short = 'p')] password: Option, - #[structopt(long = "disable-show-title", help = "disable title display")] + #[arg(long = "disable-show-title", help = "disable title display")] disable_show_title: bool, - #[structopt(long = "disable-show-artist", help = "disable artist display")] + #[arg(long = "disable-show-artist", help = "disable artist display")] disable_show_artist: bool, - #[structopt(long = "disable-show-album", help = "disable album display")] + #[arg(long = "disable-show-album", help = "disable album display")] disable_show_album: bool, - #[structopt(long = "disable-show-filename", help = "disable filename display")] + #[arg(long = "disable-show-filename", help = "disable filename display")] disable_show_filename: bool, - #[structopt(long = "pprompt", help = "input password via prompt")] + #[arg(long = "pprompt", help = "input password via prompt")] enable_prompt_password: bool, - #[structopt(long = "pfile", help = "read password from file")] + #[arg(long = "pfile", help = "read password from file")] password_file: Option, - #[structopt( + #[arg( long = "no-scale-fill", help = "don't scale-fill the album art to the window" )] do_not_fill_scale_album_art: bool, - #[structopt( - short = "l", + #[arg( + short = 'l', long = "log-level", - possible_values = &debug_log::LogLevel::variants(), - default_value = "Error", - case_insensitive = true, + default_value = "error", )] log_level: debug_log::LogLevel, - #[structopt( + #[arg( short, long, help = "sets the opacity of the text background (0-255)", @@ -62,7 +60,7 @@ pub struct Opt { } fn main() -> Result<(), String> { - let mut opt = Opt::from_args(); + let mut opt = Opt::parse(); println!("Got host addr == {}, port == {}", opt.host, opt.port); // Read password from file if exists, error otherwise.