#文件观察器 #事件 #实用工具

quadoculars

基于notify-rs的并发、可组合的简单文件观察器,支持快速实时重新加载

6个版本

0.1.40 2021年3月25日
0.1.37 2021年3月8日

#19 in #文件观察器

Apache-2.0

24KB
474

四目望远镜

Crates.io Rust

基于notify-rs的并发、可组合的简单文件观察器。

特性

  • 易于使用单文件和多文件观察器
  • 仅在文件数据发生变化时通知
  • 容错,即使文件被替换也能继续观察,文件不存在时优雅地关闭自身。
  • 为DeserializeToOwned结构提供快速的实时重新加载值。

安装

在您的Cargo.toml中添加quadoculars作为依赖项

quadoculars = "*"

或者

quadoculars = { git = "https://github.com/Ar37-rs/quadoculars.git" }

快速示例

use quadoculars::{Fstate, Watch};
use std::{
    io::Result,
    path::{Path, PathBuf},
    str::FromStr,
    sync::mpsc::channel,
};

fn main() -> Result<()> {
    let file: PathBuf;
    {
        match PathBuf::from_str("filename.extention") {
            Ok(file_) => file = file_,
            _ => file = Path::new("otherfilename.otherextension").to_path_buf(),
        }
    }

    let (tx, rx) = channel();

    while let Ok(file_exist) = Watch::new().set_timeout(0.6).single_file(&file,tx.clone()) {
        if !file_exist {
            println!("no file to watch");
            break;
        } else {
            println!("watching... {:?}", file)
        }
        for state in &rx {
            match state {
                Fstate::Changed(file) => {
                    println!("{:?} changed", file);
                    // do something...
                }
                Fstate::NotFound(file) => {
                    // handle something...
                    break;
                }
            }
        }
    }
    Ok(())
}

更多示例

关于观察多个文件和实时重新加载值的示例可以在这里找到。

依赖项

~0.7–12MB
~86K SLoC