6 个版本

0.3.1 2019年8月27日
0.3.0 2019年8月20日
0.2.2 2019年8月19日
0.2.0 2019年2月6日
0.1.0 2019年2月5日

#1240 in 数据结构

Download history 55/week @ 2024-04-01 5/week @ 2024-04-08 16/week @ 2024-04-15 245/week @ 2024-04-22 6/week @ 2024-04-29 10/week @ 2024-05-06 18/week @ 2024-05-13 19/week @ 2024-05-20 14/week @ 2024-05-27 15/week @ 2024-06-03 10/week @ 2024-06-10 22/week @ 2024-06-17 7/week @ 2024-06-24 38/week @ 2024-07-01 6/week @ 2024-07-08 14/week @ 2024-07-15

66 每月下载
6 个crate中使用 (直接使用3个)

MIT 许可证

14KB
229 代码行

Latest Version Documentation License

此库提供了 Ensure trait,它对于具有未知初始外部状态的对象且可以将其转换为某种目标状态非常有用。

这可以视为具有未知初始外部状态和所需目标状态的具有副作用的对象的 TryInto trait。例如,一个文件可能存在或不存在。通过实现 Ensure,我们可以在文件不存在的情况下创建新文件。

返回 CheckEnsureResult 的闭包,同时也返回在 CheckEnsureResult::EnsureAction 变体中的闭包,将自动实现 Ensure trait。辅助函数 ensure 可以用于调用此类闭包上的 ensure()

示例

此程序仅在文件不存在的情况下创建文件。

use std::path::Path;
use std::fs::File;
use ensure::ensure;
use ensure::CheckEnsureResult::*;

fn main() {
    let path = Path::new("/tmp/foo.txt");

    ensure(|| {
        Ok(if path.exists() {
            Met(())
        } else {
            EnsureAction(|| {
                File::create(&path).map(|file| drop(file))
            })
        })
    }).expect("failed to create file");
}

无运行时依赖