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