mod debounce;
mod handle;
mod relevance;
#[cfg(test)]
mod tests;
pub use handle::{spawn, spawn_with, WatchHandle, WatchKey};
use std::path::PathBuf;
use std::time::Duration;
use crate::discovery;
use crate::source::LoadSpec;
#[derive(Debug, Clone)]
pub struct Watched {
files: Vec<PathBuf>,
search_name: Option<String>,
search_directories: Vec<PathBuf>,
}
impl Watched {
#[must_use]
pub fn from_spec(spec: &LoadSpec<'_>) -> Self {
Self {
files: spec
.sources
.iter()
.filter_map(|source| source.path())
.map(PathBuf::from)
.collect(),
search_name: spec.search.as_ref().map(|search| search.name.to_owned()),
search_directories: spec
.search
.as_ref()
.map(|search| discovery::search_directories(search))
.unwrap_or_default(),
}
}
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum WatchMode {
#[default]
Native,
Poll {
interval: Duration,
},
}