Skip to content
/ notify Public
forked from notify-rs/notify

🔭 Cross-platform filesystem notification library for Rust.

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.ARTISTIC
Notifications You must be signed in to change notification settings

Awfa/notify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Notify

Crate version Crate license Crate download count

Appveyor (Windows) Travis (Linux and macOS)

Code of Conduct Documentation

Cross-platform filesystem notification library for Rust.

As used by: cargo watch, cobalt, handlebars-iron, rdiff, docket, watchexec, and timetrack. (Want to be added to this list? Open a pull request!)

Version Next status and progress: branch next.

As a clarification: version 4 is not "frozen"! I'm just not actively spending time on it. (Originally I thought that Version Next or "5" would take less time to get out, so I prepared for not doing anything with Version 4 anymore, but it has now been clear for a while that the finish line for Version Next is quite far away still.) I do accept pull requests for fixes and features, and would even consider breaking changes with enough justification. Do contribute, please!

Installation

[dependencies]
notify = "4.0.0"

Usage

extern crate notify;

use notify::{RecommendedWatcher, Watcher, RecursiveMode};
use std::sync::mpsc::channel;
use std::time::Duration;

fn watch() -> notify::Result<()> {
    // Create a channel to receive the events.
    let (tx, rx) = channel();

    // Automatically select the best implementation for your platform.
    // You can also access each implementation directly e.g. INotifyWatcher.
    let mut watcher: RecommendedWatcher = try!(Watcher::new(tx, Duration::from_secs(2)));

    // Add a path to be watched. All files and directories at that path and
    // below will be monitored for changes.
    try!(watcher.watch("/home/test/notify", RecursiveMode::Recursive));

    // This is a simple loop, but you may want to use more complex logic here,
    // for example to handle I/O.
    loop {
        match rx.recv() {
            Ok(event) => println!("{:?}", event),
            Err(e) => println!("watch error: {:?}", e),
        }
    }
}

fn main() {
    if let Err(e) = watch() {
        println!("error: {:?}", e)
    }
}

Platforms

  • Linux / Android: inotify
  • macOS: FSEvents
  • Windows: ReadDirectoryChangesW
  • All platforms: polling

FSEvents

Due to the inner security model of FSEvents (see FileSystemEventSecurity), some event cannot be observed easily when trying to follow files that do not belong to you. In this case, reverting to the pollwatcher can fix the issue, with a slight performance cost.

Todo

Further development happens on the next branch for version 5. Development for version 4 (this version) is frozen: there will be no new features, only bug fixes and documentation updates.

Origins

Inspired by Go's fsnotify and Node.js's Chokidar, born out of need for cargo watch, and general frustration at the non-existence of C/Rust cross-platform notify libraries.

Written by Félix Saparelli and awesome contributors, and released in the Public Domain using the Creative Commons Zero Declaration.

Note that licensing is changed from version 5 to Artistic 2.0.

About

🔭 Cross-platform filesystem notification library for Rust.

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.ARTISTIC

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 99.1%
  • Shell 0.9%