1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct Identifier {
7 pub name: String,
9 #[serde(with = "oak_core::serde_range")]
11 pub span: Range<usize>,
12}
13
14#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
16pub struct DRoot {
17 pub items: Vec<Item>,
19}
20
21#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
23pub enum Item {
24 Module(Module),
26 Import(Import),
28 Class(Class),
30 Struct(Struct),
32 Function(Function),
34}
35
36#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
38pub struct Module {
39 pub name: Identifier,
40 #[serde(with = "oak_core::serde_range")]
41 pub span: Range<usize>,
42}
43
44#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
46pub struct Import {
47 pub path: Vec<Identifier>,
48 #[serde(with = "oak_core::serde_range")]
49 pub span: Range<usize>,
50}
51
52#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
54pub struct Class {
55 pub name: Identifier,
56 #[serde(with = "oak_core::serde_range")]
57 pub span: Range<usize>,
58}
59
60#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
62pub struct Struct {
63 pub name: Identifier,
64 #[serde(with = "oak_core::serde_range")]
65 pub span: Range<usize>,
66}
67
68#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
70pub struct Function {
71 pub name: Identifier,
72 #[serde(with = "oak_core::serde_range")]
73 pub span: Range<usize>,
74}