main
rs 60 lines 1.36 KB
Raw
1 pub mod common;
2 pub mod declarations;
3 pub mod expressions;
4 pub mod jsx;
5 pub mod literals;
6 pub mod operators;
7 pub mod patterns;
8 pub mod scope;
9 pub mod statements;
10 pub mod visitor;
11
12 use serde::{Deserialize, Serialize};
13
14 use crate::common::{BaseNode, Comment};
15 use crate::statements::{Directive, Statement};
16
17 /// The root type returned by @babel/parser
18 #[derive(Debug, Clone, Serialize, Deserialize)]
19 pub struct File {
20 #[serde(flatten)]
21 pub base: BaseNode,
22 pub program: Program,
23 #[serde(default)]
24 pub comments: Vec<Comment>,
25 #[serde(default)]
26 pub errors: Vec<serde_json::Value>,
27 }
28
29 #[derive(Debug, Clone, Serialize, Deserialize)]
30 pub struct Program {
31 #[serde(flatten)]
32 pub base: BaseNode,
33 pub body: Vec<Statement>,
34 #[serde(default)]
35 pub directives: Vec<Directive>,
36 #[serde(rename = "sourceType")]
37 pub source_type: SourceType,
38 #[serde(default)]
39 pub interpreter: Option<InterpreterDirective>,
40 #[serde(
41 rename = "sourceFile",
42 default,
43 skip_serializing_if = "Option::is_none"
44 )]
45 pub source_file: Option<String>,
46 }
47
48 #[derive(Debug, Clone, Serialize, Deserialize)]
49 #[serde(rename_all = "lowercase")]
50 pub enum SourceType {
51 Module,
52 Script,
53 }
54
55 #[derive(Debug, Clone, Serialize, Deserialize)]
56 pub struct InterpreterDirective {
57 #[serde(flatten)]
58 pub base: BaseNode,
59 pub value: String,
60 }