1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4#[derive(Debug, Clone, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct IdlRoot {
8 pub items: Vec<IdlItem>,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Hash)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub enum IdlItem {
16 Module(Module),
18 Interface(Interface),
20 Struct(Struct),
22 Enum(Enum),
24 Typedef(Typedef),
26 Const(Const),
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Hash)]
32#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
33pub struct Module {
34 pub name: String,
36 pub items: Vec<IdlItem>,
38 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
40 pub span: Range<usize>,
41}
42
43#[derive(Debug, Clone, PartialEq, Eq, Hash)]
45#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
46pub struct Interface {
47 pub name: String,
49 pub members: Vec<IdlMember>,
51 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
53 pub span: Range<usize>,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Hash)]
58#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
59pub enum IdlMember {
60 Attribute(Attribute),
62 Operation(Operation),
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Hash)]
68#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
69pub struct Attribute {
70 pub name: String,
72 pub type_name: String,
74 pub readonly: bool,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Hash)]
80#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
81pub struct Operation {
82 pub name: String,
84 pub return_type: String,
86 pub params: Vec<Param>,
88}
89
90#[derive(Debug, Clone, PartialEq, Eq, Hash)]
92#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
93pub struct Param {
94 pub name: String,
96 pub type_name: String,
98 pub direction: ParamDirection,
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
105pub enum ParamDirection {
106 In,
108 Out,
110 Inout,
112}
113
114#[derive(Debug, Clone, PartialEq, Eq, Hash)]
116#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
117pub struct Struct {
118 pub name: String,
120 pub fields: Vec<Field>,
122 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
124 pub span: Range<usize>,
125}
126
127#[derive(Debug, Clone, PartialEq, Eq, Hash)]
129#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
130pub struct Field {
131 pub name: String,
133 pub type_name: String,
135}
136
137#[derive(Debug, Clone, PartialEq, Eq, Hash)]
139#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
140pub struct Enum {
141 pub name: String,
143 pub variants: Vec<String>,
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Hash)]
149#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
150pub struct Typedef {
151 pub name: String,
153 pub type_name: String,
155}
156
157#[derive(Debug, Clone, PartialEq, Eq, Hash)]
159#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
160pub struct Const {
161 pub name: String,
163 pub type_name: String,
165 pub value: String,
167}