From 4be1e82ba9419b7a73c783367b625b8b7327e2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=A4rtens?= Date: Thu, 4 May 2023 22:56:40 +0200 Subject: [PATCH 1/2] update further dependencies --- Cargo.lock | 174 ++++++++++++++--------- client/Cargo.toml | 6 +- client/i18n/Cargo.toml | 2 +- client/i18n/src/bin/i18n-check.rs | 7 +- client/src/bin/bot/tui.rs | 23 +-- network/Cargo.toml | 8 +- network/examples/chat.rs | 21 ++- network/examples/fileshare/main.rs | 31 ++-- network/examples/network-speed/main.rs | 22 ++- network/protocol/Cargo.toml | 2 +- plugin/derive/Cargo.toml | 2 +- server-cli/Cargo.toml | 6 +- server-cli/src/cli.rs | 46 +++--- server/Cargo.toml | 6 +- voxygen/Cargo.toml | 4 +- world/Cargo.toml | 5 +- world/examples/world_block_statistics.rs | 19 ++- 17 files changed, 212 insertions(+), 172 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 581b35d062..d718f030d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -130,6 +130,55 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "anstream" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" + +[[package]] +name = "anstyle-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +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 = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "anyhow" version = "1.0.71" @@ -296,12 +345,13 @@ checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31" [[package]] name = "atomicwrites" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8f2cd6962fa53c0e2a9d3f97eaa7dbd1e3cbbeeb4745403515b42ae07b3ff6" +checksum = "c1163d9d7c51de51a2b79d6df5e8888d11e9df17c752ce4a285fb6ca1580734e" dependencies = [ + "rustix", "tempfile", - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] @@ -583,9 +633,9 @@ dependencies = [ [[package]] name = "censor" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5563d2728feef9a6186acdd148bccbe850dad63c5ba55a3b3355abc9137cb3eb" +checksum = "d41e3b9fdbb9b3edc10dc66a06dc255822f699c432e19403fb966e6d60e0dec4" dependencies = [ "once_cell", ] @@ -693,49 +743,52 @@ dependencies = [ "atty", "bitflags 1.3.2", "strsim 0.8.0", - "textwrap 0.11.0", + "textwrap", "unicode-width", "vec_map", ] [[package]] name = "clap" -version = "3.2.25" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" dependencies = [ - "atty", - "bitflags 1.3.2", + "clap_builder", "clap_derive", - "clap_lex", - "indexmap", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +dependencies = [ + "anstream", + "anstyle", + "bitflags 1.3.2", + "clap_lex", "strsim 0.10.0", - "termcolor", - "textwrap 0.16.0", ] [[package]] name = "clap_derive" -version = "3.2.25" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck 0.4.1", - "proc-macro-error", "proc-macro2 1.0.56", "quote 1.0.26", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "clipboard-win" @@ -853,6 +906,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 = "combine" version = "4.6.6" @@ -1343,9 +1402,9 @@ dependencies = [ [[package]] name = "crossterm" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" dependencies = [ "bitflags 1.3.2", "crossterm_winapi 0.9.0", @@ -3099,6 +3158,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -3570,9 +3641,9 @@ dependencies = [ [[package]] name = "minifb" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e21c5f89bb820c7878c300c5b944e65de0f1b2a75e0be92ce670b95943740e" +checksum = "c66a1fdd7e946fe33fe9725012e25836bba3655769bee9ee347cce7de3f396df" dependencies = [ "cc", "dlib 0.5.0", @@ -3920,18 +3991,6 @@ dependencies = [ "memoffset 0.6.5", ] -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if 1.0.0", - "libc", -] - [[package]] name = "nix" version = "0.26.2" @@ -4322,12 +4381,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_str_bytes" -version = "6.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" - [[package]] name = "overload" version = "0.1.1" @@ -5503,9 +5556,9 @@ checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rustyline" -version = "10.1.1" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e83c32c3f3c33b08496e0d1df9ea8c64d39adb8eb36a1ebb1440c690697aef" +checksum = "5dfc8644681285d1fb67a467fb3021bfea306b99b4146b166a1fe3ada965eece" dependencies = [ "bitflags 1.3.2", "cfg-if 1.0.0", @@ -5515,7 +5568,7 @@ dependencies = [ "libc", "log", "memchr", - "nix 0.25.1", + "nix 0.26.2", "radix_trie", "scopeguard", "unicode-segmentation", @@ -6341,12 +6394,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.40" @@ -6913,7 +6960,7 @@ dependencies = [ "async-channel", "authc", "byteorder", - "clap 3.2.25", + "clap 4.2.7", "hashbrown 0.13.2", "image", "num 0.4.0", @@ -6944,7 +6991,7 @@ dependencies = [ name = "veloren-client-i18n" version = "0.13.0" dependencies = [ - "clap 3.2.25", + "clap 4.2.7", "deunicode", "fluent", "fluent-bundle", @@ -7134,9 +7181,9 @@ dependencies = [ "async-channel", "async-trait", "bincode", - "bitflags 1.3.2", + "bitflags 2.2.1", "bytes", - "clap 3.2.25", + "clap 4.2.7", "criterion", "crossbeam-channel", "futures-core", @@ -7191,7 +7238,7 @@ version = "0.1.0" dependencies = [ "proc-macro2 1.0.56", "quote 1.0.26", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -7305,8 +7352,8 @@ name = "veloren-server-cli" version = "0.14.0" dependencies = [ "cansi", - "clap 3.2.25", - "crossterm 0.25.0", + "clap 4.2.7", + "crossterm 0.26.1", "lazy_static", "mimalloc", "num_cpus", @@ -7336,7 +7383,7 @@ dependencies = [ "bytemuck", "chrono", "chumsky", - "clap 3.2.25", + "clap 4.2.7", "cmake", "conrod_core", "conrod_winit", @@ -7449,7 +7496,7 @@ dependencies = [ "arr_macro", "bincode", "bitvec", - "clap 3.2.25", + "clap 4.2.7", "criterion", "csv", "deflate", @@ -7478,7 +7525,6 @@ dependencies = [ "rstar", "rusqlite", "serde", - "structopt", "strum", "svg_fmt", "tracing", diff --git a/client/Cargo.toml b/client/Cargo.toml index 7336ed6ba6..eea8241977 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -22,7 +22,7 @@ common-net = { package = "veloren-common-net", path = "../common/net" } network = { package = "veloren-network", path = "../network", features = ["compression","quic"], default-features = false } byteorder = "1.3.2" -tokio = { version = "1.15", default-features = false, features = ["rt-multi-thread"] } +tokio = { version = "1.24", default-features = false, features = ["rt-multi-thread"] } quinn = "0.8" image = { version = "0.24", default-features = false, features = ["png"] } num = "0.4" @@ -41,9 +41,9 @@ voxygen-i18n-helpers = { package = "veloren-voxygen-i18n-helpers", path = "../vo client-i18n = { package = "veloren-client-i18n", path = "i18n", optional = true } serde = { version = "1.0", features = [ "rc", "derive" ], optional = true } ron = { version = "0.8", default-features = false, optional = true } -clap = { version = "3.1.8", optional = true, features = ["color", "std"] } +clap = { version = "4.2", optional = true, features = ["color", "std"] } structopt = { version = "0.3.13", optional = true } -rustyline = { version = "10.0.0", optional = true } +rustyline = { version = "11.0.0", optional = true } ## logging termcolor = { version = "1.1", optional = true } common-frontend = { package = "veloren-common-frontend", path = "../common/frontend", optional = true } diff --git a/client/i18n/Cargo.toml b/client/i18n/Cargo.toml index 1c074c0cb4..9fa61d3646 100644 --- a/client/i18n/Cargo.toml +++ b/client/i18n/Cargo.toml @@ -21,7 +21,7 @@ hashbrown = { version = "0.13", features = ["serde", "nightly"] } deunicode = "1.0" tracing = "0.1" # Bin -clap = { version = "3.1.8", features = ["suggestions", "std"], default-features = false, optional = true } +clap = { version = "4.2", features = ["suggestions", "std"], default-features = false, optional = true } fluent-syntax = { git = "https://github.com/juliancoffee/fluent-rs.git", branch = "patched"} [[bin]] diff --git a/client/i18n/src/bin/i18n-check.rs b/client/i18n/src/bin/i18n-check.rs index 8471797247..57a8c121a5 100644 --- a/client/i18n/src/bin/i18n-check.rs +++ b/client/i18n/src/bin/i18n-check.rs @@ -19,9 +19,12 @@ fn main() { let i18n_directory = root.join("assets/voxygen/i18n"); let reference = ReferenceLanguage::at(&i18n_directory.join(REFERENCE_LANG)); - let code = args.value_of("CODE").expect("arg is required"); + let code = args + .get_one::("CODE") + .expect("arg is required") + .to_string(); let lang = Language { - code: code.to_owned(), + code: code.clone(), path: root.join(i18n_directory.join(code)), }; let stats = reference.compare_with(&lang); diff --git a/client/src/bin/bot/tui.rs b/client/src/bin/bot/tui.rs index 2a704e592a..72b23a8246 100644 --- a/client/src/bin/bot/tui.rs +++ b/client/src/bin/bot/tui.rs @@ -26,10 +26,15 @@ impl Tui { let handle = thread::spawn(move || { thread::sleep(Duration::from_millis(20)); - let mut readline = rustyline::Editor::<()>::new().unwrap(); + let mut readline = + rustyline::Editor::<(), rustyline::history::FileHistory>::with_history( + Default::default(), + Default::default(), + ) + .unwrap(); while let Ok(cmd) = readline.readline("\n\nbotclient> ") { let keep_going = Self::process_command(&cmd, &mut commands_s); - readline.add_history_entry(cmd); + readline.add_history_entry(cmd).unwrap(); if !keep_going { break; } @@ -65,22 +70,20 @@ impl Tui { .args(&[Arg::new("prefix").required(true)]), ) .try_get_matches_from(cmd.split(' ')); - use clap::ErrorKind::*; + use clap::error::ErrorKind::*; match matches { Ok(matches) => { if match matches.subcommand() { Some(("register", matches)) => command_s.try_send(Cmd::Register { - prefix: matches.value_of("prefix").unwrap().to_string(), - password: matches.value_of("password").unwrap().to_string(), - count: matches - .value_of("count") - .and_then(|x| x.parse::().ok()), + prefix: matches.get_one::("prefix").unwrap().to_string(), + password: matches.get_one::("password").unwrap().to_string(), + count: matches.get_one::("count").cloned(), }), Some(("login", matches)) => command_s.try_send(Cmd::Login { - prefix: matches.value_of("prefix").unwrap().to_string(), + prefix: matches.get_one::("prefix").unwrap().to_string(), }), Some(("ingame", matches)) => command_s.try_send(Cmd::InGame { - prefix: matches.value_of("prefix").unwrap().to_string(), + prefix: matches.get_one::("prefix").unwrap().to_string(), }), _ => Ok(()), } diff --git a/network/Cargo.toml b/network/Cargo.toml index 7d47769513..e1e0c2b8b1 100644 --- a/network/Cargo.toml +++ b/network/Cargo.toml @@ -24,7 +24,7 @@ serde = { version = "1.0" } socket2 = "0.5.2" #sending crossbeam-channel = "0.5" -tokio = { version = "1.15", default-features = false, features = ["io-util", "macros", "rt", "net", "time"] } +tokio = { version = "1.24", default-features = false, features = ["io-util", "macros", "rt", "net", "time"] } tokio-stream = { version = "0.1.2", default-features = false } #tracing and metrics tracing = { version = "0.1", default-features = false, features = ["attributes"]} @@ -40,7 +40,7 @@ rand = { version = "0.8" } quinn = { version = "0.8", optional = true } rustls = "0.20.1" #stream flags -bitflags = "1.2.1" +bitflags = "2.2.1" lz-fear = { version = "0.1.1", optional = true } # async traits async-trait = "0.1.42" @@ -50,9 +50,9 @@ hashbrown = { version = "0.13" } [dev-dependencies] tracing-subscriber = { version = "0.3.7", default-features = false, features = ["env-filter", "fmt", "time", "ansi", "smallvec"] } -tokio = { version = "1.15", default-features = false, features = ["io-std", "fs", "rt-multi-thread"] } +tokio = { version = "1.24", default-features = false, features = ["io-std", "fs", "rt-multi-thread"] } futures-util = { version = "0.3.7", default-features = false, features = ["sink", "std"] } -clap = { version = "3.1.8", default-features = false, features = ["std", "color", "suggestions"] } +clap = { version = "4.2", default-features = false, features = ["std", "color", "suggestions"] } shellexpand = "3.1.0" serde = { version = "1.0", features = ["derive"] } prometheus-hyper = "0.1.2" diff --git a/network/examples/chat.rs b/network/examples/chat.rs index be539ef883..5354a39ebb 100644 --- a/network/examples/chat.rs +++ b/network/examples/chat.rs @@ -22,8 +22,7 @@ fn main() { Arg::new("mode") .short('m') .long("mode") - .takes_value(true) - .possible_values(["server", "client", "both"]) + .value_parser(["server", "client", "both"]) .default_value("both") .help( "choose whether you want to start the server or client or both needed for \ @@ -34,23 +33,20 @@ fn main() { Arg::new("port") .short('p') .long("port") - .takes_value(true) .default_value("52000") .help("port to listen on"), ) .arg( Arg::new("ip") .long("ip") - .takes_value(true) .default_value("127.0.0.1") .help("ip to listen and connect to"), ) .arg( Arg::new("protocol") .long("protocol") - .takes_value(true) .default_value("tcp") - .possible_values(["tcp", "upd", "mpsc"]) + .value_parser(["tcp", "upd", "mpsc"]) .help( "underlying protocol used for this test, mpsc can only combined with mode=both", ), @@ -59,23 +55,22 @@ fn main() { Arg::new("trace") .short('t') .long("trace") - .takes_value(true) .default_value("warn") - .possible_values(["trace", "debug", "info", "warn", "error"]) + .value_parser(["trace", "debug", "info", "warn", "error"]) .help("set trace level, not this has a performance impact!"), ) .get_matches(); - let trace = matches.value_of("trace").unwrap(); + let trace = matches.get_one::("trace").unwrap(); let filter = EnvFilter::from_default_env().add_directive(trace.parse().unwrap()); tracing_subscriber::FmtSubscriber::builder() .with_max_level(Level::TRACE) .with_env_filter(filter) .init(); - let port: u16 = matches.value_of("port").unwrap().parse().unwrap(); - let ip: &str = matches.value_of("ip").unwrap(); - let addresses = match matches.value_of("protocol") { + let port = matches.get_one::("port").unwrap(); + let ip: &str = matches.get_one::("ip").unwrap(); + let addresses = match matches.get_one::("protocol").map(|s| s.as_str()) { Some("tcp") => ( ListenAddr::Tcp(format!("{}:{}", ip, port).parse().unwrap()), ConnectAddr::Tcp(format!("{}:{}", ip, port).parse().unwrap()), @@ -88,7 +83,7 @@ fn main() { }; let mut background = None; - match matches.value_of("mode") { + match matches.get_one::("mode").map(|s| s.as_str()) { Some("server") => server(addresses.0), Some("client") => client(addresses.1), Some("both") => { diff --git a/network/examples/fileshare/main.rs b/network/examples/fileshare/main.rs index 9c82166295..5e337bc4d1 100644 --- a/network/examples/fileshare/main.rs +++ b/network/examples/fileshare/main.rs @@ -24,22 +24,21 @@ fn main() { Arg::new("port") .short('p') .long("port") - .takes_value(true) .default_value("15006") + .value_parser(clap::value_parser!(u16)) .help("port to listen on"), ) .arg( Arg::new("trace") .short('t') .long("trace") - .takes_value(true) .default_value("warn") - .possible_values(["trace", "debug", "info", "warn", "error"]) + .value_parser(["trace", "debug", "info", "warn", "error"]) .help("set trace level, not this has a performance impact!"), ) .get_matches(); - let trace = matches.value_of("trace").unwrap(); + let trace = matches.get_one::("trace").unwrap(); let filter = EnvFilter::from_default_env() .add_directive(trace.parse().unwrap()) .add_directive("fileshare::server=trace".parse().unwrap()) @@ -49,7 +48,7 @@ fn main() { .with_env_filter(filter) .init(); - let port: u16 = matches.value_of("port").unwrap().parse().unwrap(); + let port = matches.get_one::("port").unwrap(); let address = ListenAddr::Tcp(format!("{}:{}", "127.0.0.1", port).parse().unwrap()); let runtime = Arc::new(Runtime::new().unwrap()); @@ -70,7 +69,7 @@ fn file_exists(file: &str) -> Result<(), String> { } } -fn get_options<'a>() -> Command<'a> { +fn get_options() -> Command { Command::new("") .no_binary_name(true) .subcommand_required(true) @@ -87,10 +86,7 @@ fn get_options<'a>() -> Command<'a> { Arg::new("ip:port") .help("ip and port to connect to, example '127.0.0.1:1231'") .required(true) - .validator(|ipport| match ipport.parse::() { - Ok(_) => Ok(()), - Err(e) => Err(format!("must be valid Ip:Port combination {:?}", e)), - }), + .value_parser(clap::value_parser!(std::net::SocketAddr)), ), ) .subcommand(Command::new("list").about("lists all available files on the network")) @@ -101,7 +97,7 @@ fn get_options<'a>() -> Command<'a> { Arg::new("file") .help("file to serve") .required(true) - .validator(file_exists), + .value_parser(file_exists), ), ) .subcommand( @@ -115,10 +111,7 @@ fn get_options<'a>() -> Command<'a> { Arg::new("id") .help("id to download. get the id from the `list` command") .required(true) - .validator(|id| match id.parse::() { - Ok(_) => Ok(()), - Err(e) => Err(format!("must be a number {:?}", e)), - }), + .value_parser(clap::value_parser!(u32)), ) .arg(Arg::new("file").help("local path to store the file to")), ) @@ -156,7 +149,7 @@ async fn client(cmd_sender: mpsc::UnboundedSender) { }, Some(("connect", connect_matches)) => { let socketaddr = connect_matches - .value_of("ip:port") + .get_one::("ip:port") .unwrap() .parse() .unwrap(); @@ -172,7 +165,7 @@ async fn client(cmd_sender: mpsc::UnboundedSender) { .unwrap(); }, Some(("serve", serve_matches)) => { - let path = shellexpand::tilde(serve_matches.value_of("file").unwrap()); + let path = shellexpand::tilde(serve_matches.get_one::("file").unwrap()); let path: PathBuf = path.parse().unwrap(); if let Some(fileinfo) = FileInfo::new(&path).await { cmd_sender.send(LocalCommand::Serve(fileinfo)).unwrap(); @@ -182,8 +175,8 @@ async fn client(cmd_sender: mpsc::UnboundedSender) { cmd_sender.send(LocalCommand::List).unwrap(); }, Some(("get", get_matches)) => { - let id: u32 = get_matches.value_of("id").unwrap().parse().unwrap(); - let file = get_matches.value_of("file"); + let id = *get_matches.get_one::("id").unwrap(); + let file = get_matches.get_one::("file"); cmd_sender .send(LocalCommand::Get(id, file.map(|s| s.to_string()))) .unwrap(); diff --git a/network/examples/network-speed/main.rs b/network/examples/network-speed/main.rs index 34824b734e..46c839e984 100644 --- a/network/examples/network-speed/main.rs +++ b/network/examples/network-speed/main.rs @@ -35,8 +35,7 @@ fn main() { Arg::new("mode") .short('m') .long("mode") - .takes_value(true) - .possible_values(["server", "client", "both"]) + .value_parser(["server", "client", "both"]) .default_value("both") .help( "choose whether you want to start the server or client or both needed for \ @@ -47,23 +46,21 @@ fn main() { Arg::new("port") .short('p') .long("port") - .takes_value(true) .default_value("52000") + .value_parser(clap::value_parser!(u16)) .help("port to listen on"), ) .arg( Arg::new("ip") .long("ip") - .takes_value(true) .default_value("127.0.0.1") .help("ip to listen and connect to"), ) .arg( Arg::new("protocol") .long("protocol") - .takes_value(true) .default_value("tcp") - .possible_values(["tcp", "udp", "mpsc"]) + .value_parser(["tcp", "udp", "mpsc"]) .help( "underlying protocol used for this test, mpsc can only combined with mode=both", ), @@ -72,14 +69,13 @@ fn main() { Arg::new("trace") .short('t') .long("trace") - .takes_value(true) .default_value("warn") - .possible_values(["trace", "debug", "info", "warn", "error"]) + .value_parser(["trace", "debug", "info", "warn", "error"]) .help("set trace level, not this has a performance impact!"), ) .get_matches(); - let trace = matches.value_of("trace").unwrap(); + let trace = matches.get_one::("trace").unwrap(); let filter = EnvFilter::from_default_env() .add_directive(trace.parse().unwrap()) .add_directive("network_speed=debug".parse().unwrap()) @@ -94,9 +90,9 @@ fn main() { .with_env_filter(filter) .init(); - let port: u16 = matches.value_of("port").unwrap().parse().unwrap(); - let ip: &str = matches.value_of("ip").unwrap(); - let addresses = match matches.value_of("protocol") { + let port = matches.get_one::("port").unwrap(); + let ip: &str = matches.get_one::("ip").unwrap(); + let addresses = match matches.get_one::("protocol").map(|s| s.as_str()) { Some("tcp") => ( ListenAddr::Tcp(format!("{}:{}", ip, port).parse().unwrap()), ConnectAddr::Tcp(format!("{}:{}", ip, port).parse().unwrap()), @@ -110,7 +106,7 @@ fn main() { let mut background = None; let runtime = Arc::new(Runtime::new().unwrap()); - match matches.value_of("mode") { + match matches.get_one::("mode").map(|s| s.as_str()) { Some("server") => server(addresses.0, Arc::clone(&runtime)), Some("client") => client(addresses.1, Arc::clone(&runtime)), Some("both") => { diff --git a/network/protocol/Cargo.toml b/network/protocol/Cargo.toml index b247a7975a..94488f025c 100644 --- a/network/protocol/Cargo.toml +++ b/network/protocol/Cargo.toml @@ -28,7 +28,7 @@ hashbrown = { version = "0.13" } [dev-dependencies] async-channel = "1.5.1" -tokio = { version = "1.15", default-features = false, features = ["rt", "macros"] } +tokio = { version = "1.24", default-features = false, features = ["rt", "macros"] } criterion = { version = "0.3.4", features = ["default", "async_tokio"] } [[bench]] diff --git a/plugin/derive/Cargo.toml b/plugin/derive/Cargo.toml index 60be27c836..0b4fd1c296 100644 --- a/plugin/derive/Cargo.toml +++ b/plugin/derive/Cargo.toml @@ -11,5 +11,5 @@ proc-macro = true [dependencies] proc-macro2 = "1.0.24" -syn = { version = "1.0.54", features = ["full","extra-traits"]} +syn = { version = "2", features = ["full","extra-traits"]} quote = "1.0.7" diff --git a/server-cli/Cargo.toml b/server-cli/Cargo.toml index fe32e4fbbd..7294b16f98 100644 --- a/server-cli/Cargo.toml +++ b/server-cli/Cargo.toml @@ -35,11 +35,11 @@ common-net = { package = "veloren-common-net", path = "../common/net" } common-frontend = { package = "veloren-common-frontend", path = "../common/frontend" } world = { package = "veloren-world", path = "../world", optional = true } -tokio = { version = "1.15", default-features = false, features = ["rt-multi-thread"] } +tokio = { version = "1.24", default-features = false, features = ["rt-multi-thread"] } num_cpus = "1.0" cansi = "2.2.1" -clap = { version = "3.1.8", features = ["derive"] } -crossterm = "0.25" +clap = { version = "4.2", features = ["derive"] } +crossterm = "0.26" lazy_static = "1" signal-hook = "0.3.6" shell-words = "1.0.0" diff --git a/server-cli/src/cli.rs b/server-cli/src/cli.rs index f08d38ac1c..056c62b2b5 100644 --- a/server-cli/src/cli.rs +++ b/server-cli/src/cli.rs @@ -1,17 +1,17 @@ -use clap::StructOpt; +use clap::Parser; use common::comp; use server::persistence::SqlLogMode; use std::sync::mpsc::Sender; use tracing::error; -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] pub enum Admin { /// Adds an admin Add { /// Name of the admin to whom to assign a role username: String, /// role to assign to the admin - #[structopt(possible_values = comp::AdminRole::variants(), ignore_case = true)] + #[arg(ignore_case = true, value_parser = SqlLogMode::variants())] role: comp::AdminRole, }, Remove { @@ -20,7 +20,7 @@ pub enum Admin { }, } -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] pub enum Shutdown { /// Closes the server immediately Immediate, @@ -28,7 +28,7 @@ pub enum Shutdown { Graceful { /// Number of seconds to wait before shutting down seconds: u64, - #[structopt(short, long, default_value = "The server is shutting down")] + #[arg(short, long, default_value = "The server is shutting down")] /// Shutdown reason reason: String, }, @@ -36,22 +36,22 @@ pub enum Shutdown { Cancel, } -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] pub enum SharedCommand { /// Perform operations on the admin list Admin { - #[structopt(subcommand)] + #[command(subcommand)] command: Admin, }, } -#[derive(Debug, Clone, StructOpt)] +#[derive(Debug, Clone, Parser)] pub enum Message { - #[structopt(flatten)] + #[command(flatten)] Shared(SharedCommand), /// Shut down the server (or cancel a shut down) Shutdown { - #[structopt(subcommand)] + #[command(subcommand)] command: Shutdown, }, /// Loads up the chunks at map center and adds a entity that mimics a @@ -62,15 +62,15 @@ pub enum Message { }, /// Enable or disable sql logging SqlLogMode { - #[structopt(default_value_t, possible_values = SqlLogMode::variants())] + #[arg(default_value_t, value_parser = SqlLogMode::variants())] mode: SqlLogMode, }, /// Disconnects all connected clients DisconnectAllClients, } -#[derive(StructOpt)] -#[structopt( +#[derive(Parser)] +#[command( name = "Veloren server TUI", version = common::util::DISPLAY_VERSION_LONG.as_str(), about = "The veloren server tui allows sending commands directly to the running server.", @@ -78,41 +78,41 @@ pub enum Message { )] #[clap(no_binary_name = true)] pub struct TuiApp { - #[structopt(subcommand)] + #[command(subcommand)] command: Message, } -#[derive(StructOpt)] +#[derive(Parser)] pub enum ArgvCommand { - #[structopt(flatten)] + #[command(flatten)] Shared(SharedCommand), } -#[derive(StructOpt)] -#[structopt( +#[derive(Parser)] +#[command( name = "Veloren server CLI", version = common::util::DISPLAY_VERSION_LONG.as_str(), about = "The veloren server cli provides an easy to use interface to start a veloren server.", author = "The veloren devs ", )] pub struct ArgvApp { - #[structopt(long, short)] + #[arg(long, short)] /// Enables the tui pub tui: bool, - #[structopt(long, short)] + #[arg(long, short)] /// Doesn't listen on STDIN /// /// Useful if you want to send the server in background, and your kernels /// terminal driver will send SIGTTIN to it otherwise. (https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections) and you dont want to use `stty -tostop` /// or `nohub` or `tmux` or `screen` or `<<< \"\\004\"` to the program. pub non_interactive: bool, - #[structopt(long)] + #[arg(long)] /// Run without auth enabled pub no_auth: bool, - #[structopt(default_value_t, long, short, possible_values = SqlLogMode::variants())] + #[arg(default_value_t, long, short, value_parser = SqlLogMode::variants())] /// Enables SQL logging pub sql_log_mode: SqlLogMode, - #[structopt(subcommand)] + #[command(subcommand)] pub command: Option, } diff --git a/server/Cargo.toml b/server/Cargo.toml index 8828d1e07e..fba764d22c 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -38,12 +38,12 @@ num_cpus = "1.0" tracing = "0.1" vek = { version = "0.15.8", features = ["serde"] } futures-util = "0.3.7" -tokio = { version = "1.15", default-features = false, features = ["rt"] } +tokio = { version = "1.24", default-features = false, features = ["rt"] } prometheus-hyper = "0.1.4" quinn = "0.8" rustls = { version = "0.20", default-features = false } rustls-pemfile = { version = "1", default-features = false } -atomicwrites = "0.3.0" +atomicwrites = "0.4" chrono = { version = "0.4.22", features = ["serde"] } chrono-tz = { version = "0.8", features = ["serde"] } drop_guard = { version = "0.3.0" } @@ -66,7 +66,7 @@ rand_distr = "0.4.0" enumset = "1.0.8" enum-map = "2.4" noise = { version = "0.7", default-features = false } -censor = "0.2" +censor = "0.3" rusqlite = { version = "0.28.0", features = ["array", "vtab", "bundled", "trace"] } refinery = { version = "0.8.8", features = ["rusqlite"] } diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 819764e018..004a68c338 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -96,7 +96,7 @@ gilrs = {version = "0.10.0", features = ["serde-serialize"]} server = { package = "veloren-server", path = "../server", optional = true, default-features = false, features = ["worldgen"] } # CLI -clap = { version = "3.2.20", features = ["derive"] } +clap = { version = "4.2", features = ["derive"] } # Utility assets_manager = {version = "0.10", features = ["ab_glyph"]} @@ -130,7 +130,7 @@ slab = "0.4.2" strum = { version = "0.24", features = ["derive"] } tracing = "0.1" treeculler = "0.2" -tokio = { version = "1.15", default-features = false, features = ["rt-multi-thread"] } +tokio = { version = "1.24", default-features = false, features = ["rt-multi-thread"] } num_cpus = "1.0" inline_tweak = "1.0.2" itertools = "0.10.0" diff --git a/world/Cargo.toml b/world/Cargo.toml index e5320dd472..1391f725e4 100644 --- a/world/Cargo.toml +++ b/world/Cargo.toml @@ -50,7 +50,7 @@ flate2 = { version = "1.0.20", optional = true } num-traits = { version = "0.2", optional = true } fallible-iterator = { version = "0.2.0", optional = true } rstar = { version = "0.10", optional = true } -clap = { version = "3.1.8", optional = true } +clap = { version = "4.2", optional = true } [dev-dependencies] @@ -58,10 +58,9 @@ common-frontend = { package = "veloren-common-frontend", path = "../common/front criterion = "0.3" csv = "1.1.3" tracing-subscriber = { version = "0.3.7", default-features = false, features = ["fmt", "time", "ansi", "smallvec", "env-filter"] } -minifb = "0.23" +minifb = "0.24" rusqlite = { version = "0.28.0", features = ["array", "vtab", "bundled", "trace"] } svg_fmt = "0.4" -structopt = "0.3" strum = "0.24" [[bench]] diff --git a/world/examples/world_block_statistics.rs b/world/examples/world_block_statistics.rs index f397e680dc..bd478b75dd 100644 --- a/world/examples/world_block_statistics.rs +++ b/world/examples/world_block_statistics.rs @@ -254,8 +254,8 @@ fn main() -> Result<(), Box> { Arg::new("database") .required(true) .help("File to generate/resume generation"), - Arg::new("ymin").long("ymin").takes_value(true), - Arg::new("ymax").long("ymax").takes_value(true), + Arg::new("ymin").long("ymin"), + Arg::new("ymax").long("ymax"), ]), ) .subcommand( @@ -267,14 +267,19 @@ fn main() -> Result<(), Box> { let matches = app.clone().get_matches(); match matches.subcommand() { Some(("generate", matches)) => { - let db_path = matches.value_of("database").expect("database is required"); - let ymin = matches.value_of("ymin").and_then(|x| i32::from_str(x).ok()); - let ymax = matches.value_of("ymax").and_then(|x| i32::from_str(x).ok()); + let db_path = matches + .get_one::("database") + .expect("database is required"); + let ymin = matches.get_one::("ymin").cloned(); + let ymax = matches.get_one::("ymax").cloned(); generate(db_path, ymin, ymax)?; }, Some(("palette", matches)) => { - let conn = - Connection::open(matches.value_of("database").expect("database is required"))?; + let conn = Connection::open( + matches + .get_one::("database") + .expect("database is required"), + )?; palette(conn)?; }, _ => { From d90ea8c1da5037020d0fa7f84f856ab3ff00a0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=A4rtens?= Date: Fri, 5 May 2023 00:11:43 +0200 Subject: [PATCH 2/2] get rid of structop and update clippy in common test, now only criterion is left with version 2 --- Cargo.lock | 61 ++----------------------------- client/Cargo.toml | 5 +-- client/i18n/Cargo.toml | 2 +- client/src/bin/bot/tui.rs | 17 +++++---- common/Cargo.toml | 8 ++-- common/src/bin/csv_export/main.rs | 6 +-- common/src/bin/csv_import/main.rs | 6 +-- common/src/bin/skill_graphviz.rs | 6 +-- common/src/comp/admin.rs | 16 ++++---- server-cli/Cargo.toml | 1 + server-cli/src/cli.rs | 3 +- 11 files changed, 41 insertions(+), 90 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d718f030d9..8ce58c2c8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,15 +121,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "anstream" version = "0.3.2" @@ -739,13 +730,9 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "ansi_term", - "atty", "bitflags 1.3.2", - "strsim 0.8.0", "textwrap", "unicode-width", - "vec_map", ] [[package]] @@ -778,7 +765,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2 1.0.56", "quote 1.0.26", "syn 2.0.15", @@ -2797,15 +2784,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "heck" version = "0.4.1" @@ -6231,12 +6209,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" -[[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" @@ -6249,30 +6221,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap 2.34.0", - "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 0.3.3", - "proc-macro-error", - "proc-macro2 1.0.56", - "quote 1.0.26", - "syn 1.0.109", -] - [[package]] name = "strum" version = "0.24.1" @@ -6288,7 +6236,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2 1.0.56", "quote 1.0.26", "rustversion", @@ -6970,7 +6918,6 @@ dependencies = [ "rustyline", "serde", "specs", - "structopt", "termcolor", "tokio", "tracing", @@ -7015,7 +6962,7 @@ dependencies = [ "cfg-if 1.0.0", "chrono", "chrono-tz", - "clap 2.34.0", + "clap 4.2.7", "criterion", "crossbeam-channel", "crossbeam-utils 0.8.15", @@ -7045,7 +6992,6 @@ dependencies = [ "slotmap 1.0.6", "specs", "spin_sleep", - "structopt", "strum", "tracing", "tracing-subscriber", @@ -7361,6 +7307,7 @@ dependencies = [ "serde", "shell-words", "signal-hook 0.3.15", + "strum", "tokio", "tracing", "tui", diff --git a/client/Cargo.toml b/client/Cargo.toml index eea8241977..896433eb67 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [features] simd = ["vek/platform_intrinsics"] plugins = ["common-state/plugins"] -bin_bot = ["common-ecs", "serde", "ron", "clap", "structopt", "rustyline", "common-frontend", "async-channel", "voxygen-i18n-helpers", "client-i18n"] +bin_bot = ["common-ecs", "serde", "ron", "clap", "rustyline", "common-frontend", "async-channel", "voxygen-i18n-helpers", "client-i18n"] tracy = ["common-base/tracy"] tick_network = [] @@ -41,8 +41,7 @@ voxygen-i18n-helpers = { package = "veloren-voxygen-i18n-helpers", path = "../vo client-i18n = { package = "veloren-client-i18n", path = "i18n", optional = true } serde = { version = "1.0", features = [ "rc", "derive" ], optional = true } ron = { version = "0.8", default-features = false, optional = true } -clap = { version = "4.2", optional = true, features = ["color", "std"] } -structopt = { version = "0.3.13", optional = true } +clap = { version = "4.2", optional = true } rustyline = { version = "11.0.0", optional = true } ## logging termcolor = { version = "1.1", optional = true } diff --git a/client/i18n/Cargo.toml b/client/i18n/Cargo.toml index 9fa61d3646..980d14e53b 100644 --- a/client/i18n/Cargo.toml +++ b/client/i18n/Cargo.toml @@ -21,7 +21,7 @@ hashbrown = { version = "0.13", features = ["serde", "nightly"] } deunicode = "1.0" tracing = "0.1" # Bin -clap = { version = "4.2", features = ["suggestions", "std"], default-features = false, optional = true } +clap = { version = "4.2", features = ["suggestions", "std", "help", "usage", "error-context"], default-features = false, optional = true } fluent-syntax = { git = "https://github.com/juliancoffee/fluent-rs.git", branch = "patched"} [[bin]] diff --git a/client/src/bin/bot/tui.rs b/client/src/bin/bot/tui.rs index 72b23a8246..7d3528405e 100644 --- a/client/src/bin/bot/tui.rs +++ b/client/src/bin/bot/tui.rs @@ -26,12 +26,15 @@ impl Tui { let handle = thread::spawn(move || { thread::sleep(Duration::from_millis(20)); - let mut readline = - rustyline::Editor::<(), rustyline::history::FileHistory>::with_history( - Default::default(), - Default::default(), - ) - .unwrap(); + let config = rustyline::config::Builder::new() + .max_history_size(1000) + .unwrap() + .build(); + let mut readline = rustyline::Editor::<(), _>::with_history( + config, + rustyline::history::MemHistory::with_config(config), + ) + .unwrap(); while let Ok(cmd) = readline.readline("\n\nbotclient> ") { let keep_going = Self::process_command(&cmd, &mut commands_s); readline.add_history_entry(cmd).unwrap(); @@ -77,7 +80,7 @@ impl Tui { Some(("register", matches)) => command_s.try_send(Cmd::Register { prefix: matches.get_one::("prefix").unwrap().to_string(), password: matches.get_one::("password").unwrap().to_string(), - count: matches.get_one::("count").cloned(), + count: matches.get_one::("count").copied(), }), Some(("login", matches)) => command_s.try_send(Cmd::Login { prefix: matches.get_one::("prefix").unwrap().to_string(), diff --git a/common/Cargo.toml b/common/Cargo.toml index b54ad7d59c..38b9b5c14c 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -8,8 +8,8 @@ edition = "2021" no-assets = [] hot-reloading = ["common-assets/hot-reloading"] simd = ["vek/platform_intrinsics"] -bin_csv = ["ron", "csv", "structopt"] -bin_graphviz = ["petgraph", "structopt"] +bin_csv = ["ron", "csv", "clap"] +bin_graphviz = ["petgraph", "clap"] bin_cmd_doc_gen = [] bin_asset_migrate = ["ron"] rrt_pathfinding = ["kiddo"] @@ -40,7 +40,6 @@ strum = { version = "0.24", features = ["derive"] } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] approx = "0.4.0" -clap = "2.33" crossbeam-utils = "0.8.1" bitflags = "1.2" crossbeam-channel = "0.5" @@ -67,11 +66,11 @@ serde_repr = "0.1.6" ron = { version = "0.7", default-features = false, optional = true } # csv export csv = { version = "1.1.3", optional = true } -structopt = { version = "0.3.13", optional = true } # graphviz exporters petgraph = { version = "0.6", optional = true } # K-d trees used for RRT pathfinding kiddo = { version = "0.2", optional = true } +clap = { version = "4.2", optional = true } # Data structures hashbrown = { version = "0.13", features = ["rayon", "serde", "nightly"] } @@ -91,7 +90,6 @@ rand_chacha = "0.3" tracing-subscriber = { version = "0.3.7", default-features = false, features = ["fmt", "time", "ansi", "smallvec", "env-filter"] } petgraph = "0.6.0" - [[bench]] name = "chonk_benchmark" harness = false diff --git a/common/src/bin/csv_export/main.rs b/common/src/bin/csv_export/main.rs index bc45460217..485fc26cbf 100644 --- a/common/src/bin/csv_export/main.rs +++ b/common/src/bin/csv_export/main.rs @@ -1,11 +1,11 @@ #![deny(clippy::clone_on_ref_ptr)] +use clap::Parser; use std::{ error::Error, io::Write, ops::{Div, Mul}, }; -use structopt::StructOpt; use veloren_common::{ assets::{self, AssetExt}, @@ -24,7 +24,7 @@ use veloren_common::{ use vek::Vec3; -#[derive(StructOpt)] +#[derive(Parser)] struct Cli { /// Available arguments: "armor-stats", "weapon-stats", "all-items", /// "loot-table", "entity-drops" @@ -496,7 +496,7 @@ fn entity_drops(entity_config: &str) -> Result<(), Box> { } fn main() { - let args = Cli::from_args(); + let args = Cli::parse(); if args.function.eq_ignore_ascii_case("armor-stats") { if let Err(e) = armor_stats() { println!("Error: {}\n", e) diff --git a/common/src/bin/csv_import/main.rs b/common/src/bin/csv_import/main.rs index bd48782870..c393fac746 100644 --- a/common/src/bin/csv_import/main.rs +++ b/common/src/bin/csv_import/main.rs @@ -1,11 +1,11 @@ #![deny(clippy::clone_on_ref_ptr)] #![allow(clippy::expect_fun_call)] //TODO: evaluate to remove this and use `unwrap_or_else(panic!(...))` instead +use clap::Parser; use hashbrown::HashMap; use ron::ser::{to_string_pretty, PrettyConfig}; use serde::Serialize; use std::{error::Error, fs::File, io::Write}; -use structopt::StructOpt; use veloren_common::{ assets::ASSETS_PATH, @@ -19,7 +19,7 @@ use veloren_common::{ }, }; -#[derive(StructOpt)] +#[derive(Parser)] struct Cli { /// Available arguments: "armor-stats", "weapon-stats" function: String, @@ -463,7 +463,7 @@ fn weapon_stats() -> Result<(), Box> { } fn main() { - let args = Cli::from_args(); + let args = Cli::parse(); if args.function.eq_ignore_ascii_case("armor-stats") { if get_input( " diff --git a/common/src/bin/skill_graphviz.rs b/common/src/bin/skill_graphviz.rs index 493d2597af..3cca25bd3d 100644 --- a/common/src/bin/skill_graphviz.rs +++ b/common/src/bin/skill_graphviz.rs @@ -1,10 +1,10 @@ +use clap::Parser; use hashbrown::HashMap; use petgraph::{ dot::{Config, Dot}, Graph, }; use std::{fs::File, io::Write}; -use structopt::StructOpt; use veloren_common::comp::{ item::tool::ToolKind, skillset::{ @@ -12,14 +12,14 @@ use veloren_common::comp::{ }, }; -#[derive(StructOpt)] +#[derive(Parser)] struct Cli { /// Available arguments: "sword" skill_group: String, } fn main() { - let args = Cli::from_args(); + let args = Cli::parse(); let skill_group = match args.skill_group.as_str() { "sword" => SkillGroupKind::Weapon(ToolKind::Sword), _ => { diff --git a/common/src/comp/admin.rs b/common/src/comp/admin.rs index 2254852f28..9dc7361ac1 100644 --- a/common/src/comp/admin.rs +++ b/common/src/comp/admin.rs @@ -1,13 +1,15 @@ -use clap::arg_enum; use serde::{Deserialize, Serialize}; use specs::{Component, DerefFlaggedStorage, VecStorage}; +use strum::EnumVariantNames; -arg_enum! { - #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize, Deserialize)] - pub enum AdminRole { - Moderator = 0, - Admin = 1, - } +// EnumVariantNames is used by bins for clap only, but using strum here gets rid +// of the clap dependency +#[derive( + Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize, Deserialize, EnumVariantNames, +)] +pub enum AdminRole { + Moderator = 0, + Admin = 1, } #[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] diff --git a/server-cli/Cargo.toml b/server-cli/Cargo.toml index 7294b16f98..df7299975d 100644 --- a/server-cli/Cargo.toml +++ b/server-cli/Cargo.toml @@ -46,6 +46,7 @@ shell-words = "1.0.0" tracing = { version = "0.1", default-features = false } ron = {version = "0.8", default-features = false} serde = {version = "1.0", features = [ "rc", "derive" ]} +strum = { version = "0.24" } [target.'cfg(windows)'.dependencies] mimalloc = "0.1.29" diff --git a/server-cli/src/cli.rs b/server-cli/src/cli.rs index 056c62b2b5..f5a5825a6d 100644 --- a/server-cli/src/cli.rs +++ b/server-cli/src/cli.rs @@ -2,6 +2,7 @@ use clap::Parser; use common::comp; use server::persistence::SqlLogMode; use std::sync::mpsc::Sender; +use strum::VariantNames; use tracing::error; #[derive(Clone, Debug, Parser)] @@ -11,7 +12,7 @@ pub enum Admin { /// Name of the admin to whom to assign a role username: String, /// role to assign to the admin - #[arg(ignore_case = true, value_parser = SqlLogMode::variants())] + #[arg(ignore_case = true, value_parser = clap::builder::PossibleValuesParser::new(comp::AdminRole::VARIANTS))] role: comp::AdminRole, }, Remove {