actix 0.5.7

Actor framework for Rust
Documentation
extern crate futures;
#[macro_use]
extern crate actix;

use actix::{msgs, Actor, Addr, Arbiter, Context, Handler, System, Unsync};
use futures::{future, Future};

#[derive(Message)]
struct Empty;

struct EmptyActor;

impl Actor for EmptyActor {
    type Context = Context<Self>;
}

impl Handler<Empty> for EmptyActor {
    type Result = ();

    fn handle(&mut self, _message: Empty, _context: &mut Context<Self>) {}
}

#[test]
#[cfg_attr(feature = "cargo-clippy", allow(unit_cmp))]
fn response_derive_empty() {
    let system = System::new("test");
    let addr: Addr<Unsync, _> = EmptyActor.start();
    let res = addr.send(Empty);

    system.handle().spawn(res.then(|res| {
        match res {
            Ok(result) => assert!(result == ()),
            _ => panic!("Something went wrong"),
        }

        Arbiter::system().do_send(msgs::SystemExit(0));
        future::result(Ok(()))
    }));

    system.run();
}

#[derive(Message)]
#[rtype(result = "Result<usize, ()>")]
struct SumResult(usize, usize);

struct SumResultActor;

impl Actor for SumResultActor {
    type Context = Context<Self>;
}

impl Handler<SumResult> for SumResultActor {
    type Result = Result<usize, ()>;

    fn handle(
        &mut self, message: SumResult, _context: &mut Context<Self>
    ) -> Self::Result {
        Ok(message.0 + message.1)
    }
}

#[test]
pub fn derive_result() {
    let system = System::new("test");
    let addr: Addr<Unsync, _> = SumResultActor.start();
    let res = addr.send(SumResult(10, 5));

    system.handle().spawn(res.then(|res| {
        match res {
            Ok(result) => assert!(result == Ok(10 + 5)),
            _ => panic!("Something went wrong"),
        }

        Arbiter::system().do_send(actix::msgs::SystemExit(0));
        future::result(Ok(()))
    }));

    system.run();
}

#[derive(Message)]
#[rtype(usize)]
struct SumOne(usize, usize);

struct SumOneActor;

impl Actor for SumOneActor {
    type Context = Context<Self>;
}

impl Handler<SumOne> for SumOneActor {
    type Result = usize;

    fn handle(&mut self, message: SumOne, _context: &mut Context<Self>) -> Self::Result {
        message.0 + message.1
    }
}

#[test]
pub fn response_derive_one() {
    let system = System::new("test");
    let addr: Addr<Unsync, _> = SumOneActor.start();
    let res = addr.send(SumOne(10, 5));

    system.handle().spawn(res.then(|res| {
        match res {
            Ok(result) => assert!(result == 10 + 5),
            _ => panic!("Something went wrong"),
        }

        Arbiter::system().do_send(actix::msgs::SystemExit(0));
        future::result(Ok(()))
    }));

    system.run();
}