Macro execute
macro_rules! execute {
(
actors: [
$($actor_type:ty $(: $init_context:expr )? ),* $(,)?
] $(,)?
) => { ... };
}Expand description
Execute a given set of actors without heap allocation.
use core::fmt::Debug;
use veecle_os_runtime::single_writer::{Reader, Writer};
use veecle_os_runtime::{Never, Storable};
#[derive(Debug, Clone, PartialEq, Eq, Default, Storable)]
pub struct Ping {
value: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Storable)]
pub struct Pong {
value: u32,
}
#[veecle_os_runtime::actor]
async fn ping_actor(mut ping: Writer<'_, Ping>, mut pong: Reader<'_, Pong>) -> Never {
let mut value = 0;
ping.write(Ping { value }).await;
loop {
ping.write(Ping { value }).await;
value += 1;
pong.read_updated(|pong| {
println!("Pong: {}", pong.value);
}).await;
}
}
#[veecle_os_runtime::actor]
async fn pong_actor(mut pong: Writer<'_, Pong>, mut ping: Reader<'_, Ping>) -> Never {
loop {
let ping = ping.read_updated_cloned().await;
println!("Ping: {}", ping.value);
let data = Pong { value: ping.value };
pong.write(data).await;
}
}
futures::executor::block_on(
veecle_os_runtime::execute! {
actors: [PingActor, PongActor],
}
)