A crate to use for defensive programming where context specific defaults are needed.
While using an Option
is preferrably in most circumstances there are situations where a function call
doesn't return a Option
and the Default
of a type isn't helpful either.
You now have the option to wrap this special function call or write something along these lines:
rust
let foo = {
let b = bar();
if b.is_empty() {
Bar {
// set the default values for your context here
}
} else {
b
}
};
Using this crate you can reduce this down to:
rust
let foo = bar().if_empty(Bar { /* ... */ });
In order to take advantage of this feature you have to implement this behavior for your types:
```rust
use if_empty::*;
struct Foo { val: bool, }
impl IfEmpty for Foo { fn ifempty(self, value: Foo) -> Foo { if self.isempty() { value } else { self } } }
```
Once #1 is implemented you can simply use derive
.
The crate provides this functionality for String
and &str
.