aria_query/
role_element_map.rs1use 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});