use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DaemonEvent {
Create(PathBuf),
Modify(PathBuf),
Remove(PathBuf),
}
pub trait EventObserver: Send {
fn on_events(&mut self, events: &[DaemonEvent]);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn daemon_event_equality() {
let a = DaemonEvent::Create(PathBuf::from("foo.rs"));
let b = DaemonEvent::Create(PathBuf::from("foo.rs"));
let c = DaemonEvent::Modify(PathBuf::from("foo.rs"));
let d = DaemonEvent::Create(PathBuf::from("bar.rs"));
assert_eq!(a, b, "相同类型和路径应相等");
assert_ne!(a, c, "不同类型应不等");
assert_ne!(a, d, "不同路径应不等");
assert_ne!(c, DaemonEvent::Remove(PathBuf::from("foo.rs")));
}
#[test]
fn daemon_event_debug_format() {
let e = DaemonEvent::Create(PathBuf::from("src/main.rs"));
let s = format!("{e:?}");
assert!(s.contains("Create"), "debug 应包含变体名: {s}");
assert!(s.contains("src/main.rs"), "debug 应包含路径: {s}");
let m = DaemonEvent::Modify(PathBuf::from("a.c"));
assert!(format!("{m:?}").contains("Modify"));
let r = DaemonEvent::Remove(PathBuf::from("b.py"));
assert!(format!("{r:?}").contains("Remove"));
}
#[test]
fn daemon_event_clone_is_equal() {
let e = DaemonEvent::Modify(PathBuf::from("x.ts"));
assert_eq!(e, e.clone());
}
}