oak_delphi/ast/
mod.rs

1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4/// Identifier in Delphi
5#[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/// Strongly-typed AST root for Delphi language
13#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
14pub struct DelphiRoot {
15    pub items: Vec<DelphiItem>,
16}
17
18/// Top-level items in Delphi language
19#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
20pub enum DelphiItem {
21    Program(DelphiProgram),
22    Unit(DelphiUnit),
23    Statement(DelphiStatement),
24}
25
26/// Represents a Delphi program
27#[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/// Represents a Delphi unit
36#[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/// Represents various statements in Delphi language
46#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
47pub enum DelphiStatement {
48    /// Empty statement
49    Empty {
50        #[serde(with = "oak_core::serde_range")]
51        span: Range<usize>,
52    },
53}