fsevent.rs

  1#[cfg(target_os = "macos")]
  2pub use mac_impl::*;
  3
  4use bitflags::bitflags;
  5use std::path::PathBuf;
  6
  7#[cfg(target_os = "macos")]
  8mod mac_impl;
  9
 10#[derive(Clone, Debug)]
 11pub struct Event {
 12    pub event_id: u64,
 13    pub flags: StreamFlags,
 14    pub path: PathBuf,
 15}
 16
 17// Synchronize with
 18// /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Headers/FSEvents.h
 19bitflags! {
 20  #[derive(Debug, PartialEq, Eq, Clone, Copy)]
 21  #[repr(C)]
 22  pub struct StreamFlags: u32 {
 23    const NONE = 0x00000000;
 24    const MUST_SCAN_SUBDIRS = 0x00000001;
 25    const USER_DROPPED = 0x00000002;
 26    const KERNEL_DROPPED = 0x00000004;
 27    const IDS_WRAPPED = 0x00000008;
 28    const HISTORY_DONE = 0x00000010;
 29    const ROOT_CHANGED = 0x00000020;
 30    const MOUNT = 0x00000040;
 31    const UNMOUNT = 0x00000080;
 32    const ITEM_CREATED = 0x00000100;
 33    const ITEM_REMOVED = 0x00000200;
 34    const INODE_META_MOD = 0x00000400;
 35    const ITEM_RENAMED = 0x00000800;
 36    const ITEM_MODIFIED = 0x00001000;
 37    const FINDER_INFO_MOD = 0x00002000;
 38    const ITEM_CHANGE_OWNER = 0x00004000;
 39    const ITEM_XATTR_MOD = 0x00008000;
 40    const IS_FILE = 0x00010000;
 41    const IS_DIR = 0x00020000;
 42    const IS_SYMLINK = 0x00040000;
 43    const OWN_EVENT = 0x00080000;
 44    const IS_HARDLINK = 0x00100000;
 45    const IS_LAST_HARDLINK = 0x00200000;
 46    const ITEM_CLONED = 0x400000;
 47  }
 48}
 49
 50impl std::fmt::Display for StreamFlags {
 51    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
 52        if self.contains(StreamFlags::MUST_SCAN_SUBDIRS) {
 53            let _d = write!(f, "MUST_SCAN_SUBDIRS ");
 54        }
 55        if self.contains(StreamFlags::USER_DROPPED) {
 56            let _d = write!(f, "USER_DROPPED ");
 57        }
 58        if self.contains(StreamFlags::KERNEL_DROPPED) {
 59            let _d = write!(f, "KERNEL_DROPPED ");
 60        }
 61        if self.contains(StreamFlags::IDS_WRAPPED) {
 62            let _d = write!(f, "IDS_WRAPPED ");
 63        }
 64        if self.contains(StreamFlags::HISTORY_DONE) {
 65            let _d = write!(f, "HISTORY_DONE ");
 66        }
 67        if self.contains(StreamFlags::ROOT_CHANGED) {
 68            let _d = write!(f, "ROOT_CHANGED ");
 69        }
 70        if self.contains(StreamFlags::MOUNT) {
 71            let _d = write!(f, "MOUNT ");
 72        }
 73        if self.contains(StreamFlags::UNMOUNT) {
 74            let _d = write!(f, "UNMOUNT ");
 75        }
 76        if self.contains(StreamFlags::ITEM_CREATED) {
 77            let _d = write!(f, "ITEM_CREATED ");
 78        }
 79        if self.contains(StreamFlags::ITEM_REMOVED) {
 80            let _d = write!(f, "ITEM_REMOVED ");
 81        }
 82        if self.contains(StreamFlags::INODE_META_MOD) {
 83            let _d = write!(f, "INODE_META_MOD ");
 84        }
 85        if self.contains(StreamFlags::ITEM_RENAMED) {
 86            let _d = write!(f, "ITEM_RENAMED ");
 87        }
 88        if self.contains(StreamFlags::ITEM_MODIFIED) {
 89            let _d = write!(f, "ITEM_MODIFIED ");
 90        }
 91        if self.contains(StreamFlags::FINDER_INFO_MOD) {
 92            let _d = write!(f, "FINDER_INFO_MOD ");
 93        }
 94        if self.contains(StreamFlags::ITEM_CHANGE_OWNER) {
 95            let _d = write!(f, "ITEM_CHANGE_OWNER ");
 96        }
 97        if self.contains(StreamFlags::ITEM_XATTR_MOD) {
 98            let _d = write!(f, "ITEM_XATTR_MOD ");
 99        }
100        if self.contains(StreamFlags::IS_FILE) {
101            let _d = write!(f, "IS_FILE ");
102        }
103        if self.contains(StreamFlags::IS_DIR) {
104            let _d = write!(f, "IS_DIR ");
105        }
106        if self.contains(StreamFlags::IS_SYMLINK) {
107            let _d = write!(f, "IS_SYMLINK ");
108        }
109        if self.contains(StreamFlags::OWN_EVENT) {
110            let _d = write!(f, "OWN_EVENT ");
111        }
112        if self.contains(StreamFlags::IS_LAST_HARDLINK) {
113            let _d = write!(f, "IS_LAST_HARDLINK ");
114        }
115        if self.contains(StreamFlags::IS_HARDLINK) {
116            let _d = write!(f, "IS_HARDLINK ");
117        }
118        if self.contains(StreamFlags::ITEM_CLONED) {
119            let _d = write!(f, "ITEM_CLONED ");
120        }
121        write!(f, "")
122    }
123}