nitinol_process/
context.rs1mod 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}