| Crates.io | try_opt |
| lib.rs | try_opt |
| version | 0.2.0 |
| created_at | 2015-07-05 13:43:13.223704+00 |
| updated_at | 2019-01-22 17:45:25.736615+00 |
| description | [deprecated] Like try!, but for Option |
| homepage | |
| repository | https://github.com/crumblingstatue/try_opt |
| max_upload_size | |
| id | 2536 |
| size | 3,691 |
Rust now allows the ? operator to be used on Option. The try_opt! example further below
can be rewritten as the following:
use std::collections::HashMap;
fn map_add_checked(map: &HashMap<&str, i32>, lhs: &str, rhs: &str) -> Option<i32> {
let lhs = map.get(lhs)?;
let rhs = map.get(rhs)?;
lhs.checked_add(*rhs)
}
fn main() {
let mut map = HashMap::new();
map.insert("foo", 2);
map.insert("bar", 4);
map.insert("baz", 12);
assert_eq!(map_add_checked(&map, "foo", "bar"), Some(6));
assert_eq!(map_add_checked(&map, "baz", "qux"), None);
}
Helper macro for unwrapping Option values while returning early with an
error if the value of the expression is None. Can only be used in
functions that return Option because of the early return of None that
it provides.
#[macro_use]
extern crate try_opt;
use std::collections::HashMap;
fn map_add_checked(map: &HashMap<&str, i32>, lhs: &str, rhs: &str) -> Option<i32> {
let lhs = try_opt!(map.get(lhs));
let rhs = try_opt!(map.get(rhs));
lhs.checked_add(*rhs)
}
fn main() {
let mut map = HashMap::new();
map.insert("foo", 2);
map.insert("bar", 4);
map.insert("baz", 12);
assert_eq!(map_add_checked(&map, "foo", "bar"), Some(6));
assert_eq!(map_add_checked(&map, "baz", "qux"), None);
}