lunatic_distributed/
lib.rs

1pub mod control;
2pub mod distributed;
3pub mod quic;
4
5use anyhow::Result;
6use lunatic_process::{
7    env::Environment,
8    runtimes::wasmtime::{WasmtimeCompiledModule, WasmtimeRuntime},
9    state::ProcessState,
10};
11use std::sync::Arc;
12
13pub trait DistributedCtx<E: Environment>: ProcessState + Sized {
14    fn new_dist_state(
15        environment: Arc<E>,
16        distributed: DistributedProcessState,
17        runtime: WasmtimeRuntime,
18        module: Arc<WasmtimeCompiledModule<Self>>,
19        config: Arc<Self::Config>,
20    ) -> Result<Self>;
21    fn distributed(&self) -> Result<&DistributedProcessState>;
22    fn distributed_mut(&mut self) -> Result<&mut DistributedProcessState>;
23    fn module_id(&self) -> u64;
24    fn environment_id(&self) -> u64;
25    fn can_spawn(&self) -> bool;
26}
27
28#[derive(Clone)]
29pub struct DistributedProcessState {
30    node_id: u64,
31    pub control: control::Client,
32    pub node_client: distributed::Client,
33}
34
35impl DistributedProcessState {
36    pub async fn new(
37        node_id: u64,
38        control_client: control::Client,
39        node_client: distributed::Client,
40    ) -> Result<Self> {
41        Ok(Self {
42            node_id,
43            control: control_client,
44            node_client,
45        })
46    }
47
48    pub fn node_id(&self) -> u64 {
49        self.node_id
50    }
51}