unwrap_or

Crates.iounwrap_or
lib.rsunwrap_or
version1.0.1
sourcesrc
created_at2021-12-14 11:18:19.189457
updated_at2023-07-28 15:36:07.905113
descriptionFour easy unwrap Result and Option macros that allow for any inline-scoped code for things like return, continue, and break.
homepage
repositoryhttps://gitlab.com/orourley/unwrap-or
max_upload_size
id497673
size4,517
Stephen Hurley (fiddleplum)

documentation

README

unwrap_or

Unwrap-or provides four macros that allow you to use code in the same scope as the calling function. They are similar to Rust's unwrap_or_else, but the provided code is not in a closure, but in the function itself.

This allows for more flexibility in what you can write. You can have a return, break, or continue statement when an error occurs, without worrying about any complicated return logic to make it happen. You can also directly reference variables in the calling function without having to move them into the closure.

Here's an example of using it:

fn a_function_which_may_fail() -> Result<String, String> {
	Error("There was an error!")
}

fn another_function() -> Result<(), String> {
	let _ok_value = unwrap_ok_or!(a_function_which_may_fail(), error_value, {
		log(error_value);
		return error_value;
	});
	Ok(())
}

The macro above expands to a simple match function:

let _ok_value = match a_function_which_may_fail() {
	Ok(v) => v,
	Err(error_value) => {
		log(error_value);
		return error_value;
	}
}

There are four functions with this syntax:

let ok_value = unwrap_ok_or!(function_returning_result, error_variable_name, code_to_run_on_error);

let error_value = unwrap_err_or!(function_returning_result, ok_variable_name, code_to_run_on_ok);

let some_value = unwrap_some_or!(function_returning_option, code_to_run_on_none);

let none_value = unwrap_none_or!(function_returning_option, some_variable_name, code_to_run_on_some);
Commit count: 4

cargo fmt