Skip to main content

atomr_core/
lib.rs

1//! # atomr-core
2//!
3//! Idiomatic Rust actor runtime — typed actors, hierarchical supervision,
4//! dispatchers, mailboxes, scheduler, dead letters, and event streams.
5//!
6//! ## Quick start
7//!
8//! ```no_run
9//! use atomr_core::prelude::*;
10//!
11//! #[derive(Default)]
12//! struct Echo;
13//!
14//! #[async_trait::async_trait]
15//! impl Actor for Echo {
16//!     type Msg = String;
17//!     async fn handle(&mut self, _ctx: &mut Context<Self>, msg: String) {
18//!         println!("echo: {msg}");
19//!     }
20//! }
21//!
22//! # async fn run() -> Result<(), Box<dyn std::error::Error>> {
23//! let sys = ActorSystem::create("S", atomr_config::Config::reference()).await?;
24//! let echo = sys.actor_of(Props::create(Echo::default), "echo")?;
25//! echo.tell("hi".to_string());
26//! sys.terminate().await;
27//! # Ok(()) }
28//! ```
29
30#![forbid(unsafe_code)]
31#![deny(rust_2018_idioms)]
32
33pub mod actor;
34pub mod dispatch;
35#[macro_use]
36mod fsm_macro;
37pub mod event;
38pub mod io;
39pub mod pattern;
40pub mod routing;
41pub mod serialization;
42pub mod supervision;
43pub mod util;
44
45pub mod prelude {
46    pub use crate::actor::{
47        Actor, ActorPath, ActorRef, ActorSystem, Address, Context, Props, UntypedActorRef,
48    };
49    pub use crate::pattern::{ask, pipe_to};
50    pub use crate::supervision::{
51        Directive, OneForOneStrategy, SupervisionError, SupervisorOf, SupervisorStrategy,
52    };
53    pub use async_trait::async_trait;
54    pub use atomr_config::Config;
55}