shakespeare 0.0.1

An actor framework
Documentation
use std::any::Any;

use tokio::sync::mpsc::*;

#[shakespeare::actor]
mod Actor {
	struct ActorState {
		sender: UnboundedSender<usize>,
	}
	#[shakespeare::performance(canonical)]
	impl Role for ActorState {
		fn speak(&mut self, val: usize) {
			self.sender.send(val).unwrap();
		}
	}

	fn catch(_thing: Box<dyn Any + Send>) -> Box<dyn Any + Send> {
		_thing
	}
}

#[tokio::test]
async fn main() {
	let (sender, mut recv) = tokio::sync::mpsc::unbounded_channel();
	let olaf = ActorState { sender };
	let shakespeare::ActorSpawn { actor, .. } = ActorState::start(olaf);
	actor.speak(40).await.unwrap();
	assert_eq!(recv.recv().await.unwrap(), 40);
}