#wait #delay #http-response #file #condition #waiting #codes

waitforit

一个帮助同步等待某些条件成立的库

1个不稳定版本

0.1.0 2022年12月14日

#17 in #waiting

MIT/Apache

25KB
422

waitforit

从我的 waitfor 应用程序¹中提取出来的功能,用于等待某些事件,包括

  • 经过的时间
  • 文件(非)存在
  • 文件更新(时间戳或文件大小)
  • TCP主机:端口(不可用/可用)
  • HTTP GET响应代码
  • 任意用户自定义(fn() -> bool

用法

waitforit 提供了 WaitWaits 结构体。前者是用户想要等待完成的一些条件(例如,如上所述),后者是其他条件的组合。这两个结构体都公开了两个用于检查其条件的方法

  • .condition_met() -> bool 检查并(几乎立即)返回条件是否成立。
  • .wait(interval: Duration) 块,直到 .condition_met() 为真,每隔 interval 检查一次

所有 Wait 条件都可以用 ! 否定(或者,当从 Wait 枚举的变体手动构造时,通过指定一个 not:bool 参数)。例如,Wait::Exists 变体检查文件是否存在(即,.wait 将阻塞直到该文件存在)。当否定时,文件不存在时它就成立。

包功能特性

默认情况下,此包包含 urequrl 包以支持发送HTTP请求。这增加了依赖项数量和编译时间,因此如果您希望禁用这些,可以在您的 Cargo.toml 中这样做

waitforit = { version = "0.1.0", default_features = false }

否定

任何WaitWaits值都可以取反

let foo_exists = Wait::new_file_exists("foo.txt");
let foo_doesnt_exist = !foo_exists;

这甚至适用于Elapsed变体,这意味着条件将在经过的持续时间之前满足。这与其他值结合使用时可能很有用。例如,在前十秒等待文件更新,如果那样没有发生,则等待文件被删除

let filename = "my_dataset.json"; // assumed that this file exists
let first_10sec = !Wait::new_elapsed_from_duration(Duration::from_secs(10));
let file_updated = Wait::new_file_update(filename);
let file_not_exists = !Wait::new_file_exists(filename);

// either we update the file in the first 10 sec or we wait for it to be deleted
let w = (first_10sec & file_updated) | file_not_exists;
w.wait(Duration::from_secs(1));

待办事项

  • Custom变体扩展为Fn或可能是FnMut
  • 监控正在运行的过程(可能使用sysinfo crate?)

依赖关系

~0–360KB
~10K SLoC