Skip to main content

openinfer_simulator/
macros.rs

1#[macro_export]
2macro_rules! insert_executor {
3    ($exec:expr, { $($name:ident : $value:expr),* $(,)? }) => {
4        $( $exec
5            .insert_dynamic(stringify!($name), $value)
6            .unwrap_or_else(|err| {
7                panic!("insert_executor failed for {}: {}", stringify!($name), err)
8            }); )*
9    };
10}
11
12#[macro_export]
13macro_rules! fetch_executor {
14    ($exec:expr, { $($name:ident $( : $ty:ty )?),* $(,)? }) => {
15        $( $crate::fetch_executor!(@one $exec, $name $(, $ty)?); )*
16    };
17    (@one $exec:expr, $name:ident, $ty:ty) => {
18        let $name: $ty = $exec.fetch::<$ty>(stringify!($name)).unwrap_or_else(|err| {
19            panic!("fetch_executor failed for {}: {}", stringify!($name), err)
20        });
21    };
22    (@one $exec:expr, $name:ident) => {
23        let $name = $exec.fetch(stringify!($name)).unwrap_or_else(|err| {
24            panic!("fetch_executor failed for {}: {}", stringify!($name), err)
25        });
26    };
27}
28
29#[macro_export]
30macro_rules! try_insert_executor {
31    ($exec:expr, { $($name:ident : $value:expr),* $(,)? }) => {{
32        $( $exec.insert_dynamic(stringify!($name), $value)?; )*
33        Ok(())
34    }};
35}
36
37#[macro_export]
38macro_rules! try_fetch_executor {
39    ($exec:expr, { $name:ident $( : $ty:ty )? $(,)? }) => {{
40        $crate::try_fetch_executor!(@one $exec, $name $(, $ty)?)
41    }};
42    (@one $exec:expr, $name:ident, $ty:ty) => {{
43        $exec.fetch::<$ty>(stringify!($name))
44    }};
45    (@one $exec:expr, $name:ident) => {{
46        $exec.fetch(stringify!($name))
47    }};
48}