puppet 0.4.0

A simple actor framework which uses no dynamic dispatch or boxing.
Documentation
use puppet::{puppet_actor, ActorMailbox, Executor, Message};
use std::future::Future;

pub struct MyActor;

#[puppet_actor]
impl MyActor {
    #[puppet]
    async fn on_say_hello(&self, msg: SayHello) -> String {
        format!("Hello, {}!", msg.name)
    }
}

pub struct SayHello {
    name: String,
}
impl Message for SayHello {
    type Output = String;
}

pub struct CustomExecutor;
impl Executor for CustomExecutor {
    fn spawn(&self, fut: impl Future<Output = ()> + Send + 'static) {
        tokio::spawn(fut);
    }
}

#[tokio::test]
async fn run_actor_with_custom_executor() {
    let actor = MyActor;
    let mailbox: ActorMailbox<MyActor> = actor.spawn_actor_with("demo", 100, CustomExecutor).await;

    let message = SayHello {
        name: "Harri".to_string(),
    };
    let response = mailbox.send(message).await;
    println!("Got message back! {}", response);
}