use std::time::Duration;
use crate::interface::report::FailOn;
use crate::language::LangId;
use crate::output::emitter::EmitConfig;
pub const MIN_DEBOUNCE: Duration = Duration::from_millis(50);
#[derive(Debug, Clone)]
pub struct WatchConfig {
pub debounce: Duration,
pub emit: EmitConfig,
pub fail_on: FailOn,
pub languages: Option<Vec<LangId>>,
}
impl WatchConfig {
pub fn new() -> Self {
Self {
debounce: Duration::from_millis(200),
emit: EmitConfig {
output: None,
format: crate::output::OutputFormat::Json,
html: false,
open_browser: false,
},
fail_on: FailOn::Error,
languages: None,
}
}
pub fn debounce(&self) -> Duration {
self.debounce.max(MIN_DEBOUNCE)
}
}
impl Default for WatchConfig {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn watch_config_default_values() {
let cfg = WatchConfig::default();
assert_eq!(cfg.debounce, Duration::from_millis(200));
assert_eq!(cfg.debounce(), Duration::from_millis(200));
assert_eq!(cfg.emit.format, crate::output::OutputFormat::Json);
assert!(cfg.emit.output.is_none());
assert!(!cfg.emit.html);
assert!(!cfg.emit.open_browser);
assert_eq!(cfg.fail_on, FailOn::Error);
assert!(cfg.languages.is_none());
}
#[test]
fn debounce_has_a_floor() {
let cfg = WatchConfig {
debounce: Duration::ZERO,
..WatchConfig::new()
};
assert_eq!(cfg.debounce(), MIN_DEBOUNCE);
}
}