6 releases

0.3.1 Aug 27, 2019
0.3.0 Aug 20, 2019
0.2.2 Aug 19, 2019
0.2.0 Feb 6, 2019
0.1.0 Feb 5, 2019

#1331 in Data structures

Download history 3/week @ 2023-11-20 20/week @ 2023-11-27 16/week @ 2023-12-04 4/week @ 2023-12-11 24/week @ 2023-12-18 16/week @ 2024-01-01 14/week @ 2024-01-08 5/week @ 2024-01-15 13/week @ 2024-01-22 25/week @ 2024-01-29 20/week @ 2024-02-12 11/week @ 2024-02-19 56/week @ 2024-02-26 15/week @ 2024-03-04

102 downloads per month
Used in 6 crates (3 directly)

MIT license

14KB
229 lines

Latest Version Documentation License

This library provides Ensure trait that is useful for objects with unknown initial external state that can be brought to some target state.

This can be seen as TryInto trait for objects with side effects with unknown initial external state and desired target state. For example a file may or may not exist. By implementing Ensure we can call ensure() to create new file only if it did not exist already.

Closures returning CheckEnsureResult that also return closure in CheckEnsureResult::EnsureAction variant automatically implement Ensure trait. Helper function ensure can be used to call ensure() on such closure.

Example

This program will create file only if it does not exist already.

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");
}

No runtime deps