use std::path::PathBuf;
use std::time::Duration;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
mod group;
mod target;
mod watcher;
mod worker;
pub use group::WatcherGroup;
pub use watcher::Watcher;
#[cfg(feature = "stream")]
pub use watcher::EventStream;
#[derive(thiserror::Error, Debug)]
pub enum SignalError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Notify error: {0}")]
Notify(#[from] notify::Error),
#[error("Invalid configuration: {0}")]
Config(String),
#[cfg(feature = "match")]
#[error("Glob pattern error: {0}")]
Glob(#[from] globset::Error),
}
pub type Result<T> = std::result::Result<T, SignalError>;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum Target {
File(PathBuf),
Directory(PathBuf),
Filtered {
path: PathBuf,
include: Vec<String>,
exclude: Vec<String>,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Config {
pub debounce: Duration,
pub coalesce: bool,
pub ignore_hidden: bool,
pub listen_events: Option<Vec<EventKind>>,
}
impl Default for Config {
fn default() -> Self {
Self {
debounce: Duration::from_millis(500),
coalesce: true,
ignore_hidden: true,
listen_events: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum EventKind {
Create,
Modify,
Remove,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Event {
pub paths: Vec<PathBuf>,
pub kind: EventKind,
}