aria-query 0.0.6

Rust port of ARIA Query.
Documentation
use std::{hash::RandomState, sync::LazyLock};

use ordered_hash_map::OrderedHashMap;

use crate::{AriaRoleRelationConcept, roles_map::ROLES, types::AriaRoleDefinitionKey};

pub static ROLE_ELEMENTS: LazyLock<
    OrderedHashMap<AriaRoleDefinitionKey, Vec<AriaRoleRelationConcept>, RandomState>,
> = LazyLock::new(|| {
    let mut role_elements = OrderedHashMap::with_hasher(RandomState::new());

    for (key, role) in ROLES.iter() {
        let mut relation_concepts: Vec<AriaRoleRelationConcept> = vec![];

        let concepts = role
            .base_concepts
            .iter()
            .chain(role.related_concepts.iter());

        for relation in concepts {
            if relation.module == Some("HTML".into())
                && let Some(concept) = &relation.concept
            {
                relation_concepts.push(concept.clone());
            }
        }

        if !relation_concepts.is_empty() {
            role_elements.insert(*key, relation_concepts);
        }
    }

    role_elements
});