trello_to_deck/macros/
spawn.rs

1//
2/// spawns a new actor and sets up bi-directional links
3#[macro_export]
4macro_rules! spawn {
5    ($parent:expr, $actor:expr) => {{
6        tracing::debug!("spawning : {}", $crate::stringify_expr!($actor));
7        let new_actor_ref = kameo::spawn($actor);
8        new_actor_ref.link(&$parent).await;
9        $parent.link(&new_actor_ref).await;
10        tracing::debug!("spawned  : {}", $crate::stringify_expr!($actor));
11        new_actor_ref
12    }};
13}
14
15#[macro_export]
16macro_rules! stringify_expr {
17    ($expr:expr) => {
18        stringify!($expr).lines().collect::<Vec<_>>().join(" ")
19    };
20}
21
22#[test]
23fn remove_line_breaks() {
24    let out = stringify_expr!([
25        "line 1", "line 2", "line 3", "line 1", "line 2", "line 3", "line 1", "line 2", "line 3",
26        "line 1", "line 2", "line 3",
27    ]);
28    let expected = r#"["line 1", "line 2", "line 3", "line 1", "line 2", "line 3", "line 1", "line 2", "line 3", "line 1", "line 2", "line 3",]"#;
29
30    assert_eq!(out, expected);
31}
32
33#[macro_export]
34macro_rules! spawn_in_thread {
35    ($parent:expr, $actor:expr) => {{
36        tracing::debug!("spawning in thread : {}", $crate::stringify_expr!($actor));
37        let new_actor_ref = kameo::actor::spawn_in_thread($actor);
38        new_actor_ref.link(&$parent).await;
39        $parent.link(&new_actor_ref).await;
40        tracing::debug!("spawned  in thread : {}", $crate::stringify_expr!($actor));
41        new_actor_ref
42    }};
43}