oak_actionscript/ast/
mod.rs1#![doc = include_str!("readme.md")]
2use core::range::Range;
4
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct Identifier {
9 pub name: String,
11 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
13 pub span: Range<usize>,
14}
15
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[derive(Debug, Clone, PartialEq)]
19pub struct ActionScriptRoot {
20 pub items: Vec<ActionScriptItem>,
22}
23
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26#[derive(Debug, Clone, PartialEq)]
27pub enum ActionScriptItem {
28 Package(PackageDeclaration),
30 Class(ClassDeclaration),
32 Interface(InterfaceDeclaration),
34 Function(FunctionDeclaration),
36 Variable(VariableDeclaration),
38 Import(ImportDeclaration),
40}
41
42#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
44#[derive(Debug, Clone, PartialEq)]
45pub struct PackageDeclaration {
46 pub name: Option<Identifier>,
48 pub items: Vec<ActionScriptItem>,
50 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
52 pub span: Range<usize>,
53}
54
55#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
57#[derive(Debug, Clone, PartialEq)]
58pub struct ClassDeclaration {
59 pub name: Identifier,
61 pub modifiers: Vec<String>,
63 pub extends: Option<Identifier>,
65 pub implements: Vec<Identifier>,
67 pub items: Vec<ActionScriptItem>,
69 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
71 pub span: Range<usize>,
72}
73
74#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
76#[derive(Debug, Clone, PartialEq)]
77pub struct InterfaceDeclaration {
78 pub name: Identifier,
80 pub extends: Vec<Identifier>,
82 pub items: Vec<ActionScriptItem>,
84 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
86 pub span: Range<usize>,
87}
88
89#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
91#[derive(Debug, Clone, PartialEq)]
92pub struct FunctionDeclaration {
93 pub name: Identifier,
95 pub parameters: Vec<Parameter>,
97 pub return_type: Option<Identifier>,
99 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
101 pub span: Range<usize>,
102}
103
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
106#[derive(Debug, Clone, PartialEq)]
107pub struct Parameter {
108 pub name: Identifier,
110 pub type_annotation: Option<Identifier>,
112}
113
114#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
116#[derive(Debug, Clone, PartialEq)]
117pub struct VariableDeclaration {
118 pub name: Identifier,
120 pub type_annotation: Option<Identifier>,
122 pub is_const: bool,
124 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
126 pub span: Range<usize>,
127}
128
129#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
131#[derive(Debug, Clone, PartialEq)]
132pub struct ImportDeclaration {
133 pub path: String,
135 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
137 pub span: Range<usize>,
138}
139
140impl Default for ActionScriptRoot {
141 fn default() -> Self {
142 Self { items: Vec::new() }
143 }
144}