aria_query/
role_element_map.rs

1use std::{hash::RandomState, sync::LazyLock};
2
3use ordered_hash_map::OrderedHashMap;
4
5use crate::{AriaRoleRelationConcept, roles_map::ROLES, types::AriaRoleDefinitionKey};
6
7pub static ROLE_ELEMENTS: LazyLock<
8    OrderedHashMap<AriaRoleDefinitionKey, Vec<AriaRoleRelationConcept>, RandomState>,
9> = LazyLock::new(|| {
10    let mut role_elements = OrderedHashMap::with_hasher(RandomState::new());
11
12    for (key, role) in ROLES.iter() {
13        let mut relation_concepts: Vec<AriaRoleRelationConcept> = vec![];
14
15        let concepts = role
16            .base_concepts
17            .iter()
18            .chain(role.related_concepts.iter());
19
20        for relation in concepts {
21            if relation.module == Some("HTML".into())
22                && let Some(concept) = &relation.concept
23            {
24                relation_concepts.push(concept.clone());
25            }
26        }
27
28        if !relation_concepts.is_empty() {
29            role_elements.insert(*key, relation_concepts);
30        }
31    }
32
33    role_elements
34});