Crates.io | atticus |
lib.rs | atticus |
version | 0.3.0 |
source | src |
created_at | 2023-05-03 12:23:26.909247 |
updated_at | 2024-04-18 11:06:24.419632 |
description | A mimimal API to create asynchronous actors |
homepage | |
repository | https://github.com/blinking8888/atticus |
max_upload_size | |
id | 855366 |
size | 39,116 |
atticus
: A simple implementation of an actor in tokio
.
Actors provide a way to invoke messages or requests among asynchronous tasks. This avoids the
need to use Arc<Mutex<T>>
instances of an object to be passed around so shared state can be
made. It makes use of channels to exchange data.
Actors aim to clarify ownership data structures.
The main objective of this library is to provide the most basic or minimal implementation of
an actor that can in the tokio
runtime.
There may be future endeavors to make it run in other runtimes as well as no_std
support.
Create an actor by implementing the Actor
trait.
use atticus::{Actor, actor};
use async_trait::async_trait;
struct IntToString;
#[async_trait]
impl Actor for IntToString {
type Request = i32;
type Response = String;
async fn handle(&mut self, request: Self::Request) -> Option<Self::Response> {
Some(request.to_string())
}
}
#[tokio::main(flavor="current_thread")]
async fn main() {
// Spawn the actor
let handle = actor::run(IntToString{}, 1);
// Send a request to convert 5 to String.
let response = handle.requestor.request(5).await;
assert!(response.is_ok());
assert_eq!(response.unwrap(), Some(String::from("5")));
}
This project is licensed under either of
at your option.
The SPDX license identifier for this project is MIT OR Apache-2.0
.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.