Skip to main content

elfo_core/
macros.rs

1#[macro_export]
2macro_rules! assert_msg {
3    ($envelope:expr, $pat:pat) => {{
4        let envelope = &$envelope;
5        let message = envelope.message();
6
7        // TODO: use `msg!` to support multiple messages in a pattern.
8        #[allow(unreachable_patterns)]
9        match &message.downcast_ref() {
10            Some($pat) => {}
11            _ => panic!(
12                "\na message doesn't match a pattern\npattern: {}\nmessage: {message:#?}\n",
13                stringify!($pat),
14            ),
15        }
16    }};
17}
18
19#[macro_export]
20macro_rules! assert_msg_eq {
21    ($envelope:expr, $expected:expr) => {{
22        let envelope = &$envelope;
23
24        let Some(actual) = envelope.message().downcast_ref() else {
25            panic!("unexpected message: {:#?}", envelope.message());
26        };
27        let expected = &$expected;
28
29        fn unify<T>(_rhs: &T, _lhs: &T) {}
30        unify(actual, expected);
31
32        assert_eq!(actual, expected);
33    }};
34}
35
36macro_rules! cfg_network {
37    // Force `{..}` to make rustfmt work.
38    ({$($item:item)*}) => {
39        $(
40            #[cfg(feature = "network")]
41            $item
42        )*
43    }
44}