1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// SPDX-License-Identifier: MIT
//
// Copyright (c) 2022 Robert Oleynik

/// Shorthand to handle `Option<T>` and `Result<T, E>`
///
/// # Usage
///
/// ## Handling `Option<T>`
///
/// ```rust
/// handle_err!(/* Some expression */, None => /* Some handle */);
/// // Shorthand for
/// let result = match /* Some expression */ {
///     Some(result) => result,
///     None => /* Some handle */,
/// };
/// ```
///
/// ## Handling `Result<T, E>`
///
/// ```rust
/// handle_err!(/* Some expression */, err => /* Some handle */);
/// // Shorthand for
/// let result = match /* Some expression */ {
///     Ok(result) => result,
///     Err(err) => /* Some handle */,
/// };
/// ```
#[macro_export]
macro_rules! handle_err {
	( $e:expr, None => $handle:expr ) => {
		match $e {
			Some(result) => result,
			None => $handle,
		}
	};
	( $e:expr, $err:ident => $handle:expr ) => {
		match $e {
			Ok(result) => result,
			Err($err) => $handle,
		}
	};
}