if_none/
lib.rs

1// SPDX-FileCopyrightText: The if-none authors
2// SPDX-License-Identifier: MPL-2.0
3
4#![warn(rust_2018_idioms)]
5#![warn(rust_2021_compatibility)]
6#![warn(missing_debug_implementations)]
7#![warn(missing_docs)]
8#![warn(unreachable_pub)]
9#![warn(unsafe_code)]
10#![warn(clippy::pedantic)]
11#![warn(rustdoc::broken_intra_doc_links)]
12#![cfg_attr(not(test), deny(clippy::panic_in_result_fn))]
13#![cfg_attr(not(debug_assertions), deny(clippy::used_underscore_binding))]
14
15//! Early break/continue/return if an optional expression evaluates to `None`.
16
17pub mod docs {
18    //! Documentation and specification
19
20    // TODO: README.md does not contain any Rust code blocks!?
21    #![allow(rustdoc::invalid_rust_codeblocks)]
22    #![doc = include_str!("../README.md")]
23}
24
25/// Break if an optional expression evaluates to `None`.
26#[macro_export]
27macro_rules! if_none_break {
28    ($var:expr) => {
29        if let Some(some) = $var {
30            some
31        } else {
32            break;
33        }
34    };
35}
36
37/// Continue if an optional expression evaluates to `None`.
38#[macro_export]
39macro_rules! if_none_continue {
40    ($var:expr) => {
41        if let Some(some) = $var {
42            some
43        } else {
44            continue;
45        }
46    };
47}
48
49/// Return if an optional expression evaluates to `None`.
50#[macro_export]
51macro_rules! if_none_return {
52    ($var:expr) => {
53        if let Some(some) = $var {
54            some
55        } else {
56            return;
57        }
58    };
59}
60
61/// Return a residual value if an optional expression evaluates to `None`.
62#[macro_export]
63macro_rules! if_none_return_with {
64    ($var:expr, $ret:expr) => {
65        if let Some(some) = $var {
66            some
67        } else {
68            return $ret;
69        }
70    };
71}
72
73/// Break if a `Result` expression evaluates to `Err`.
74#[macro_export]
75macro_rules! if_err_break {
76    ($var:expr) => {
77        if let ::core::result::Result::Ok(some) = $var {
78            some
79        } else {
80            break;
81        }
82    };
83}
84
85/// Continue if a `Result` expression evaluates to `Err`.
86#[macro_export]
87macro_rules! if_err_continue {
88    ($var:expr) => {
89        if let ::core::result::Result::Ok(some) = $var {
90            some
91        } else {
92            continue;
93        }
94    };
95}
96
97/// Return if a `Result` expression evaluates to `Err`.
98#[macro_export]
99macro_rules! if_err_return {
100    ($var:expr) => {
101        if let ::core::result::Result::Ok(some) = $var {
102            some
103        } else {
104            return;
105        }
106    };
107}
108
109/// Return a residual value if a `Result` expression evaluates to `Err`.
110#[macro_export]
111macro_rules! if_err_return_with {
112    ($var:expr, $ret:expr) => {
113        if let ::core::result::Result::Ok(some) = $var {
114            some
115        } else {
116            return $ret;
117        }
118    };
119}