1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[derive(Clone, Debug, PartialEq, Eq, Hash)]
7pub struct Identifier {
8 pub name: String,
10 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
12 pub span: Range<usize>,
13}
14
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17#[derive(Clone, Debug, PartialEq, Eq, Hash)]
18pub struct DRoot {
19 pub items: Vec<Item>,
21}
22
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25#[derive(Clone, Debug, PartialEq, Eq, Hash)]
26pub enum Item {
27 Module(Module),
29 Import(Import),
31 Class(Class),
33 Struct(Struct),
35 Function(Function),
37}
38
39#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
41#[derive(Clone, Debug, PartialEq, Eq, Hash)]
42pub struct Module {
43 pub name: Identifier,
45 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
47 pub span: Range<usize>,
48}
49
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
52#[derive(Clone, Debug, PartialEq, Eq, Hash)]
53pub struct Import {
54 pub path: Vec<Identifier>,
56 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
58 pub span: Range<usize>,
59}
60
61#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
63#[derive(Clone, Debug, PartialEq, Eq, Hash)]
64pub struct Class {
65 pub name: Identifier,
67 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
69 pub span: Range<usize>,
70}
71
72#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
74#[derive(Clone, Debug, PartialEq, Eq, Hash)]
75pub struct Struct {
76 pub name: Identifier,
78 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
80 pub span: Range<usize>,
81}
82
83#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
85#[derive(Clone, Debug, PartialEq, Eq, Hash)]
86pub struct Function {
87 pub name: Identifier,
89 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
91 pub span: Range<usize>,
92}