architect_api/utils/
messaging.rs

1//! Traits that describe higher-order primitives over basic component messaging.
2
3pub use uuid::Uuid;
4
5pub trait MaybeRequest {
6    fn request_id(&self) -> Option<Uuid>;
7    fn response_id(&self) -> Option<Uuid>;
8}
9
10#[macro_export]
11macro_rules! match_response {
12    ($pat:pat $(if $guard:expr)? => $result:expr) => {
13        |msg| match msg {
14            $pat $(if $guard)? => Some($result),
15            _ => None
16        }
17    };
18}
19
20#[macro_export]
21macro_rules! expect_response {
22    ($pat:pat $(if $guard:expr)? => $result:expr) => {
23        |msg| match msg {
24            $pat $(if $guard)? => Ok($result),
25            _ => Err(anyhow::anyhow!("unexpected response message")),
26        }
27    };
28}