kx-utils 0.1.3

Common utils incubator
Documentation
//
/// spawns a new actor and sets up bi-directional links
#[macro_export]
macro_rules! spawn {
    ($parent:expr, $actor:expr) => {{
        tracing::debug!("spawning : {}", $crate::stringify_expr!($actor));
        let new_actor_ref = kameo::spawn($actor);
        new_actor_ref.link(&$parent).await;
        $parent.link(&new_actor_ref).await;
        tracing::debug!("spawned  : {}", $crate::stringify_expr!($actor));
        new_actor_ref
    }};
}

#[macro_export]
macro_rules! stringify_expr {
    ($expr:expr) => {
        stringify!($expr).lines().collect::<Vec<_>>().join(" ")
    };
}

#[test]
fn remove_line_breaks() {
    let out = stringify_expr!([
        "line 1", "line 2", "line 3", "line 1", "line 2", "line 3", "line 1", "line 2", "line 3",
        "line 1", "line 2", "line 3",
    ]);
    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",]"#;

    assert_eq!(out, expected);
}

#[macro_export]
macro_rules! spawn_in_thread {
    ($parent:expr, $actor:expr) => {{
        tracing::debug!("spawning in thread : {}", $crate::stringify_expr!($actor));
        let new_actor_ref = kameo::actor::spawn_in_thread($actor);
        new_actor_ref.link(&$parent).await;
        $parent.link(&new_actor_ref).await;
        tracing::debug!("spawned  in thread : {}", $crate::stringify_expr!($actor));
        new_actor_ref
    }};
}