Skip to main content

oak_delphi/ast/
mod.rs

1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4#[cfg(feature = "serde")]
5use serde::{Deserialize, Serialize};
6
7/// Identifier in Delphi
8#[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/// Strongly-typed AST root for Delphi language
17#[derive(Debug, PartialEq, Clone)]
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19pub struct DelphiRoot {
20    pub items: Vec<DelphiItem>,
21}
22
23/// Top-level items in Delphi language
24#[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/// Represents a Delphi program
33#[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/// Represents a Delphi unit
43#[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/// Represents various statements in Delphi language
54#[derive(Debug, PartialEq, Clone)]
55#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
56pub enum DelphiStatement {
57    /// Empty statement
58    Empty {
59        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
60        span: Range<usize>,
61    },
62}