Skip to main content

hashiverse_lib/tools/
anyhow_asserts.rs

1//! This module provides a series of asserts that interact nicely with raising anyhow errors inside try blocks.
2
3#[macro_export]
4macro_rules! anyhow_assert_eq {
5    ($expected:expr, $actual:expr) => {{
6        let expected_val = &($expected);
7        let actual_val = &($actual);
8        if expected_val != actual_val {
9            let msg = format!("expected={:?} actual={:?}", expected_val, actual_val);
10            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
11                anyhow::bail!(msg);
12            };
13            perform_assert_fail(msg)?;
14        }
15    }};
16
17    ($expected:expr, $actual:expr,) => {
18        anyhow_assert_eq!($expected, $actual)
19    };
20
21    ($expected:expr, $actual:expr, $($arg:tt)*) => {{
22        let expected_val = &($expected);
23        let actual_val = &($actual);
24        if expected_val != actual_val {
25            let msg = format!("{}: expected={:?} actual={:?}", format_args!($($arg)*), expected_val, actual_val);
26            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
27                anyhow::bail!(msg);
28            };
29            perform_assert_fail(msg)?;
30        }
31    }};
32}
33
34#[macro_export]
35macro_rules! anyhow_assert {
36    ($cond:expr) => {{
37        if !($cond) {
38            let msg = format!("assertion failed: {}", stringify!($cond));
39            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
40                anyhow::bail!(msg);
41            };
42            perform_assert_fail(msg)?;
43        }
44    }};
45
46    ($cond:expr,) => {
47        anyhow_assert!($cond)
48    };
49
50    ($cond:expr, $($arg:tt)*) => {{
51        if !($cond) {
52            let msg = format!("{}", format_args!($($arg)*));
53            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
54                anyhow::bail!(msg);
55            };
56            perform_assert_fail(msg)?;
57        }
58    }};
59}
60
61#[macro_export]
62macro_rules! anyhow_assert_ge {
63    ($lhs:expr, $rhs:expr) => {{
64        let lhs_val = &($lhs);
65        let rhs_val = &($rhs);
66        if lhs_val < rhs_val {
67            let msg = format!("expected {:?} >= {:?}", lhs_val, rhs_val);
68            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
69                anyhow::bail!(msg);
70            };
71            perform_assert_fail(msg)?;
72        }
73    }};
74
75    ($lhs:expr, $rhs:expr,) => {
76        anyhow_assert_ge!($lhs, $rhs)
77    };
78
79    ($lhs:expr, $rhs:expr, $($arg:tt)*) => {{
80     let lhs_val = &($lhs);
81        let rhs_val = &($rhs);
82        if lhs_val < rhs_val {
83            let msg = format!("{}: expected {:?} >= {:?}", format_args!($($arg)*), lhs_val, rhs_val);
84            let perform_assert_fail = |msg: String| -> anyhow::Result<()> {
85                anyhow::bail!(msg);
86            };
87            perform_assert_fail(msg)?;
88        }
89    }};
90}