1个不稳定版本
0.1.0 | 2022年12月14日 |
---|
#17 in #waiting
25KB
422 行
waitforit
从我的 waitfor
应用程序¹中提取出来的功能,用于等待某些事件,包括
- 经过的时间
- 文件(非)存在
- 文件更新(时间戳或文件大小)
- TCP主机:端口(不可用/可用)
- HTTP GET响应代码
- 任意用户自定义(
fn() -> bool
)
用法
waitforit
提供了 Wait
和 Waits
结构体。前者是用户想要等待完成的一些条件(例如,如上所述),后者是其他条件的组合。这两个结构体都公开了两个用于检查其条件的方法
.condition_met() -> bool
检查并(几乎立即)返回条件是否成立。.wait(interval: Duration)
块,直到.condition_met()
为真,每隔interval
检查一次
所有 Wait
条件都可以用 !
否定(或者,当从 Wait
枚举的变体手动构造时,通过指定一个 not:bool
参数)。例如,Wait::Exists
变体检查文件是否存在(即,.wait
将阻塞直到该文件存在)。当否定时,文件不存在时它就成立。
包功能特性
默认情况下,此包包含 ureq
和 url
包以支持发送HTTP请求。这增加了依赖项数量和编译时间,因此如果您希望禁用这些,可以在您的 Cargo.toml 中这样做
waitforit = { version = "0.1.0", default_features = false }
否定
任何Wait
或Waits
值都可以取反
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