use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Role {
Application,
Region,
Dialog,
Alert,
Status,
List,
#[serde(rename = "listitem")]
ListItem,
Menu,
#[serde(rename = "menuitem")]
MenuItem,
Button,
Checkbox,
Radio,
Tab,
Textbox,
Heading,
Text,
#[serde(rename = "progressbar")]
ProgressBar,
Separator,
Scrollbar,
Table,
Row,
Cell,
Generic,
}
pub const SEMANTIC_ROLES: [&str; 23] = [
"application",
"region",
"dialog",
"alert",
"status",
"list",
"listitem",
"menu",
"menuitem",
"button",
"checkbox",
"radio",
"tab",
"textbox",
"heading",
"text",
"progressbar",
"separator",
"scrollbar",
"table",
"row",
"cell",
"generic",
];
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum Action {
Focus,
Activate,
Toggle,
SetValue,
Scroll,
Select,
Expand,
}
pub const SEMANTIC_ACTIONS: [&str; 7] = [
"focus", "activate", "toggle", "setValue", "scroll", "select", "expand",
];
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum Capability {
Tree,
IntendedGeometry,
ClippedGeometry,
States,
FocusState,
Actions,
ActionRecipes,
TextRanges,
RenderRevisions,
Logs,
PointerHitGrid,
}
pub const ADAPTER_CAPABILITIES: [&str; 11] = [
"tree",
"intended-geometry",
"clipped-geometry",
"states",
"focus-state",
"actions",
"action-recipes",
"text-ranges",
"render-revisions",
"logs",
"pointer-hit-grid",
];
pub fn valid_role(role: &str) -> bool {
SEMANTIC_ROLES.contains(&role)
}
pub fn valid_action(action: &str) -> bool {
SEMANTIC_ACTIONS.contains(&action)
}
pub fn valid_capability(capability: &str) -> bool {
ADAPTER_CAPABILITIES.contains(&capability)
}