## Ascolt
[](https://crates.io/crates/ascolt)
[](https://docs.rs/ascolt)
[](https://github.com/sterrlia/ascolt/actions)
[](https://deps.rs/crate/ascolt)

Async runtime-agnostic actor framework
### Features
+ Clean type-safe syntax
+ Async support
+ Both unbounded and bounded channels supported
+ Handler errors can trigger actor stop, forced stop, or restart (behavior is customizable)
+ No heavy macros
+ No unsafe code
### Examples
``` rust
let first_actor = FirstActor {};
let (first_actor_tx, first_actor_rx) = create_channel(100);
let second_actor = SecondActor { first_actor_tx };
let (second_actor_tx, second_actor_rx) = create_channel(100);
// if using tokio runtime
tokio::spawn(start_actor(actor, first_actor_rx));
tokio::spawn(start_actor(second_actor, second_actor_rx));
first_actor_tx.tell(SomeRequest { number: 3 })
.await?; // fire-and-forget
let result = second_actor_tx
.ask(SecondActorCalcRequest(10))
.await?; // request-response
println!("Result: {}", result.0);
```
More examples located at examples directory.
## What can be added
- Panic isolation
- Backpressure management
- Supervisor for controlling multiple actors
- Dependency graph (e.g., automatically shut down actors when the actors they depend on stop)
- Actor communication over the network
### Alternatives
- [Kameo](https://github.com/tqwewe/kameo)
- [Coerce](https://github.com/LeonHartley/Coerce-rs)
- [Ractor](https://github.com/slawlor/ractor)
- [Actix](https://github.com/actix/actix)