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)]
286pub struct DisableParams {}
287
288impl DisableParams { pub const METHOD: &'static str = "Accessibility.disable"; }
289
290impl crate::CdpCommand for DisableParams {
291 const METHOD: &'static str = "Accessibility.disable";
292 type Response = crate::EmptyReturns;
293}
294
295#[derive(Debug, Clone, Serialize, Deserialize, Default)]
296pub struct EnableParams {}
297
298impl EnableParams { pub const METHOD: &'static str = "Accessibility.enable"; }
299
300impl crate::CdpCommand for EnableParams {
301 const METHOD: &'static str = "Accessibility.enable";
302 type Response = crate::EmptyReturns;
303}
304
305#[derive(Debug, Clone, Serialize, Deserialize, Default)]
308#[serde(rename_all = "camelCase")]
309pub struct GetPartialAXTreeParams {
310 #[serde(skip_serializing_if = "Option::is_none")]
313 pub nodeId: Option<crate::dom::NodeId>,
314 #[serde(skip_serializing_if = "Option::is_none")]
317 pub backendNodeId: Option<crate::dom::BackendNodeId>,
318 #[serde(skip_serializing_if = "Option::is_none")]
321 pub objectId: Option<crate::runtime::RemoteObjectId>,
322 #[serde(skip_serializing_if = "Option::is_none")]
325 pub fetchRelatives: Option<bool>,
326}
327
328#[derive(Debug, Clone, Serialize, Deserialize, Default)]
331#[serde(rename_all = "camelCase")]
332pub struct GetPartialAXTreeReturns {
333 pub nodes: Vec<AXNode>,
337}
338
339impl GetPartialAXTreeParams { pub const METHOD: &'static str = "Accessibility.getPartialAXTree"; }
340
341impl crate::CdpCommand for GetPartialAXTreeParams {
342 const METHOD: &'static str = "Accessibility.getPartialAXTree";
343 type Response = GetPartialAXTreeReturns;
344}
345
346#[derive(Debug, Clone, Serialize, Deserialize, Default)]
349#[serde(rename_all = "camelCase")]
350pub struct GetFullAXTreeParams {
351 #[serde(skip_serializing_if = "Option::is_none")]
355 pub depth: Option<i64>,
356 #[serde(skip_serializing_if = "Option::is_none")]
360 pub frameId: Option<crate::page::FrameId>,
361}
362
363#[derive(Debug, Clone, Serialize, Deserialize, Default)]
366#[serde(rename_all = "camelCase")]
367pub struct GetFullAXTreeReturns {
368
369 pub nodes: Vec<AXNode>,
370}
371
372impl GetFullAXTreeParams { pub const METHOD: &'static str = "Accessibility.getFullAXTree"; }
373
374impl crate::CdpCommand for GetFullAXTreeParams {
375 const METHOD: &'static str = "Accessibility.getFullAXTree";
376 type Response = GetFullAXTreeReturns;
377}
378
379#[derive(Debug, Clone, Serialize, Deserialize, Default)]
383#[serde(rename_all = "camelCase")]
384pub struct GetRootAXNodeParams {
385 #[serde(skip_serializing_if = "Option::is_none")]
389 pub frameId: Option<crate::page::FrameId>,
390}
391
392#[derive(Debug, Clone, Serialize, Deserialize, Default)]
396#[serde(rename_all = "camelCase")]
397pub struct GetRootAXNodeReturns {
398
399 pub node: AXNode,
400}
401
402impl GetRootAXNodeParams { pub const METHOD: &'static str = "Accessibility.getRootAXNode"; }
403
404impl crate::CdpCommand for GetRootAXNodeParams {
405 const METHOD: &'static str = "Accessibility.getRootAXNode";
406 type Response = GetRootAXNodeReturns;
407}
408
409#[derive(Debug, Clone, Serialize, Deserialize, Default)]
413#[serde(rename_all = "camelCase")]
414pub struct GetAXNodeAndAncestorsParams {
415 #[serde(skip_serializing_if = "Option::is_none")]
418 pub nodeId: Option<crate::dom::NodeId>,
419 #[serde(skip_serializing_if = "Option::is_none")]
422 pub backendNodeId: Option<crate::dom::BackendNodeId>,
423 #[serde(skip_serializing_if = "Option::is_none")]
426 pub objectId: Option<crate::runtime::RemoteObjectId>,
427}
428
429#[derive(Debug, Clone, Serialize, Deserialize, Default)]
433#[serde(rename_all = "camelCase")]
434pub struct GetAXNodeAndAncestorsReturns {
435
436 pub nodes: Vec<AXNode>,
437}
438
439impl GetAXNodeAndAncestorsParams { pub const METHOD: &'static str = "Accessibility.getAXNodeAndAncestors"; }
440
441impl crate::CdpCommand for GetAXNodeAndAncestorsParams {
442 const METHOD: &'static str = "Accessibility.getAXNodeAndAncestors";
443 type Response = GetAXNodeAndAncestorsReturns;
444}
445
446#[derive(Debug, Clone, Serialize, Deserialize, Default)]
450#[serde(rename_all = "camelCase")]
451pub struct GetChildAXNodesParams {
452
453 pub id: AXNodeId,
454 #[serde(skip_serializing_if = "Option::is_none")]
458 pub frameId: Option<crate::page::FrameId>,
459}
460
461#[derive(Debug, Clone, Serialize, Deserialize, Default)]
465#[serde(rename_all = "camelCase")]
466pub struct GetChildAXNodesReturns {
467
468 pub nodes: Vec<AXNode>,
469}
470
471impl GetChildAXNodesParams { pub const METHOD: &'static str = "Accessibility.getChildAXNodes"; }
472
473impl crate::CdpCommand for GetChildAXNodesParams {
474 const METHOD: &'static str = "Accessibility.getChildAXNodes";
475 type Response = GetChildAXNodesReturns;
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize, Default)]
485#[serde(rename_all = "camelCase")]
486pub struct QueryAXTreeParams {
487 #[serde(skip_serializing_if = "Option::is_none")]
490 pub nodeId: Option<crate::dom::NodeId>,
491 #[serde(skip_serializing_if = "Option::is_none")]
494 pub backendNodeId: Option<crate::dom::BackendNodeId>,
495 #[serde(skip_serializing_if = "Option::is_none")]
498 pub objectId: Option<crate::runtime::RemoteObjectId>,
499 #[serde(skip_serializing_if = "Option::is_none")]
502 pub accessibleName: Option<String>,
503 #[serde(skip_serializing_if = "Option::is_none")]
506 pub role: Option<String>,
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize, Default)]
516#[serde(rename_all = "camelCase")]
517pub struct QueryAXTreeReturns {
518 pub nodes: Vec<AXNode>,
522}
523
524impl QueryAXTreeParams { pub const METHOD: &'static str = "Accessibility.queryAXTree"; }
525
526impl crate::CdpCommand for QueryAXTreeParams {
527 const METHOD: &'static str = "Accessibility.queryAXTree";
528 type Response = QueryAXTreeReturns;
529}