Skip to main content

oak_idl/ast/
mod.rs

1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8pub struct IdlRoot {
9    pub items: Vec<IdlItem>,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Hash)]
13#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14pub enum IdlItem {
15    Module(Module),
16    Interface(Interface),
17    Struct(Struct),
18    Enum(Enum),
19    Typedef(Typedef),
20    Const(Const),
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Hash)]
24#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25pub struct Module {
26    pub name: String,
27    pub items: Vec<IdlItem>,
28    #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
29    pub span: Range<usize>,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq, Hash)]
33#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
34pub struct Interface {
35    pub name: String,
36    pub members: Vec<IdlMember>,
37    #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
38    pub span: Range<usize>,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Hash)]
42#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
43pub enum IdlMember {
44    Attribute(Attribute),
45    Operation(Operation),
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Hash)]
49#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50pub struct Attribute {
51    pub name: String,
52    pub type_name: String,
53    pub readonly: bool,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Hash)]
57#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
58pub struct Operation {
59    pub name: String,
60    pub return_type: String,
61    pub params: Vec<Param>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Hash)]
65#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
66pub struct Param {
67    pub name: String,
68    pub type_name: String,
69    pub direction: ParamDirection,
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
73#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
74pub enum ParamDirection {
75    In,
76    Out,
77    Inout,
78}
79
80#[derive(Debug, Clone, PartialEq, Eq, Hash)]
81#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
82pub struct Struct {
83    pub name: String,
84    pub fields: Vec<Field>,
85}
86
87#[derive(Debug, Clone, PartialEq, Eq, Hash)]
88#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
89pub struct Field {
90    pub name: String,
91    pub type_name: String,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Hash)]
95#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
96pub struct Enum {
97    pub name: String,
98    pub variants: Vec<String>,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Hash)]
102#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
103pub struct Typedef {
104    pub name: String,
105    pub type_name: String,
106}
107
108#[derive(Debug, Clone, PartialEq, Eq, Hash)]
109#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
110pub struct Const {
111    pub name: String,
112    pub type_name: String,
113    pub value: String,
114}