use argh::FromArgs;
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
#[derive(FromArgs, Clone)]
pub struct UserArgs {
#[argh(option, default = "8")]
pub download_threads: u32,
#[argh(option, default = "8")]
pub upload_threads: u32,
#[argh(switch, short = 'd')]
pub download_only: bool,
#[argh(switch, short = 'u')]
pub upload_only: bool,
#[argh(option, default = "50 * 1024 * 1024")]
pub bytes_to_download: usize,
#[argh(option, default = "50 * 1024 * 1024")]
pub bytes_to_upload: usize,
#[argh(option, default = "12")]
pub test_duration_seconds: u64,
}
impl UserArgs {
pub fn validate(&self) -> Result<()> {
if self.download_only && self.upload_only {
Err(Box::new(std::io::Error::new(
std::io::ErrorKind::InvalidInput,
"Cannot specify both --download-only and --upload-only",
)))
} else {
Ok(())
}
}
}