use accesskit::NodeId;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
pub struct WidgetId(pub u64);
impl WidgetId {
pub fn from_node(id: NodeId) -> Self {
Self(id.0)
}
pub fn to_node_id(self) -> NodeId {
NodeId(self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
pub struct ContainerId(pub u64);
impl ContainerId {
pub fn from_node(id: NodeId) -> Self {
Self(id.0)
}
pub fn to_node_id(self) -> NodeId {
NodeId(self.0)
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct WidgetInfo {
pub id: WidgetId,
pub role: String,
pub label: Option<String>,
pub is_focusable: bool,
pub children: Vec<WidgetId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct WidgetA11y {
pub id: WidgetId,
pub violations: Vec<String>,
pub level: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ContrastViolation {
pub widget_id: WidgetId,
pub actual_ratio: f64,
pub required_ratio: f64,
pub context: String,
}
#[derive(Debug, Clone)]
pub struct VerifiedTree {
pub(crate) nodes: BTreeMap<NodeId, accesskit::Node>,
pub(crate) root: NodeId,
pub(crate) viewport: crate::Viewport,
}
impl VerifiedTree {
pub fn root(&self) -> NodeId {
self.root
}
pub fn viewport(&self) -> crate::Viewport {
self.viewport
}
pub fn nodes(&self) -> &BTreeMap<NodeId, accesskit::Node> {
&self.nodes
}
pub fn from_parts(
nodes: BTreeMap<NodeId, accesskit::Node>,
root: NodeId,
viewport: crate::Viewport,
) -> Self {
Self {
nodes,
root,
viewport,
}
}
}