main
rs 190 lines 4.72 KB
Raw
1 use serde::{Deserialize, Serialize};
2
3 use crate::common::BaseNode;
4 use crate::common::RawNode;
5 use crate::expressions::Expression;
6 use crate::literals::StringLiteral;
7
8 #[derive(Debug, Clone, Serialize, Deserialize)]
9 pub struct JSXElement {
10 #[serde(flatten)]
11 pub base: BaseNode,
12 #[serde(rename = "openingElement")]
13 pub opening_element: JSXOpeningElement,
14 #[serde(rename = "closingElement")]
15 pub closing_element: Option<JSXClosingElement>,
16 pub children: Vec<JSXChild>,
17 #[serde(
18 rename = "selfClosing",
19 default,
20 skip_serializing_if = "Option::is_none"
21 )]
22 pub self_closing: Option<bool>,
23 }
24
25 #[derive(Debug, Clone, Serialize, Deserialize)]
26 pub struct JSXFragment {
27 #[serde(flatten)]
28 pub base: BaseNode,
29 #[serde(rename = "openingFragment")]
30 pub opening_fragment: JSXOpeningFragment,
31 #[serde(rename = "closingFragment")]
32 pub closing_fragment: JSXClosingFragment,
33 pub children: Vec<JSXChild>,
34 }
35
36 #[derive(Debug, Clone, Serialize, Deserialize)]
37 pub struct JSXOpeningElement {
38 #[serde(flatten)]
39 pub base: BaseNode,
40 pub name: JSXElementName,
41 pub attributes: Vec<JSXAttributeItem>,
42 #[serde(rename = "selfClosing")]
43 pub self_closing: bool,
44 #[serde(
45 default,
46 skip_serializing_if = "Option::is_none",
47 rename = "typeParameters"
48 )]
49 pub type_parameters: Option<RawNode>,
50 }
51
52 #[derive(Debug, Clone, Serialize, Deserialize)]
53 pub struct JSXClosingElement {
54 #[serde(flatten)]
55 pub base: BaseNode,
56 pub name: JSXElementName,
57 }
58
59 #[derive(Debug, Clone, Serialize, Deserialize)]
60 pub struct JSXOpeningFragment {
61 #[serde(flatten)]
62 pub base: BaseNode,
63 }
64
65 #[derive(Debug, Clone, Serialize, Deserialize)]
66 pub struct JSXClosingFragment {
67 #[serde(flatten)]
68 pub base: BaseNode,
69 }
70
71 #[derive(Debug, Clone, Serialize, Deserialize)]
72 #[serde(tag = "type")]
73 pub enum JSXElementName {
74 JSXIdentifier(JSXIdentifier),
75 JSXMemberExpression(JSXMemberExpression),
76 JSXNamespacedName(JSXNamespacedName),
77 }
78
79 #[derive(Debug, Clone, Serialize, Deserialize)]
80 #[serde(tag = "type")]
81 pub enum JSXChild {
82 JSXElement(Box<JSXElement>),
83 JSXFragment(JSXFragment),
84 JSXExpressionContainer(JSXExpressionContainer),
85 JSXSpreadChild(JSXSpreadChild),
86 JSXText(JSXText),
87 }
88
89 #[derive(Debug, Clone, Serialize, Deserialize)]
90 #[serde(tag = "type")]
91 pub enum JSXAttributeItem {
92 JSXAttribute(JSXAttribute),
93 JSXSpreadAttribute(JSXSpreadAttribute),
94 }
95
96 #[derive(Debug, Clone, Serialize, Deserialize)]
97 pub struct JSXAttribute {
98 #[serde(flatten)]
99 pub base: BaseNode,
100 pub name: JSXAttributeName,
101 pub value: Option<JSXAttributeValue>,
102 }
103
104 #[derive(Debug, Clone, Serialize, Deserialize)]
105 #[serde(tag = "type")]
106 pub enum JSXAttributeName {
107 JSXIdentifier(JSXIdentifier),
108 JSXNamespacedName(JSXNamespacedName),
109 }
110
111 #[derive(Debug, Clone, Serialize, Deserialize)]
112 #[serde(tag = "type")]
113 pub enum JSXAttributeValue {
114 StringLiteral(StringLiteral),
115 JSXExpressionContainer(JSXExpressionContainer),
116 JSXElement(Box<JSXElement>),
117 JSXFragment(JSXFragment),
118 }
119
120 #[derive(Debug, Clone, Serialize, Deserialize)]
121 pub struct JSXSpreadAttribute {
122 #[serde(flatten)]
123 pub base: BaseNode,
124 pub argument: Box<Expression>,
125 }
126
127 #[derive(Debug, Clone, Serialize, Deserialize)]
128 pub struct JSXExpressionContainer {
129 #[serde(flatten)]
130 pub base: BaseNode,
131 pub expression: JSXExpressionContainerExpr,
132 }
133
134 #[derive(Debug, Clone, Serialize, Deserialize)]
135 #[serde(tag = "type")]
136 pub enum JSXExpressionContainerExpr {
137 JSXEmptyExpression(JSXEmptyExpression),
138 #[serde(untagged)]
139 Expression(Box<Expression>),
140 }
141
142 #[derive(Debug, Clone, Serialize, Deserialize)]
143 pub struct JSXSpreadChild {
144 #[serde(flatten)]
145 pub base: BaseNode,
146 pub expression: Box<Expression>,
147 }
148
149 #[derive(Debug, Clone, Serialize, Deserialize)]
150 pub struct JSXText {
151 #[serde(flatten)]
152 pub base: BaseNode,
153 pub value: String,
154 }
155
156 #[derive(Debug, Clone, Serialize, Deserialize)]
157 pub struct JSXEmptyExpression {
158 #[serde(flatten)]
159 pub base: BaseNode,
160 }
161
162 #[derive(Debug, Clone, Serialize, Deserialize)]
163 pub struct JSXIdentifier {
164 #[serde(flatten)]
165 pub base: BaseNode,
166 pub name: String,
167 }
168
169 #[derive(Debug, Clone, Serialize, Deserialize)]
170 pub struct JSXMemberExpression {
171 #[serde(flatten)]
172 pub base: BaseNode,
173 pub object: Box<JSXMemberExprObject>,
174 pub property: JSXIdentifier,
175 }
176
177 #[derive(Debug, Clone, Serialize, Deserialize)]
178 #[serde(tag = "type")]
179 pub enum JSXMemberExprObject {
180 JSXIdentifier(JSXIdentifier),
181 JSXMemberExpression(Box<JSXMemberExpression>),
182 }
183
184 #[derive(Debug, Clone, Serialize, Deserialize)]
185 pub struct JSXNamespacedName {
186 #[serde(flatten)]
187 pub base: BaseNode,
188 pub namespace: JSXIdentifier,
189 pub name: JSXIdentifier,
190 }