Closed
Description
In a decent number of situations, I end up finding myself writing code like:
if foo {
Some(bar)
} else {
None
}
This happens especially in closures passed to Iterator::filter_map
, but I also frequently find that I want this in .and_then
(e.g., on futures). For cases like these, it'd be very handy to have a concise way of turning booleans into Option
s. For example:
impl bool {
fn map_true<T>(&self, on_true: T) -> Option<T> { if *self { Some(on_true) } else { None }}
fn map_false<T>(&self, on_true: T) -> Option<T> { if *self { None } else { Some(on_true) }}
}
There could also be closure variants of this for cases where the T
is expensive to construct, but in my experience those cases are rarer. That would let the code above become:
foo.map_true(bar)
The name could of course be bikeshed (if_true
?), but I think this is a pretty versatile and useful shorthand!