diff --git a/crates/sui-tool/src/commands.rs b/crates/sui-tool/src/commands.rs index d4a6eb83facfc..26d8410775443 100644 --- a/crates/sui-tool/src/commands.rs +++ b/crates/sui-tool/src/commands.rs @@ -262,8 +262,8 @@ pub enum ToolCommand { #[clap(long = "skip-indexes")] skip_indexes: bool, /// Number of parallel downloads to perform. Defaults to a reasonable - /// value based on number of available logical cores. - #[clap(long = "num-parallel-downloads")] + /// value based on number of available logical cores. Maximum value is 100. + #[clap(long = "num-parallel-downloads", value_parser = parse_parallel_downloads)] num_parallel_downloads: Option, /// Network to download snapshot for. Defaults to "mainnet". /// If `--snapshot-bucket` or `--archive-bucket` is not specified, @@ -324,8 +324,8 @@ pub enum ToolCommand { #[clap(long = "path")] path: PathBuf, /// Number of parallel downloads to perform. Defaults to a reasonable - /// value based on number of available logical cores. - #[clap(long = "num-parallel-downloads")] + /// value based on number of available logical cores. Maximum value is 100. + #[clap(long = "num-parallel-downloads", value_parser = parse_parallel_downloads)] num_parallel_downloads: Option, /// Verification mode to employ. #[clap(long = "verify", default_value = "normal")] @@ -418,6 +418,14 @@ pub enum ToolCommand { }, } +fn parse_parallel_downloads(s: &str) -> Result { + match s.parse::() { + Ok(val) if (1..=100).contains(&val) => Ok(val), + Ok(_) => Err(String::from("Value must be between 1 and 100")), + Err(_) => Err(String::from("Failed to parse value as usize")), + } +} + async fn check_locked_object( sui_client: &Arc, committee: Arc>,