use crate::report::ScanReport;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WatchUpdateReason {
Incremental,
FullRescan(FullRescanReason),
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FullRescanReason {
PolicyChanged,
IgnoreInputChanged,
StructuralChange,
IncompletePreviousState,
}
impl WatchUpdateReason {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Incremental => "Incremental",
Self::FullRescan(FullRescanReason::PolicyChanged) => "FullRescan:PolicyChanged",
Self::FullRescan(FullRescanReason::IgnoreInputChanged) => {
"FullRescan:IgnoreInputChanged"
}
Self::FullRescan(FullRescanReason::StructuralChange) => "FullRescan:StructuralChange",
Self::FullRescan(FullRescanReason::IncompletePreviousState) => {
"FullRescan:IncompletePreviousState"
}
}
}
}
impl core::fmt::Display for WatchUpdateReason {
fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
formatter.write_str(self.as_str())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WatchUpdate {
pub report: ScanReport,
pub reason: WatchUpdateReason,
}