Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/justinrubek/async-watcher

A file notification library for tokio
https://github.com/justinrubek/async-watcher

async file-watcher flake nix nix-flake rust

Last synced: 4 months ago
JSON representation

A file notification library for tokio

Awesome Lists containing this project

README

        

# async-watcher

[github](https://github.com/justinrubek/async-watcher)
[crates.io](https://crates.io/crates/async-watcher)
[docs.rs](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"
```