1use crate::config::CellInitConfig;
5use alloc::boxed::Box;
6use alloc::string::String;
7use alloc::vec::Vec;
8use serde::{Deserialize, Serialize};
9use std::collections::HashMap;
10
11pub const GENOME_REQUEST: &[u8] = b"__CELL_GENOME_REQUEST__";
12pub const SHM_UPGRADE_REQUEST: &[u8] = b"__SHM_UPGRADE_REQUEST__";
13pub const SHM_UPGRADE_ACK: &[u8] = b"__SHM_UPGRADE_ACK__";
14
15pub const GAP_JUNCTION_FD: i32 = 3;
16
17#[derive(Serialize, Deserialize, Debug, Clone)]
18pub struct CellGenome {
19 pub name: String,
20 pub fingerprint: u64,
21 pub methods: Vec<MethodSchema>,
22 pub types: Vec<TypeSchema>,
23 pub macros: Vec<MacroSchema>,
24}
25#[derive(Serialize, Deserialize, Debug, Clone)]
26pub struct MethodSchema {
27 pub name: String,
28 pub inputs: Vec<(String, TypeRef)>,
29 pub output: TypeRef,
30}
31#[derive(Serialize, Deserialize, Debug, Clone)]
32pub struct TypeSchema {
33 pub name: String,
34 pub kind: TypeKind,
35}
36#[derive(Serialize, Deserialize, Debug, Clone)]
37pub enum TypeKind {
38 Struct { fields: Vec<(String, TypeRef)> },
39 Enum { variants: Vec<(String, Vec<TypeRef>)> },
40}
41#[derive(Serialize, Deserialize, Debug, Clone)]
42pub struct MacroSchema {
43 pub name: String,
44 pub kind: MacroKind,
45 pub source: String,
46 pub dependencies: Vec<String>,
47}
48#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
49pub enum MacroKind { Declarative, Attribute, Derive, Function }
50#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
51pub enum TypeRef { Named(String), Primitive(Primitive), Vec(Box<TypeRef>), Option(Box<TypeRef>), Result(Box<TypeRef>, Box<TypeRef>), Unit, Unknown }
52#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq)]
53pub enum Primitive { String, U8, U16, U32, U64, I8, I16, I32, I64, F32, F64, Bool }
54
55#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
56#[archive(check_bytes)]
57pub enum MitosisRequest {
58 Spawn { cell_name: String, config: Option<CellInitConfig> },
59 Test { target_cell: String, filter: Option<String> },
60}
61
62#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
63#[archive(check_bytes)]
64pub enum MitosisResponse {
65 Ok { socket_path: String },
66 Denied { reason: String },
67}
68
69#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
72#[archive(check_bytes)]
73pub enum MeshRequest {
74 ResolveDependencies { cell_name: String, dependencies: Vec<String> },
75 ReportHealth { cell_name: String, healthy: bool },
76 GetFullGraph,
78}
79
80#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
81#[archive(check_bytes)]
82pub enum MeshResponse {
83 DependencyMapping { cell_name: String, socket_paths: HashMap<String, String> },
84 Ack,
85 FullGraph(HashMap<String, Vec<String>>),
87 Error { message: String },
88}
89
90#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
95#[archive(check_bytes)]
96pub enum TestEvent {
97 Log(String),
98 CaseStarted(String),
99 CaseFinished { name: String, success: bool, duration_ms: u64 },
100 SuiteFinished { total: u32, passed: u32, failed: u32 },
101 Error(String),
102}
103
104#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
105#[archive(check_bytes)]
106pub enum MitosisSignal {
107 Prophase,
108 RequestIdentity,
109 Prometaphase { socket_path: String },
110 Cytokinesis,
111 Apoptosis { reason: String },
112 Necrosis,
113}
114
115#[derive(Serialize, Deserialize, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize, Debug)]
116#[archive(check_bytes)]
117pub enum MitosisControl {
118 InjectIdentity(CellInitConfig),
119 Terminate,
120}