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,
12 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
13 pub span: Range<usize>,
14}
15
16#[derive(Debug, PartialEq, Clone)]
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19pub struct DelphiRoot {
20 pub items: Vec<DelphiItem>,
21}
22
23#[derive(Debug, PartialEq, Clone)]
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26pub enum DelphiItem {
27 Program(DelphiProgram),
28 Unit(DelphiUnit),
29 Statement(DelphiStatement),
30}
31
32#[derive(Debug, PartialEq, Clone)]
34#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
35pub struct DelphiProgram {
36 pub name: Identifier,
37 pub statements: Vec<DelphiStatement>,
38 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
39 pub span: Range<usize>,
40}
41
42#[derive(Debug, PartialEq, Clone)]
44#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
45pub struct DelphiUnit {
46 pub name: Identifier,
47 pub interface_section: Vec<DelphiStatement>,
48 pub implementation_section: Vec<DelphiStatement>,
49 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
50 pub span: Range<usize>,
51}
52
53#[derive(Debug, PartialEq, Clone)]
55#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
56pub enum DelphiStatement {
57 Empty {
59 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
60 span: Range<usize>,
61 },
62}