macro_rules! extract {
($nr:expr) => { ... };
($nr:expr, $err:ty) => { ... };
}
Expand description
This macro extract
that works like the ?
operator and can be used in
functions that return a NullableResult
as long as the error type is the same.
It takes a NullableResult
, a Result
, or an Option
. If the input
contains an Ok
or Some
value, the value is extracted and returned,
if it contains an Err
or Null
, the function returns early with the Err
or
Null
wrapped in a new NullableResult
.
fn do_a_thing() -> NullableResult<usize, isize> {
let res = some_other_func();
let number = extract!(res); // <---- this will cause the function to return early
NullableResult::Ok(number as usize + 5)
}
// note that the two functions have different types for their Ok values
fn some_other_func() -> NullableResult<i8, isize> {
NullableResult::Null
}
If the input is an option, it requires a second parameter as a type annotation for converting to a [’NullableResult`]. Hopefully this won’t be necessary in some future version.
fn f() -> NullableResult<usize, isize> {
let opt = Some(4_usize);
let four = extract!(opt, isize);
NullableResult::Ok(four)
}