Actor framework for building data driven distributed systems

Apache 2.0 license


About

Overclock is an actor model framework inspired by Elixir, enforces supervision tree and interoperability.

Features

Usage

Add overclock to your Cargo.toml: toml [dependencies] overclock = "0.1"

Implement Actor trait

```rust

use overclock::core::*;

// Define your actor struct

[derive(Debug, Serialize, Deserialize, PartialEq, Default)]

struct HelloWorld;

[asynctrait::asynctrait]

impl Actor for HelloWorld where S: SupHandle, { // Temporary state or resources during the actor lifecycle type Data = usize; // Interval channel which will yield Instant every 1000ms; type Channel = IntervalChannel<1000>; async fn init(&mut self, rt: &mut Rt) -> ActorResult { log::info!("HelloWorld: {}", rt.service().status()); let counter = 0; Ok(counter) } async fn run(&mut self, rt: &mut Rt, mut counter: Self::Data) -> ActorResult<()> { log::info!("HelloWorld: {}", rt.service().status()); while let Some(event) = rt.inbox_mut().next().await { if counter == 3 { counter += 1; log::info!("HelloWorld: Received instant {:?}, counter: {}", event, counter); } else { break } } log::info!("HelloWorld: exited its event loop"); Ok(()) } }

[tokio::main]

async fn main() { let runtime = Runtime::fromconfig::().await.expect("Runtime to run"); runtime.blockon().await.expect("Runtime to shutdown gracefully"); }

```

Run the above illustrated example

shel cargo run --features="ron_config"

Contributing

All contributions are welcome!

LICENSE

This project is licensed under either of

COPYRIGHT

Copyright (C) 2022 Louay Kamel
Copyright (C) 2021 IOTA Stiftung