JelteF/derive_more

An attribute for `TryUnwrap` to simplify its return type

rassvet2 opened this issue · 1 comments

I made TryUnwrap returns a dedicated error as Err, but in practice, I guess there are cases where this is not desired. Sometimes, you will only be interested in the input value returned. (And it's exactly me)
I think it's a good idea to add an attribute such as #[try_unwrap(simple_return_type)] to make try_unwrap_thing returns Result<(A, B, ...), Self> instead of Result<(A, B, ...), TryUnwrapError<Self>>.

Example

#[derive(TryUnwrap)]
#[try_unwrap(ref, simple_return_type)]
// or #[try_unwrap(simple_error)]
// or #[try_unwrap(return_type = simple)]
// or... #[try_unwrap(return_type = detailed)] to enable TryUnwrapError?
enum Maybe<T> {
    Just(T),
    Nothing
}

fn main() {
    match Maybe::Just("lorem").try_unwrap_nothing() {
        Ok(()) => println!("nothing"),
        Err(val) => println!("{}", val.try_unwrap_just().unwrap()), // => "lorem"
    }
}
JelteF commented

Is it really that big of a deal to access the .input field of the error? I'm not opposed to this though feel free to propose a PR.