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
//! Traits that describe higher-order primitives over basic component messaging.

pub use uuid::Uuid;

pub trait MaybeRequest {
    fn request_id(&self) -> Option<Uuid>;
    fn response_id(&self) -> Option<Uuid>;
}

#[macro_export]
macro_rules! match_response {
    ($pat:pat $(if $guard:expr)? => $result:expr) => {
        |msg| match msg {
            $pat $(if $guard)? => Some($result),
            _ => None
        }
    };
}

#[macro_export]
macro_rules! expect_response {
    ($pat:pat $(if $guard:expr)? => $result:expr) => {
        |msg| match msg {
            $pat $(if $guard)? => Ok($result),
            _ => Err(anyhow::anyhow!("unexpected response message")),
        }
    };
}