Crates.io | ensure |
lib.rs | ensure |
version | 0.3.1 |
source | src |
created_at | 2019-02-05 18:02:33.957137 |
updated_at | 2019-08-27 15:56:31.548047 |
description | Ensure target state of an object |
homepage | |
repository | https://github.com/jpastuszek/ensure |
max_upload_size | |
id | 112946 |
size | 14,536 |
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.
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");
}