nitinol-process 0.1.0

Pseudo-actor type process library for Nitinol using green thread of tokio
Documentation
mod status;

pub use status::*;

use crate::registry::ProcessRegistry;
use crate::{Process, Receptor};

use nitinol_core::identifier::EntityId;

pub struct Context {
    pub(crate) sequence: i64,
    pub(crate) status: Status,
    pub(crate) registry: ProcessRegistry,
}

impl Context {
    pub fn new(sequence: i64, registry: ProcessRegistry) -> Context {
        Self { sequence, status: Status::new(true), registry }
    }
}

impl Context {
    pub fn sequence(&self) -> i64 {
        self.sequence
    }
    
    pub fn status(&self) -> &Status {
        &self.status
    }

    pub async fn is_active(&self) -> bool {
        self.status.is_active().await
    }

    pub async fn poison(&self) {
        self.status.poison().await;
    }
    
    pub fn registry(&self) -> &ProcessRegistry {
        &self.registry
    }
    
    pub async fn find<T: Process>(&self, id: &EntityId) -> Option<Receptor<T>> {
        self.registry.find::<T>(id).await.unwrap()
    }
}