Skip to main content

cell_model/
macro_coordination.rs

1// SPDX-License-Identifier: MIT
2// Copyright (c) 2025 Leif Rydenfalk – https://github.com/Leif-Rydenfalk/cell
3
4use 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)>, // (field_name, type_name)
31    pub attributes: Vec<String>,
32    pub other_cells: Vec<String>, // Other cells involved in this expansion
33}
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}