use std::path::PathBuf;
use std::time::Duration;
use clap::Args;
#[derive(Args, Clone, Debug)]
pub struct DevArgs {
#[arg(default_value = ".")]
pub path: PathBuf,
#[arg(long)]
pub gleam_path: PathBuf,
#[arg(long, value_parser = parse_debounce_ms)]
pub debounce_ms: Option<Duration>,
}
fn parse_debounce_ms(raw: &str) -> Result<Duration, String> {
let millis: u64 = raw
.parse()
.map_err(|error| format!("invalid --debounce-ms value `{raw}`: {error}"))?;
if millis == 0 {
return Err("--debounce-ms must be a positive number of milliseconds".to_owned());
}
Ok(Duration::from_millis(millis))
}
#[cfg(test)]
mod tests {
use std::time::Duration;
use super::parse_debounce_ms;
#[test]
fn debounce_parses_positive_milliseconds() {
assert_eq!(parse_debounce_ms("250"), Ok(Duration::from_millis(250)));
}
#[test]
fn debounce_rejects_zero_and_non_numeric() {
assert!(parse_debounce_ms("0").is_err());
assert!(parse_debounce_ms("nope").is_err());
assert!(parse_debounce_ms("-5").is_err());
}
}