1use serde::{Serialize, Deserialize};
2use serde_json::Value as JsonValue;
3
4pub type AXNodeId = String;
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
11pub enum AXValueType {
12 #[default]
13 Boolean,
14 Tristate,
15 BooleanOrUndefined,
16 Idref,
17 IdrefList,
18 Integer,
19 Node,
20 NodeList,
21 Number,
22 String,
23 ComputedString,
24 Token,
25 TokenList,
26 DomRelation,
27 Role,
28 InternalRole,
29 ValueUndefined,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
35pub enum AXValueSourceType {
36 #[default]
37 Attribute,
38 Implicit,
39 Style,
40 Contents,
41 Placeholder,
42 RelatedElement,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
48pub enum AXValueNativeSourceType {
49 #[default]
50 Description,
51 Figcaption,
52 Label,
53 Labelfor,
54 Labelwrapped,
55 Legend,
56 Rubyannotation,
57 Tablecaption,
58 Title,
59 Other,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, Default)]
65#[serde(rename_all = "camelCase")]
66pub struct AXValueSource {
67 #[serde(rename = "type")]
70 pub type_: AXValueSourceType,
71 #[serde(skip_serializing_if = "Option::is_none")]
74 pub value: Option<AXValue>,
75 #[serde(skip_serializing_if = "Option::is_none")]
78 pub attribute: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
82 pub attributeValue: Option<AXValue>,
83 #[serde(skip_serializing_if = "Option::is_none")]
86 pub superseded: Option<bool>,
87 #[serde(skip_serializing_if = "Option::is_none")]
90 pub nativeSource: Option<AXValueNativeSourceType>,
91 #[serde(skip_serializing_if = "Option::is_none")]
94 pub nativeSourceValue: Option<AXValue>,
95 #[serde(skip_serializing_if = "Option::is_none")]
98 pub invalid: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
102 pub invalidReason: Option<String>,
103}
104
105
106#[derive(Debug, Clone, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108pub struct AXRelatedNode {
109 pub backendDOMNodeId: crate::dom::BackendNodeId,
112 #[serde(skip_serializing_if = "Option::is_none")]
115 pub idref: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
119 pub text: Option<String>,
120}
121
122
123#[derive(Debug, Clone, Serialize, Deserialize, Default)]
124#[serde(rename_all = "camelCase")]
125pub struct AXProperty {
126 pub name: AXPropertyName,
129 pub value: AXValue,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize, Default)]
137#[serde(rename_all = "camelCase")]
138pub struct AXValue {
139 #[serde(rename = "type")]
142 pub type_: AXValueType,
143 #[serde(skip_serializing_if = "Option::is_none")]
146 pub value: Option<JsonValue>,
147 #[serde(skip_serializing_if = "Option::is_none")]
150 pub relatedNodes: Option<Vec<AXRelatedNode>>,
151 #[serde(skip_serializing_if = "Option::is_none")]
154 pub sources: Option<Vec<AXValueSource>>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
166pub enum AXPropertyName {
167 #[default]
168 Actions,
169 Busy,
170 Disabled,
171 Editable,
172 Focusable,
173 Focused,
174 Hidden,
175 HiddenRoot,
176 Invalid,
177 Keyshortcuts,
178 Settable,
179 Roledescription,
180 Live,
181 Atomic,
182 Relevant,
183 Root,
184 Autocomplete,
185 HasPopup,
186 Level,
187 Multiselectable,
188 Orientation,
189 Multiline,
190 Readonly,
191 Required,
192 Valuemin,
193 Valuemax,
194 Valuetext,
195 Checked,
196 Expanded,
197 Modal,
198 Pressed,
199 Selected,
200 Activedescendant,
201 Controls,
202 Describedby,
203 Details,
204 Errormessage,
205 Flowto,
206 Labelledby,
207 Owns,
208 Url,
209 ActiveFullscreenElement,
210 ActiveModalDialog,
211 ActiveAriaModalDialog,
212 AriaHiddenElement,
213 AriaHiddenSubtree,
214 EmptyAlt,
215 EmptyText,
216 InertElement,
217 InertSubtree,
218 LabelContainer,
219 LabelFor,
220 NotRendered,
221 NotVisible,
222 PresentationalRole,
223 ProbablyPresentational,
224 InactiveCarouselTabContent,
225 Uninteresting,
226}
227
228#[derive(Debug, Clone, Serialize, Deserialize, Default)]
231#[serde(rename_all = "camelCase")]
232pub struct AXNode {
233 pub nodeId: AXNodeId,
236 pub ignored: bool,
239 #[serde(skip_serializing_if = "Option::is_none")]
242 pub ignoredReasons: Option<Vec<AXProperty>>,
243 #[serde(skip_serializing_if = "Option::is_none")]
246 pub role: Option<AXValue>,
247 #[serde(skip_serializing_if = "Option::is_none")]
250 pub chromeRole: Option<AXValue>,
251 #[serde(skip_serializing_if = "Option::is_none")]
254 pub name: Option<AXValue>,
255 #[serde(skip_serializing_if = "Option::is_none")]
258 pub description: Option<AXValue>,
259 #[serde(skip_serializing_if = "Option::is_none")]
262 pub value: Option<AXValue>,
263 #[serde(skip_serializing_if = "Option::is_none")]
266 pub properties: Option<Vec<AXProperty>>,
267 #[serde(skip_serializing_if = "Option::is_none")]
270 pub parentId: Option<AXNodeId>,
271 #[serde(skip_serializing_if = "Option::is_none")]
274 pub childIds: Option<Vec<AXNodeId>>,
275 #[serde(skip_serializing_if = "Option::is_none")]
278 pub backendDOMNodeId: Option<crate::dom::BackendNodeId>,
279 #[serde(skip_serializing_if = "Option::is_none")]
282 pub frameId: Option<crate::page::FrameId>,
283}
284
285#[derive(Debug, Clone, Serialize, Deserialize, Default)]
288#[serde(rename_all = "camelCase")]
289pub struct GetPartialAXTreeParams {
290 #[serde(skip_serializing_if = "Option::is_none")]
293 pub nodeId: Option<crate::dom::NodeId>,
294 #[serde(skip_serializing_if = "Option::is_none")]
297 pub backendNodeId: Option<crate::dom::BackendNodeId>,
298 #[serde(skip_serializing_if = "Option::is_none")]
301 pub objectId: Option<crate::runtime::RemoteObjectId>,
302 #[serde(skip_serializing_if = "Option::is_none")]
305 pub fetchRelatives: Option<bool>,
306}
307
308#[derive(Debug, Clone, Serialize, Deserialize, Default)]
311#[serde(rename_all = "camelCase")]
312pub struct GetPartialAXTreeReturns {
313 pub nodes: Vec<AXNode>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize, Default)]
322#[serde(rename_all = "camelCase")]
323pub struct GetFullAXTreeParams {
324 #[serde(skip_serializing_if = "Option::is_none")]
328 pub depth: Option<i64>,
329 #[serde(skip_serializing_if = "Option::is_none")]
333 pub frameId: Option<crate::page::FrameId>,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize, Default)]
339#[serde(rename_all = "camelCase")]
340pub struct GetFullAXTreeReturns {
341
342 pub nodes: Vec<AXNode>,
343}
344
345#[derive(Debug, Clone, Serialize, Deserialize, Default)]
349#[serde(rename_all = "camelCase")]
350pub struct GetRootAXNodeParams {
351 #[serde(skip_serializing_if = "Option::is_none")]
355 pub frameId: Option<crate::page::FrameId>,
356}
357
358#[derive(Debug, Clone, Serialize, Deserialize, Default)]
362#[serde(rename_all = "camelCase")]
363pub struct GetRootAXNodeReturns {
364
365 pub node: AXNode,
366}
367
368#[derive(Debug, Clone, Serialize, Deserialize, Default)]
372#[serde(rename_all = "camelCase")]
373pub struct GetAXNodeAndAncestorsParams {
374 #[serde(skip_serializing_if = "Option::is_none")]
377 pub nodeId: Option<crate::dom::NodeId>,
378 #[serde(skip_serializing_if = "Option::is_none")]
381 pub backendNodeId: Option<crate::dom::BackendNodeId>,
382 #[serde(skip_serializing_if = "Option::is_none")]
385 pub objectId: Option<crate::runtime::RemoteObjectId>,
386}
387
388#[derive(Debug, Clone, Serialize, Deserialize, Default)]
392#[serde(rename_all = "camelCase")]
393pub struct GetAXNodeAndAncestorsReturns {
394
395 pub nodes: Vec<AXNode>,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize, Default)]
402#[serde(rename_all = "camelCase")]
403pub struct GetChildAXNodesParams {
404
405 pub id: AXNodeId,
406 #[serde(skip_serializing_if = "Option::is_none")]
410 pub frameId: Option<crate::page::FrameId>,
411}
412
413#[derive(Debug, Clone, Serialize, Deserialize, Default)]
417#[serde(rename_all = "camelCase")]
418pub struct GetChildAXNodesReturns {
419
420 pub nodes: Vec<AXNode>,
421}
422
423#[derive(Debug, Clone, Serialize, Deserialize, Default)]
430#[serde(rename_all = "camelCase")]
431pub struct QueryAXTreeParams {
432 #[serde(skip_serializing_if = "Option::is_none")]
435 pub nodeId: Option<crate::dom::NodeId>,
436 #[serde(skip_serializing_if = "Option::is_none")]
439 pub backendNodeId: Option<crate::dom::BackendNodeId>,
440 #[serde(skip_serializing_if = "Option::is_none")]
443 pub objectId: Option<crate::runtime::RemoteObjectId>,
444 #[serde(skip_serializing_if = "Option::is_none")]
447 pub accessibleName: Option<String>,
448 #[serde(skip_serializing_if = "Option::is_none")]
451 pub role: Option<String>,
452}
453
454#[derive(Debug, Clone, Serialize, Deserialize, Default)]
461#[serde(rename_all = "camelCase")]
462pub struct QueryAXTreeReturns {
463 pub nodes: Vec<AXNode>,
467}