Expand description
For use with 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 an
Option
and the Default
of a type isn’t helpful either.
§Examples
// Converting
let foo = {
let b = bar();
if b.is_empty() {
Bar {
// set the default values for your context here
}
} else {
b
}
};
// into
use if_empty::IfEmpty;
impl IfEmpty for Bar {
fn if_empty(self, value: Self) -> Self {
// implement
}
}
let foo = bar().if_empty(Bar { /* ... */ });
§Implementation
In this example we’re using the obvious is_empty()
function for Foo
but we could also
do more elaborate checks.
use if_empty::IfEmpty;
struct Foo {
val: bool,
}
impl Foo {
fn is_empty(&self) -> bool { !self.val }
}
impl IfEmpty for Foo {
fn if_empty(self, value: Foo) -> Foo {
if self.is_empty() {
value
} else {
self
}
}
}
Traits§
- IfEmpty
- For checking IfEmpty on value semantics
- IfEmpty
Borrowed - For checking IfEmpty on borrowed objects
Derive Macros§
- IfEmpty
- Implement
if_empty
on types withis_empty
functions