#events #notify #watch #notifications #tokio

notify-debouncer-mini

notify mini debouncer for events

9 unstable releases (3 breaking)

0.4.1 Aug 21, 2023
0.4.0 Aug 20, 2023
0.3.0 May 17, 2023
0.2.1 Sep 4, 2022
0.1.3 Aug 17, 2022

#156 in Filesystem

Download history 40014/week @ 2024-01-22 34497/week @ 2024-01-29 34069/week @ 2024-02-05 36297/week @ 2024-02-12 35426/week @ 2024-02-19 32965/week @ 2024-02-26 38105/week @ 2024-03-04 35189/week @ 2024-03-11 34184/week @ 2024-03-18 35928/week @ 2024-03-25 37882/week @ 2024-04-01 37299/week @ 2024-04-08 37898/week @ 2024-04-15 39765/week @ 2024-04-22 41645/week @ 2024-04-29 33953/week @ 2024-05-06

155,559 downloads per month
Used in 59 crates (48 directly)

MIT/Apache

185KB
3K SLoC

Notify debouncer

» Docs

Tiny debouncer for notify. Filters incoming events and emits only one event per timeframe per file.

Features

  • crossbeam enabled by default, for crossbeam channel support.
    This may create problems used in tokio environments. See #380.
    Use something like the following to disable it.
notify-debouncer-mini = { version = "*", default-features = false }

This also passes through to notify as crossbeam-channel feature.

  • serde for serde support of event types, off by default

lib.rs:

Debouncer for notify. Filters incoming events and emits only one event per timeframe per file.

Installation

[dependencies]
notify-debouncer-mini = "0.4.1"

In case you want to select specific features of notify, specify notify as dependency explicitly in your dependencies. Otherwise you can just use the re-export of notify from debouncer-mini.

notify-debouncer-mini = "0.4.1"
notify = { version = "..", features = [".."] }

Examples

See also the full configuration example here.

use notify_debouncer_mini::{notify::*,new_debouncer,DebounceEventResult};

  // Select recommended watcher for debouncer.
  // Using a callback here, could also be a channel.
  let mut debouncer = new_debouncer(Duration::from_secs(2), |res: DebounceEventResult| {
      match res {
          Ok(events) => events.iter().for_each(|e|println!("Event {:?} for {:?}",e.kind,e.path)),
          Err(e) => println!("Error {:?}",e),
      }
  }).unwrap();

  // Add a path to be watched. All files and directories at that path and
  // below will be monitored for changes.
  debouncer.watcher().watch(Path::new("."), RecursiveMode::Recursive).unwrap();

  // note that dropping the debouncer (as will happen here) also ends the debouncer
  // thus this demo would need an endless loop to keep running

Features

The following crate features can be turned on or off in your cargo dependency config:

  • crossbeam enabled by default, adds DebounceEventHandler support for crossbeam channels. Also enables crossbeam-channel in the re-exported notify. You may want to disable this when using the tokio async runtime.
  • serde enables serde support for events.

Caveats

As all file events are sourced from notify, the known problems section applies here too.

Dependencies

~0.5–8.5MB
~61K SLoC