use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum TelemetryMode {
#[default]
Off,
Coarse,
Detailed,
}
impl TelemetryMode {
pub fn is_enabled(self) -> bool {
!matches!(self, TelemetryMode::Off)
}
pub fn wants_candidates(self) -> bool {
matches!(self, TelemetryMode::Detailed)
}
}
#[derive(Debug, Clone, Default)]
pub struct TelemetryConfig {
pub mode: TelemetryMode,
pub out_path: Option<PathBuf>,
}
impl TelemetryConfig {
pub fn is_enabled(&self) -> bool {
self.mode.is_enabled()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_mode_is_off_and_disabled() {
let cfg = TelemetryConfig::default();
assert_eq!(cfg.mode, TelemetryMode::Off);
assert!(!cfg.is_enabled(), "default config must emit nothing");
assert!(!TelemetryMode::default().is_enabled());
}
#[test]
fn coarse_vs_detailed_candidates_gate() {
assert!(TelemetryMode::Coarse.is_enabled());
assert!(
!TelemetryMode::Coarse.wants_candidates(),
"coarse omits candidates"
);
assert!(TelemetryMode::Detailed.is_enabled());
assert!(
TelemetryMode::Detailed.wants_candidates(),
"detailed fills candidates"
);
}
}