macroforge_ts_syn/abi/ir/
interface.rs

1
2use serde::{Deserialize, Serialize};
3
4use crate::abi::{DecoratorIR, SpanIR};
5
6/// Interface IR for derive macros targeting TypeScript interfaces.
7/// Similar to ClassIR but for interface declarations.
8#[derive(Serialize, Deserialize)]
9#[derive(Clone, Debug, PartialEq)]
10pub struct InterfaceIR {
11    pub name: String,
12    pub span: SpanIR,
13    pub body_span: SpanIR,
14    pub type_params: Vec<String>,
15    /// Heritage clauses (extends)
16    pub heritage: Vec<String>,
17    pub decorators: Vec<DecoratorIR>,
18    pub fields: Vec<InterfaceFieldIR>,
19    pub methods: Vec<InterfaceMethodIR>,
20}
21
22/// A field/property in an interface
23#[derive(Serialize, Deserialize)]
24#[derive(Clone, Debug, PartialEq)]
25pub struct InterfaceFieldIR {
26    pub name: String,
27    pub span: SpanIR,
28    pub ts_type: String,
29    pub optional: bool,
30    pub readonly: bool,
31    pub decorators: Vec<DecoratorIR>,
32}
33
34/// A method signature in an interface
35#[derive(Serialize, Deserialize)]
36#[derive(Clone, Debug, PartialEq)]
37pub struct InterfaceMethodIR {
38    pub name: String,
39    pub span: SpanIR,
40    pub type_params_src: String,
41    pub params_src: String,
42    pub return_type_src: String,
43    pub optional: bool,
44    pub decorators: Vec<DecoratorIR>,
45}