mod matching;
mod serialization;
use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub struct AriaSnapshot {
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expanded: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checked: Option<AriaCheckedState>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pressed: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub level: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_now: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_min: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_max: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_frame: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub frame_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub frame_name: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub iframe_refs: Vec<String>,
#[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
pub node_ref: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) element_index: Option<usize>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub children: Vec<AriaSnapshot>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum AriaCheckedState {
False,
True,
Mixed,
}
impl AriaSnapshot {
pub fn new() -> Self {
Self::default()
}
pub fn with_role(role: impl Into<String>) -> Self {
Self {
role: Some(role.into()),
..Self::default()
}
}
#[must_use]
pub fn name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
#[must_use]
pub fn child(mut self, child: AriaSnapshot) -> Self {
self.children.push(child);
self
}
}
impl fmt::Display for AriaSnapshot {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.to_yaml())
}
}
pub use super::aria_js::{aria_snapshot_js, aria_snapshot_with_refs_js};
#[cfg(test)]
mod tests;