1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
6pub struct Identifier {
7 pub name: String,
8 #[serde(with = "oak_core::serde_range")]
9 pub span: Range<usize>,
10}
11
12#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
14pub struct DelphiRoot {
15 pub items: Vec<DelphiItem>,
16}
17
18#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
20pub enum DelphiItem {
21 Program(DelphiProgram),
22 Unit(DelphiUnit),
23 Statement(DelphiStatement),
24}
25
26#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
28pub struct DelphiProgram {
29 pub name: Identifier,
30 pub statements: Vec<DelphiStatement>,
31 #[serde(with = "oak_core::serde_range")]
32 pub span: Range<usize>,
33}
34
35#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
37pub struct DelphiUnit {
38 pub name: Identifier,
39 pub interface_section: Vec<DelphiStatement>,
40 pub implementation_section: Vec<DelphiStatement>,
41 #[serde(with = "oak_core::serde_range")]
42 pub span: Range<usize>,
43}
44
45#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
47pub enum DelphiStatement {
48 Empty {
50 #[serde(with = "oak_core::serde_range")]
51 span: Range<usize>,
52 },
53}