El actor es una entidad que va a procesar distintos tipos de mensaje

extern crate actix;

use actix::{Actor, Context, Handler, System, Message};

//#[derive(Message)]
//#[rtype(result = "String")]
struct SayHello {
    name: String
}

impl Message for SayHello {
    type Result = String;
}

struct Greeter {

}

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

impl Handler<SayHello> for Greeter {
    type Result = String;

    fn handle(&mut self, msg: SayHello, _ctx: &mut Context<Self>) -> Self::Result {
        "Hello ".to_owned() + &msg.name
    }
}

#[actix_rt::main]
async fn main() {
    let addr = Greeter {}.start(); // <- start actor and get its address

    // send message and get future for result
    let res = addr.send(SayHello { name: String::from("world!") }).await;

    println!("{}", res.unwrap());
    System::current().stop();
}