1use serde::{Serialize, Deserialize};
4use crate::browsing_context::types::BrowsingContext;
5use crate::script::types::SharedReference;
6use serde_valid::Validate;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub enum NoneEnum {
10 #[serde(rename = "none")]
11 None,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub enum PauseEnum {
16 #[serde(rename = "pause")]
17 Pause,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct PauseAction {
22 #[serde(rename = "type")]
23 pub r#type: PauseEnum,
24 #[serde(rename = "duration")]
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub duration: Option<u64>,
27}
28
29pub type NoneSourceAction = PauseAction;
30
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct NoneSourceActions {
34 #[serde(rename = "type")]
35 pub r#type: NoneEnum,
36 #[serde(rename = "id")]
37 pub id: String,
38 #[serde(rename = "actions")]
39 pub actions: Vec<NoneSourceAction>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub enum KeyEnum {
44 #[serde(rename = "key")]
45 Key,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub enum KeyDownEnum {
50 #[serde(rename = "keyDown")]
51 KeyDown,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct KeyDownAction {
56 #[serde(rename = "type")]
57 pub r#type: KeyDownEnum,
58 #[serde(rename = "value")]
59 pub value: String,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub enum KeyUpEnum {
64 #[serde(rename = "keyUp")]
65 KeyUp,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct KeyUpAction {
70 #[serde(rename = "type")]
71 pub r#type: KeyUpEnum,
72 #[serde(rename = "value")]
73 pub value: String,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77#[serde(untagged)]
78pub enum KeySourceAction {
79 PauseAction(PauseAction),
80 KeyDownAction(KeyDownAction),
81 KeyUpAction(KeyUpAction),
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct KeySourceActions {
86 #[serde(rename = "type")]
87 pub r#type: KeyEnum,
88 #[serde(rename = "id")]
89 pub id: String,
90 #[serde(rename = "actions")]
91 pub actions: Vec<KeySourceAction>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub enum PointerEnum {
96 #[serde(rename = "pointer")]
97 Pointer,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub enum PointerType {
102 #[serde(rename = "mouse")]
103 Mouse,
104 #[serde(rename = "pen")]
105 Pen,
106 #[serde(rename = "touch")]
107 Touch,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct PointerParameters {
112 #[serde(rename = "pointerType")]
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub pointer_type: Option<PointerType>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub enum PointerDownEnum {
119 #[serde(rename = "pointerDown")]
120 PointerDown,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
124pub struct PointerCommonProperties {
125 #[serde(rename = "width")]
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub width: Option<u64>,
128 #[serde(rename = "height")]
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub height: Option<u64>,
131 #[serde(rename = "pressure")]
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub pressure: Option<f64>,
134 #[serde(rename = "tangentialPressure")]
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub tangential_pressure: Option<f64>,
137 #[serde(rename = "twist")]
138 #[serde(skip_serializing_if = "Option::is_none")]
139 #[validate(minimum = 0)]
140 #[validate(maximum = 359)]
141 pub twist: Option<i64>,
142 #[serde(rename = "altitudeAngle")]
143 #[serde(skip_serializing_if = "Option::is_none")]
144 #[validate(minimum = 0.0)]
145 #[validate(maximum = 1.5707963267948966)]
146 pub altitude_angle: Option<f64>,
147 #[serde(rename = "azimuthAngle")]
148 #[serde(skip_serializing_if = "Option::is_none")]
149 #[validate(minimum = 0.0)]
150 #[validate(maximum = 6.283185307179586)]
151 pub azimuth_angle: Option<f64>,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct PointerDownAction {
156 #[serde(rename = "type")]
157 pub r#type: PointerDownEnum,
158 #[serde(rename = "button")]
159 pub button: u64,
160 #[serde(flatten)]
161 pub pointer_common_properties: PointerCommonProperties,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
165pub enum PointerUpEnum {
166 #[serde(rename = "pointerUp")]
167 PointerUp,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
171pub struct PointerUpAction {
172 #[serde(rename = "type")]
173 pub r#type: PointerUpEnum,
174 #[serde(rename = "button")]
175 pub button: u64,
176}
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
179pub enum PointerMoveEnum {
180 #[serde(rename = "pointerMove")]
181 PointerMove,
182}
183
184#[derive(Debug, Clone, Serialize, Deserialize)]
185pub enum ElementEnum {
186 #[serde(rename = "element")]
187 Element,
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct ElementOrigin {
192 #[serde(rename = "type")]
193 pub r#type: ElementEnum,
194 #[serde(rename = "element")]
195 pub element: SharedReference,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
199#[serde(untagged)]
200pub enum Origin {
201 #[serde(rename = "viewport")]
202 Viewport,
203 #[serde(rename = "pointer")]
204 Pointer,
205 ElementOrigin(ElementOrigin),
206}
207
208#[derive(Debug, Clone, Serialize, Deserialize)]
209pub struct PointerMoveAction {
210 #[serde(rename = "type")]
211 pub r#type: PointerMoveEnum,
212 #[serde(rename = "x")]
213 pub x: f64,
214 #[serde(rename = "y")]
215 pub y: f64,
216 #[serde(rename = "duration")]
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub duration: Option<u64>,
219 #[serde(rename = "origin")]
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub origin: Option<Origin>,
222 #[serde(flatten)]
223 pub pointer_common_properties: PointerCommonProperties,
224}
225
226#[derive(Debug, Clone, Serialize, Deserialize)]
227#[serde(untagged)]
228pub enum PointerSourceAction {
229 PauseAction(PauseAction),
230 PointerDownAction(PointerDownAction),
231 PointerUpAction(PointerUpAction),
232 PointerMoveAction(PointerMoveAction),
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct PointerSourceActions {
237 #[serde(rename = "type")]
238 pub r#type: PointerEnum,
239 #[serde(rename = "id")]
240 pub id: String,
241 #[serde(rename = "parameters")]
242 #[serde(skip_serializing_if = "Option::is_none")]
243 pub parameters: Option<PointerParameters>,
244 #[serde(rename = "actions")]
245 pub actions: Vec<PointerSourceAction>,
246}
247
248#[derive(Debug, Clone, Serialize, Deserialize)]
249pub enum WheelEnum {
250 #[serde(rename = "wheel")]
251 Wheel,
252}
253
254#[derive(Debug, Clone, Serialize, Deserialize)]
255pub enum ScrollEnum {
256 #[serde(rename = "scroll")]
257 Scroll,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
261pub struct WheelScrollAction {
262 #[serde(rename = "type")]
263 pub r#type: ScrollEnum,
264 #[serde(rename = "x")]
265 pub x: i64,
266 #[serde(rename = "y")]
267 pub y: i64,
268 #[serde(rename = "deltaX")]
269 pub delta_x: i64,
270 #[serde(rename = "deltaY")]
271 pub delta_y: i64,
272 #[serde(rename = "duration")]
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub duration: Option<u64>,
275 #[serde(rename = "origin")]
276 #[serde(skip_serializing_if = "Option::is_none")]
277 pub origin: Option<Origin>,
278}
279
280#[derive(Debug, Clone, Serialize, Deserialize)]
281#[serde(untagged)]
282pub enum WheelSourceAction {
283 PauseAction(PauseAction),
284 WheelScrollAction(WheelScrollAction),
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct WheelSourceActions {
289 #[serde(rename = "type")]
290 pub r#type: WheelEnum,
291 #[serde(rename = "id")]
292 pub id: String,
293 #[serde(rename = "actions")]
294 pub actions: Vec<WheelSourceAction>,
295}
296
297#[derive(Debug, Clone, Serialize, Deserialize)]
298#[serde(untagged)]
299pub enum SourceActions {
300 NoneSourceActions(NoneSourceActions),
301 KeySourceActions(KeySourceActions),
302 PointerSourceActions(PointerSourceActions),
303 WheelSourceActions(WheelSourceActions),
304}
305
306#[derive(Debug, Clone, Serialize, Deserialize)]
307pub struct FileDialogInfo {
308 #[serde(rename = "context")]
309 pub context: BrowsingContext,
310 #[serde(rename = "element")]
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub element: Option<SharedReference>,
313 #[serde(rename = "multiple")]
314 pub multiple: bool,
315}
316