An(other) actor framework for tokio.
Most other actor frameworks use some form of dyn Any
, which is basically telling the compiler, "screw your type checking, I have Box
es".
Instead of using dynamic dispatch, we generate and enum that contains all possible types of messages an actor will handle. This is done automagically through a derive macro, and is handeled behind-the-scenes, so you technically never have to use the generated enum in your code (see example below).
```rs use chikatetsu::prelude::*;
pub struct Add(i32, i32);
pub struct AddResult(i32);
pub struct Subtract(i32, i32);
pub struct SubtractResult(i32);
/* Generated enums: pub enum MathActorMessages { Add(Add), Subtract(Subtract), }
pub enum MathActorReplies { AddResult(AddResult), SubtractResult(SubtractResult), } */
struct MathActor;
impl Handler
impl Handler
async fn main() { let actor = MathActor.start();
assert_eq!(AddResult(3), actor.send(Add(1, 2)).await);
assert_eq!(SubtractResult(-1), actor.send(Subtract(1, 2)).await);
} ```