xtra 0.6.0

A tiny actor framework
Documentation
use std::time::Duration;

use futures_core::Stream;
use futures_util::stream::repeat;
use futures_util::StreamExt;
use xtra::prelude::*;
use xtra::Error;

#[derive(Default, xtra::Actor)]
struct Greeter;

struct Greet;

impl Handler<Greet> for Greeter {
    type Return = ();

    async fn handle(&mut self, _: Greet, _ctx: &mut Context<Self>) {
        println!("Hello!");
    }
}

#[tokio::main]
async fn main() {
    let addr = xtra::spawn_tokio(Greeter, Mailbox::unbounded());
    greeter_stream(500).forward(addr.into_sink()).await.unwrap();
}

fn greeter_stream(delay: u64) -> impl Stream<Item = Result<Greet, Error>> {
    repeat(Duration::from_millis(delay))
        .then(tokio::time::sleep)
        .map(|_| Ok(Greet))
}