use {
super::{NamespacePrefix, NamespaceUrl},
std::{collections::HashMap, rc::Rc},
};
#[derive(Default, Debug, Clone, Eq, PartialEq)]
pub struct Namespaces {
defaultNamespace: Option<NamespaceUrl>,
namespaces: HashMap<NamespacePrefix, NamespaceUrl>,
}
impl Namespaces {
#[inline(always)]
pub fn default_namespace(&self) -> Option<NamespaceUrl> {
self.defaultNamespace
.as_ref().cloned()
}
#[inline(always)]
pub fn namespace_for_prefix(
&self,
prefix: &NamespacePrefix,
) -> Option<NamespaceUrl> {
self.namespaces
.get(prefix).cloned()
}
#[inline(always)]
pub(crate) fn empty() -> Rc<Self> {
Rc::new(Self::default())
}
#[inline(always)]
pub(crate) fn update(
&mut self,
prefix: Option<&NamespacePrefix>,
url: &NamespaceUrl,
) {
match prefix {
None => self.defaultNamespace = Some(url.clone()),
Some(prefix) => {
self.namespaces.insert(prefix.clone(), url.clone());
}
}
}
}