nitinol_process/
context.rs

1mod status;
2
3pub use status::*;
4
5use crate::registry::ProcessRegistry;
6use crate::{Process, Receptor};
7
8use nitinol_core::identifier::EntityId;
9
10pub struct Context {
11    pub(crate) sequence: i64,
12    pub(crate) status: Status,
13    pub(crate) registry: ProcessRegistry,
14}
15
16impl Context {
17    pub fn new(sequence: i64, registry: ProcessRegistry) -> Context {
18        Self { sequence, status: Status::new(true), registry }
19    }
20}
21
22impl Context {
23    pub fn sequence(&self) -> i64 {
24        self.sequence
25    }
26    
27    pub fn status(&self) -> &Status {
28        &self.status
29    }
30
31    pub async fn is_active(&self) -> bool {
32        self.status.is_active().await
33    }
34
35    pub async fn poison(&self) {
36        self.status.poison().await;
37    }
38    
39    pub fn registry(&self) -> &ProcessRegistry {
40        &self.registry
41    }
42    
43    pub async fn find<T: Process>(&self, id: &EntityId) -> Option<Receptor<T>> {
44        self.registry.find::<T>(id).await.unwrap()
45    }
46}