Theatre

A concise async actor model implementation

See the examples folder to get a sense of how Theatre works.

Accumulator example

```rust use theatre::prelude::*;

[derive(Default)]

struct Accumulator { count: i32, }

impl Actor for Accumulator {}

struct Increment;

impl Message for Increment { type Return = (); }

struct GetCount;

impl Message for GetCount { type Return = i32; }

[async_trait]

impl Handler for Accumulator { async fn handle( &mut self, _msg: Increment, _context: &mut Context, ) -> ::Return { println!("Adding 1"); self.count += 1 } }

[async_trait]

impl Handler for Accumulator { async fn handle( &mut self, _msg: GetCount, _context: &mut Context, ) -> ::Return { self.count } }

[tokio::main]

async fn main() { let mut acc = Accumulator::default().start().await.0;

assert_eq!(0, acc.send(GetCount).await.unwrap());

acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();

println!("Value: {}", acc.send(GetCount).await.unwrap());
assert_eq!(4, acc.send(GetCount).await.unwrap());

}

```