lunatic_distributed/
lib.rs1pub 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}