Simple and small actor model implementation.
```rust use std::sync::mpsc::{channel, Sender};
extern crate uppercut; use uppercut::api::{AnyActor, Envelope, AnySender}; use uppercut::core::System; use uppercut::pool::ThreadPool;
struct Message(usize, Sender
struct State;
impl AnyActor for State {
// in uppercut actor is not type-safe by definition: anyone can send anything to anyone
fn receive(&mut self, envelope: Envelope, sender: &mut dyn AnySender) {
// down-casting is required to do something meaningful with the envelope
if let Some(msg) = envelope.message.downcastref::
fn main() { // default config needs 6 threads: 1 main, 4 workers and 1 utility let pool = ThreadPool::new(6);
let sys = System::default();
let run = sys.run(&pool).unwrap();
// spawn actor in the default state at address "x"
run.spawn_default::<State>("x");
let (tx, rx) = channel();
// send message to actor ('from' address is an empty string)
run.send("x", Envelope::of(Message(42, tx), ""));
rx.recv().unwrap();
run.shutdown();
} ```