rill-engine 0.41.0

The RillRate Protocol async engine.
Documentation
pub mod parcel;

use crate::actors::engine::RillEngine;
use anyhow::Error;
use async_trait::async_trait;
use meio::{Actor, Context, InterruptedBy, StartedBy};

pub struct RillPool {}

impl RillPool {
    #[allow(clippy::new_without_default)]
    pub fn new() -> Self {
        Self {}
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Group {
    ParcelStream,
    Tasks,
}

impl Actor for RillPool {
    type GroupBy = Group;
}

#[async_trait]
impl StartedBy<RillEngine> for RillPool {
    async fn handle(&mut self, ctx: &mut Context<Self>) -> Result<(), Error> {
        ctx.termination_sequence(vec![Group::ParcelStream, Group::Tasks]);
        self.attach_distributor(ctx).await?;
        Ok(())
    }
}

#[async_trait]
impl InterruptedBy<RillEngine> for RillPool {
    async fn handle(&mut self, ctx: &mut Context<Self>) -> Result<(), Error> {
        self.detach_distributor();
        ctx.shutdown();
        Ok(())
    }
}