use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher};
use std::{
path::Path,
sync::mpsc::{channel, Receiver},
time::Duration,
};
pub struct FileSystemWatcher {
#[allow(dead_code)] watcher: RecommendedWatcher,
receiver: Receiver<notify::Result<Event>>,
}
impl FileSystemWatcher {
pub fn new<P: AsRef<Path>>(path: P, delay: Duration) -> Result<Self, notify::Error> {
let (tx, rx) = channel();
let mut watcher = RecommendedWatcher::new(tx, Config::default().with_poll_interval(delay))?;
watcher.watch(path.as_ref(), RecursiveMode::Recursive)?;
Ok(Self {
receiver: rx,
watcher,
})
}
pub fn try_get_event(&self) -> Option<Event> {
if let Ok(Ok(evt)) = self.receiver.try_recv() {
return Some(evt);
}
None
}
}