# async-watcher
[](https://github.com/justinrubek/async-watcher)
[](https://crates.io/crates/async-watcher)
[](https://docs.rs/async-watcher)
This is a small library that uses [notify](https://github.com/notify-rs/notify) to implement a file watcher that is debounced.
The debouncing helps ensure you don't get too many events on a single file leading to extra work.
The original use case of this was to watch a directory and rebuild when there are changes.
Without debouncing, a single file could trigger multiple rebuilds.
Instead, `async-watcher` can be used to trigger events after a specific time threshold.
Notify takes care of all of the work, but the debouncing traits weren't async.
`async-watcher` leverages [async-trait](https://github.com/dtolnay/async-trait) to provide an async interface for creating watchers.
See the [examples](./examples) for usage.
## cli
Included is a command line application that can be used to execute a command when notified of changes.
The files to watch are specified with a glob pattern as the first argument.
Subsequent arguments are the command to run and its arguments.
The program is exposed as a nix flake package called `awatch`.
example usage:
```sh
awatch './{crates,Cargo.toml,Cargo.lock}' echo "crates modified"
```