use alloc::collections::BTreeSet;
use muffy_rnc::{Identifier, NameClass};
pub fn class_names(name_class: &NameClass, prefix: bool) -> BTreeSet<String> {
match name_class {
NameClass::Name(name) => {
let local = identifier_string(&name.local);
if prefix && let Some(prefix) = &name.prefix {
[format!("{}:{local}", identifier_string(prefix))].into()
} else {
[local].into()
}
}
NameClass::Choice(classes) => classes
.iter()
.flat_map(|class| class_names(class, prefix))
.collect(),
NameClass::AnyName | NameClass::Except { .. } | NameClass::NamespaceName(_) => {
Default::default()
}
}
}
pub fn identifier_string(identifier: &Identifier) -> String {
identifier
.sub_components
.iter()
.fold(identifier.component.clone(), |string, component| {
string + "." + component
})
}