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 Options. 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:
The name could of course be bikeshed (if_true?), but I think this is a pretty versatile and useful shorthand!
In a decent number of situations, I end up finding myself writing code like:
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 intoOptions. For example:There could also be closure variants of this for cases where the
Tis expensive to construct, but in my experience those cases are rarer. That would let the code above become:The name could of course be bikeshed (
if_true?), but I think this is a pretty versatile and useful shorthand!