1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4#[derive(Debug, PartialEq, Eq, Clone)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
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(Debug, Clone, PartialEq)]
18pub struct DelphiRoot {
19 pub items: Vec<DelphiItem>,
21 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
23 pub span: core::range::Range<usize>,
24}
25
26impl DelphiRoot {
27 pub fn new(items: Vec<DelphiItem>, span: core::range::Range<usize>) -> Self {
29 Self { items, span }
30 }
31}
32
33#[derive(Debug, PartialEq, Clone)]
35#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
36pub enum DelphiItem {
37 Program(DelphiProgram),
39 Unit(DelphiUnit),
41 Statement(DelphiStatement),
43}
44
45#[derive(Debug, PartialEq, Clone)]
47#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
48pub struct DelphiProgram {
49 pub name: Identifier,
51 pub statements: Vec<DelphiStatement>,
53 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
55 pub span: Range<usize>,
56}
57
58#[derive(Debug, PartialEq, Clone)]
60#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
61pub struct DelphiUnit {
62 pub name: Identifier,
64 pub interface_section: Vec<DelphiStatement>,
66 pub implementation_section: Vec<DelphiStatement>,
68 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
70 pub span: Range<usize>,
71}
72
73#[derive(Debug, PartialEq, Clone)]
75#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
76pub enum DelphiStatement {
77 Empty {
79 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
81 span: Range<usize>,
82 },
83}