1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//! # Xtor: An handler async actor framework.
//! [](https://github.com/starcoinorg/xtor/actions/workflows/rust.yml)
//!
//! ## Key features
//! - small: very small codebase
//! - async: allow you to write async code in your actor
//! - full featured: we have built-in types such as `Supervisor` `Broker`
//! `Caller` and so on
//! - both dynamic and fast: typed message and weak typed event.
//!
//! ## usage
//!
//! add `xtor` to your library
//! ```sh
//! cargo add xtor
//! ```
//!
//! write some code
//! ```
//! use anyhow::Result;
//! use async_trait::async_trait;
//! use xtor::actor::{context::Context, message::Handler, runner::Actor};
//!
//! // first define actor
//! struct HelloActor;
//! impl Actor for HelloActor {}
//!
//! // then define message
//! #[xtor::message(result = "()")]
//! #[derive(Debug)]
//! struct Hello;
//!
//! // then impl the handler
//! #[async_trait]
//! impl Handler<Hello> for HelloActor {
//! async fn handle(&self, _ctx: &Context, msg: Hello) -> Result<()> {
//! println!("{:?} received", &msg);
//! Ok(())
//! }
//! }
//!
//! // main will finish when all actors died out.
//! #[xtor::main]
//! async fn main() -> Result<()> {
//! let hello_actor = HelloActor;
//! let hello_actor_address = hello_actor.spawn().await?;
//! hello_actor_address.call::<HelloActor, Hello>(Hello).await
//! }
//! ```
//!
//! ## More Examples?
//! please take a look at the examples folder in the [repository](https://github.com/starcoinorg/xtor).
use ACTOR_ID_HANDLE;
use Future;
pub use ;
/// the core of xtor
/// default implemention of broker, supervisor and so on.
pub use *;
/// exports to the derive macro
pub async
/// exports to the derive macro