use cooper::Actor;
#[derive(Clone)]
pub struct UniqueId {
actor: Actor<u32>,
}
impl UniqueId {
pub fn new() -> Self {
Self { actor: Actor::new() }
}
pub async fn get_unique_id(&self) -> u32 {
self.actor.call(|state| Box::pin(async move {
*state += 1;
*state
})).await
}
}
fn main() {
let actor = UniqueId::new();
let h = smol::spawn(async move {
let n = actor.get_unique_id().await;
println!("ID: {}", n);
assert_eq!(n, 1);
let n = actor.get_unique_id().await;
println!("ID: {}", n);
assert_eq!(n, 2);
let n = actor.get_unique_id().await;
println!("ID: {}", n);
assert_eq!(n, 3);
});
smol::block_on(h);
}