From 4f0bc3e8d3e18009cf2ce7d4b482b182c62ae76d Mon Sep 17 00:00:00 2001 From: Gavrilikhin Daniil Date: Sat, 6 May 2023 22:58:08 +0800 Subject: [PATCH] Add `ensure!` support --- src/eyreish/macros.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/eyreish/macros.rs b/src/eyreish/macros.rs index 90a0161..2d54ecc 100644 --- a/src/eyreish/macros.rs +++ b/src/eyreish/macros.rs @@ -105,6 +105,19 @@ macro_rules! bail { /// # Ok(()) /// # } /// ``` +/// +/// ``` +/// use miette::{ensure, Result, Severity}; +/// +/// fn divide(x: f64, y: f64) -> Result { +/// ensure!( +/// y.abs() >= 1e-3, +/// "dividing by value close to 0", +/// severity = Severity::Warning +/// ); +/// Ok(x / y) +/// } +/// ``` #[macro_export] macro_rules! ensure { ($cond:expr, $msg:literal $(,)?) => { @@ -117,6 +130,11 @@ macro_rules! ensure { return $crate::private::Err($crate::miette!($err)); } }; + ($cond:expr, $fmt:expr $(, $key:ident = $value:expr)* $(,)?) => { + if !$cond { + return $crate::private::Err($crate::miette!($fmt, $($key = $value),*)); + } + }; ($cond:expr, $fmt:expr, $($arg:tt)*) => { if !$cond { return $crate::private::Err($crate::miette!($fmt, $($arg)*));