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}