use crate::args::ConnType;
#[derive(Debug, clap::Args)]
pub struct SaturateArgs {
#[clap(short = 't', long, default_value = "h1-clear-text")]
pub(crate) conn_type: ConnType,
#[clap(subcommand)]
pub(crate) direction: Direction,
#[clap(long, default_value = "20")]
pub(crate) duration: u64,
}
#[derive(Debug, Clone, clap::Subcommand)]
pub enum Direction {
Down {
#[clap(
short,
long,
default_value = "http://h3.speed.cloudflare.com/__down?bytes=10000000000"
)]
download_url: String,
},
Up {
#[clap(short, long, default_value = "http://h3.speed.cloudflare.com/__up")]
upload_url: String,
},
Both {
#[clap(
short,
long,
default_value = "http://h3.speed.cloudflare.com/__down?bytes=10000000000"
)]
download_url: String,
#[clap(short, long, default_value = "http://h3.speed.cloudflare.com/__up")]
upload_url: String,
},
}
impl Default for Direction {
fn default() -> Self {
Self::Down {
download_url: "http://h3.speed.cloudflare.com/__down?bytes=10000000000".into(),
}
}
}
pub(crate) struct Urls {
pub(crate) upload: String,
pub(crate) download: String,
}
impl Direction {
pub(crate) fn urls(&self) -> Urls {
match self {
Direction::Up { upload_url: url } | Direction::Down { download_url: url } => Urls {
upload: url.clone(),
download: url.clone(),
},
Direction::Both {
download_url,
upload_url,
} => Urls {
download: download_url.clone(),
upload: upload_url.clone(),
},
}
}
}