use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum AccessibilityRole {
Application,
Document,
Article,
Banner,
Complementary,
Contentinfo,
Form,
Main,
Navigation,
Region,
Search,
Button,
Checkbox,
Combobox,
Dialog,
Gridcell,
Link,
Listbox,
Menu,
Menubar,
Menuitem,
Menuitemcheckbox,
Menuitemradio,
Option,
Progressbar,
Radio,
Radiogroup,
Scrollbar,
Searchbox,
Slider,
Spinbutton,
Switch,
Tab,
Tablist,
Tabpanel,
Textbox,
Toolbar,
Tooltip,
Tree,
Treegrid,
Treeitem,
Alert,
Alertdialog,
Grid,
Heading,
Img,
List,
Listitem,
Log,
Marquee,
Math,
Note,
Separator,
Status,
Table,
Cell,
Columnheader,
Row,
Rowgroup,
Rowheader,
Timer,
Definition,
Directory,
Figure,
Group,
Paragraph,
Term,
Generic,
StaticText,
None,
Unknown,
Window,
Pane,
Titlebar,
Edit,
Custom,
Dataitem,
Datepicker,
Calendar,
Hyperlink,
Splitbutton,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum AccessibilityBackend {
Auto,
Cdp,
Uia,
Atspi,
Ax,
None,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct AccessibilityState {
#[serde(default, alias = "is_focused")]
pub is_focused: bool,
#[serde(default, alias = "is_disabled")]
pub is_disabled: bool,
#[serde(default, alias = "is_hidden")]
pub is_hidden: bool,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "is_expanded"
)]
pub is_expanded: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "is_selected"
)]
pub is_selected: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "is_checked")]
pub is_checked: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "is_pressed")]
pub is_pressed: Option<bool>,
#[serde(default, alias = "is_readonly")]
pub is_readonly: bool,
#[serde(default, alias = "is_required")]
pub is_required: bool,
#[serde(default, alias = "is_multiselectable")]
pub is_multiselectable: bool,
#[serde(default, alias = "is_editable")]
pub is_editable: bool,
#[serde(default, alias = "is_focusable")]
pub is_focusable: bool,
#[serde(default, alias = "is_modal")]
pub is_modal: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct AccessibilityBounds {
#[serde(alias = "x")]
pub x: i64,
#[serde(alias = "y")]
pub y: i64,
#[serde(alias = "width")]
pub width: i64,
#[serde(alias = "height")]
pub height: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct AccessibilityNode {
#[serde(rename = "ref")]
pub ref_id: String,
#[serde(alias = "role")]
pub role: AccessibilityRole,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "name")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "value")]
pub value: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "description"
)]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "bounds")]
pub bounds: Option<AccessibilityBounds>,
#[serde(default, alias = "state")]
pub state: AccessibilityState,
#[serde(default, alias = "is_interactive")]
pub is_interactive: bool,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "level")]
pub level: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "automation_id"
)]
pub automation_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "class_name")]
pub class_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "html_tag")]
pub html_tag: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "url")]
pub url: Option<String>,
#[serde(default, alias = "children")]
pub children: Vec<AccessibilityNode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct AccessibilitySnapshot {
#[serde(alias = "root")]
pub root: AccessibilityNode,
#[serde(alias = "timestamp")]
pub timestamp: f64,
#[serde(alias = "backend")]
pub backend: AccessibilityBackend,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "url")]
pub url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "title")]
pub title: Option<String>,
#[serde(default, alias = "total_nodes")]
pub total_nodes: i64,
#[serde(default, alias = "interactive_nodes")]
pub interactive_nodes: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum RoleCriterion {
Single(AccessibilityRole),
Any(Vec<AccessibilityRole>),
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct AccessibilitySelector {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "role")]
pub role: Option<RoleCriterion>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "name")]
pub name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "name_contains"
)]
pub name_contains: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "name_pattern"
)]
pub name_pattern: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "value")]
pub value: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "value_contains"
)]
pub value_contains: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "automation_id"
)]
pub automation_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "class_name")]
pub class_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "html_tag")]
pub html_tag: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "state")]
pub state: Option<AccessibilityState>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "is_interactive"
)]
pub is_interactive: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "ancestor")]
pub ancestor: Option<Box<AccessibilitySelector>>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "max_depth")]
pub max_depth: Option<i64>,
#[serde(default = "default_true", alias = "case_sensitive")]
pub case_sensitive: bool,
}
fn default_true() -> bool {
true
}