1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4#[cfg(feature = "serde")]
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, PartialEq, Eq, Clone)]
9#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10pub struct Identifier {
11 pub name: String,
13 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
15 pub span: Range<usize>,
16}
17
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20#[derive(Debug, Clone, PartialEq)]
21pub struct DelphiRoot {
22 pub items: Vec<DelphiItem>,
24 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
26 pub span: core::range::Range<usize>,
27}
28
29impl DelphiRoot {
30 pub fn new(items: Vec<DelphiItem>, span: core::range::Range<usize>) -> Self {
32 Self { items, span }
33 }
34}
35
36#[derive(Debug, PartialEq, Clone)]
38#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
39pub enum DelphiItem {
40 Program(DelphiProgram),
42 Unit(DelphiUnit),
44 Statement(DelphiStatement),
46}
47
48#[derive(Debug, PartialEq, Clone)]
50#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
51pub struct DelphiProgram {
52 pub name: Identifier,
54 pub statements: Vec<DelphiStatement>,
56 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
58 pub span: Range<usize>,
59}
60
61#[derive(Debug, PartialEq, Clone)]
63#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
64pub struct DelphiUnit {
65 pub name: Identifier,
67 pub interface_section: Vec<DelphiStatement>,
69 pub implementation_section: Vec<DelphiStatement>,
71 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
73 pub span: Range<usize>,
74}
75
76#[derive(Debug, PartialEq, Clone)]
78#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
79pub enum DelphiStatement {
80 Empty {
82 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
84 span: Range<usize>,
85 },
86}