From my waitfor
app¹, this crate extracts out the functionality to wait for certain events, including:
fn() -> bool
)waitforit
exposes the Wait
and Waits
structs. The former is some condition (eg, as above) that the user wants to wait to complete. The latter is simply a combination other conditions. Both structs expose two methods for checking their conditions:
.condition_met() -> bool
checks and (nearly immediately) returns whether the condition is met..wait(interval: Duration)
blocks until .condition_met()
is true, checking every interval
All Wait
conditions can be !
negated (or, when manually constructed from the Wait
enum's variant's, by specifying a not:bool
parameter). For example, the Wait::Exists
variant checks for the existence of a file (ie, .wait
will block until that file exists). When negated, it is satisfied when the file doesn't exist.
By default, this crate includes the ureq
and url
crates to support making HTTP requests. This increases the number of dependencies and compile time, so if you wish to disable these, you can do so in your Cargo.toml:
toml
waitforit = { version = "0.1.0", default_features = false }
Any Wait
or Waits
value can be negated:
rust
let foo_exists = Wait::new_file_exists("foo.txt");
let foo_doesnt_exist = !foo_exists;
This even applies to the Elapsed
variant which means the condition will be met until the elapsed duration. This may prove useful when combining with other values. For example, wait for a file to be updated in the first ten seconds, and if that doesn't happen, then wait for the file to be deleted:
```rust let filename = "mydataset.json"; // assumed that this file exists let first10sec = !Wait::newelapsedfromduration(Duration::fromsecs(10)); let fileupdated = Wait::newfileupdate(filename); let filenotexists = !Wait::newfile_exists(filename);
// either we update the file in the first 10 sec or we wait for it to be deleted let w = (first10sec & fileupdated) | filenotexists; w.wait(Duration::from_secs(1)); ```
Custom
variant to be Fn
or possibly FnMut
?sysinfo
crate?)