1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[derive(Clone, Debug, PartialEq, Eq, Hash)]
9pub struct Identifier {
10 pub name: String,
12 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
14 pub span: Range<usize>,
15}
16
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19#[derive(Clone, Debug, PartialEq, Eq, Hash)]
20pub struct DRoot {
21 pub items: Vec<Item>,
23}
24
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
27#[derive(Clone, Debug, PartialEq, Eq, Hash)]
28pub enum Item {
29 Module(Module),
31 Import(Import),
33 Class(Class),
35 Struct(Struct),
37 Function(Function),
39}
40
41#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
43#[derive(Clone, Debug, PartialEq, Eq, Hash)]
44pub struct Module {
45 pub name: Identifier,
47 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
49 pub span: Range<usize>,
50}
51
52#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
54#[derive(Clone, Debug, PartialEq, Eq, Hash)]
55pub struct Import {
56 pub path: Vec<Identifier>,
58 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
60 pub span: Range<usize>,
61}
62
63#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
65#[derive(Clone, Debug, PartialEq, Eq, Hash)]
66pub struct Class {
67 pub name: Identifier,
69 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
71 pub span: Range<usize>,
72}
73
74#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
76#[derive(Clone, Debug, PartialEq, Eq, Hash)]
77pub struct Struct {
78 pub name: Identifier,
80 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
82 pub span: Range<usize>,
83}
84
85#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
87#[derive(Clone, Debug, PartialEq, Eq, Hash)]
88pub struct Function {
89 pub name: Identifier,
91 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
93 pub span: Range<usize>,
94}