use crate::constraints::{
Constraint, ConstraintContext, HasLabelConstraint, KeyboardAccessibleConstraint,
MinTouchTargetConstraint, NoOverflowConstraint, ValidRoleConstraint,
};
use crate::{VerificationError, Viewport};
use accesskit::NodeId;
use std::collections::BTreeMap;
fn violation_to_error(v: crate::constraints::Violation) -> VerificationError {
match v {
crate::constraints::Violation::MissingLabel { element } => {
VerificationError::missing_label(element)
}
crate::constraints::Violation::EmptyLabel { element } => {
VerificationError::empty_label(element)
}
crate::constraints::Violation::TouchTarget {
element,
actual_width,
actual_height,
..
} => VerificationError::below_min_target_size(element, actual_width, actual_height),
crate::constraints::Violation::Overflow {
element,
element_x,
element_y,
element_width,
element_height,
viewport_width,
viewport_height,
} => VerificationError::overflows_viewport(
element,
element_x,
element_y,
element_width,
element_height,
viewport_width,
viewport_height,
),
_ => VerificationError::tree_error("constraint violation"),
}
}
pub fn validate_has_label(
nodes: &BTreeMap<NodeId, accesskit::Node>,
node_id: NodeId,
) -> Result<(), VerificationError> {
let ctx = ConstraintContext {
nodes,
viewport: Viewport::new(0, 0),
};
HasLabelConstraint
.check(node_id, &ctx)
.map_err(violation_to_error)
}
pub fn validate_valid_role(
nodes: &BTreeMap<NodeId, accesskit::Node>,
node_id: NodeId,
) -> Result<(), VerificationError> {
let ctx = ConstraintContext {
nodes,
viewport: Viewport::new(0, 0),
};
ValidRoleConstraint
.check(node_id, &ctx)
.map_err(violation_to_error)
}
pub fn validate_min_target_size(
nodes: &BTreeMap<NodeId, accesskit::Node>,
node_id: NodeId,
) -> Result<(), VerificationError> {
let ctx = ConstraintContext {
nodes,
viewport: Viewport::new(0, 0),
};
MinTouchTargetConstraint
.check(node_id, &ctx)
.map_err(violation_to_error)
}
pub fn validate_no_overflow(
nodes: &BTreeMap<NodeId, accesskit::Node>,
node_id: NodeId,
viewport: Viewport,
) -> Result<(), VerificationError> {
let ctx = ConstraintContext { nodes, viewport };
NoOverflowConstraint
.check(node_id, &ctx)
.map_err(violation_to_error)
}
pub fn validate_keyboard_accessible(
nodes: &BTreeMap<NodeId, accesskit::Node>,
node_id: NodeId,
) -> Result<(), VerificationError> {
let ctx = ConstraintContext {
nodes,
viewport: Viewport::new(0, 0),
};
KeyboardAccessibleConstraint
.check(node_id, &ctx)
.map_err(violation_to_error)
}