cell_model/
macro_coordination.rs1use rkyv::{Archive, Serialize as RkyvSerialize, Deserialize as RkyvDeserialize};
5use serde::{Serialize as SerdeSerialize, Deserialize as SerdeDeserialize};
6use alloc::string::String;
7use alloc::vec::Vec;
8
9#[derive(Archive, RkyvSerialize, RkyvDeserialize, SerdeSerialize, SerdeDeserialize, Debug, Clone)]
10#[archive(check_bytes)]
11pub struct MacroInfo {
12 pub name: String,
13 pub kind: MacroKind,
14 pub description: String,
15 pub dependencies: Vec<String>,
16}
17
18#[derive(Archive, RkyvSerialize, RkyvDeserialize, SerdeSerialize, SerdeDeserialize, Debug, Clone, PartialEq)]
19#[archive(check_bytes)]
20pub enum MacroKind {
21 Attribute,
22 Derive,
23 Function,
24}
25
26#[derive(Archive, RkyvSerialize, RkyvDeserialize, SerdeSerialize, SerdeDeserialize, Debug, Clone)]
27#[archive(check_bytes)]
28pub struct ExpansionContext {
29 pub struct_name: String,
30 pub fields: Vec<(String, String)>, pub attributes: Vec<String>,
32 pub other_cells: Vec<String>, }
34
35#[derive(Archive, RkyvSerialize, RkyvDeserialize, SerdeSerialize, SerdeDeserialize, Debug, Clone)]
36#[archive(check_bytes)]
37pub enum MacroCoordinationRequest {
38 WhatMacrosDoYouProvide,
39 GetMacroInfo { name: String },
40 CoordinateExpansion {
41 macro_name: String,
42 context: ExpansionContext,
43 },
44 QueryOtherCell {
45 target_cell: String,
46 query: String,
47 },
48}
49
50#[derive(Archive, RkyvSerialize, RkyvDeserialize, SerdeSerialize, SerdeDeserialize, Debug, Clone)]
51#[archive(check_bytes)]
52pub enum MacroCoordinationResponse {
53 Macros { macros: Vec<MacroInfo> },
54 MacroInfo { info: MacroInfo },
55 GeneratedCode { code: String },
56 QueryResult { result: String },
57 Error { message: String },
58}