oak_actionscript/ast/
mod.rs1#![doc = include_str!("readme.md")]
2use core::range::Range;
4#[cfg(feature = "serde")]
5use serde::{Deserialize, Serialize};
6
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[derive(Debug, Clone, PartialEq, Eq)]
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 ActionScriptRoot {
22 pub items: Vec<ActionScriptItem>,
24}
25
26#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28#[derive(Debug, Clone, PartialEq)]
29pub enum ActionScriptItem {
30 Package(PackageDeclaration),
32 Class(ClassDeclaration),
34 Interface(InterfaceDeclaration),
36 Function(FunctionDeclaration),
38 Variable(VariableDeclaration),
40 Import(ImportDeclaration),
42}
43
44#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
46#[derive(Debug, Clone, PartialEq)]
47pub struct PackageDeclaration {
48 pub name: Option<Identifier>,
50 pub items: Vec<ActionScriptItem>,
52 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
54 pub span: Range<usize>,
55}
56
57#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
59#[derive(Debug, Clone, PartialEq)]
60pub struct ClassDeclaration {
61 pub name: Identifier,
63 pub modifiers: Vec<String>,
65 pub extends: Option<Identifier>,
67 pub implements: Vec<Identifier>,
69 pub items: Vec<ActionScriptItem>,
71 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
73 pub span: Range<usize>,
74}
75
76#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
78#[derive(Debug, Clone, PartialEq)]
79pub struct InterfaceDeclaration {
80 pub name: Identifier,
82 pub extends: Vec<Identifier>,
84 pub items: Vec<ActionScriptItem>,
86 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
88 pub span: Range<usize>,
89}
90
91#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
93#[derive(Debug, Clone, PartialEq)]
94pub struct FunctionDeclaration {
95 pub name: Identifier,
97 pub parameters: Vec<Parameter>,
99 pub return_type: Option<Identifier>,
101 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
103 pub span: Range<usize>,
104}
105
106#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
108#[derive(Debug, Clone, PartialEq)]
109pub struct Parameter {
110 pub name: Identifier,
112 pub type_annotation: Option<Identifier>,
114}
115
116#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
118#[derive(Debug, Clone, PartialEq)]
119pub struct VariableDeclaration {
120 pub name: Identifier,
122 pub type_annotation: Option<Identifier>,
124 pub is_const: bool,
126 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
128 pub span: Range<usize>,
129}
130
131#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
133#[derive(Debug, Clone, PartialEq)]
134pub struct ImportDeclaration {
135 pub path: String,
137 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
139 pub span: Range<usize>,
140}
141
142impl Default for ActionScriptRoot {
143 fn default() -> Self {
144 Self { items: Vec::new() }
145 }
146}