#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub struct Namespace {
pub prefix: &'static str,
pub uri: &'static str,
}
impl Namespace {
pub const fn new(prefix: &'static str, uri: &'static str) -> Self {
Self { prefix, uri }
}
pub fn well_known(prefix: &str) -> Option<Namespace> {
WELL_KNOWN.iter().copied().find(|n| n.prefix == prefix)
}
pub fn qualify(&self, local: &str) -> String {
if self.prefix.is_empty() {
local.to_string()
} else {
format!("{}:{}", self.prefix, local)
}
}
}
pub const EML: Namespace = Namespace::new("eml", "http://www.energistics.org/energyml/data/commonv2");
pub const RESQML: Namespace = Namespace::new("resqml", "http://www.energistics.org/energyml/data/resqmlv2");
pub const WITSML: Namespace = Namespace::new("witsml", "http://www.energistics.org/energyml/data/witsmlv2");
pub const PRODML: Namespace = Namespace::new("prodml", "http://www.energistics.org/energyml/data/prodmlv2");
pub const XSI: Namespace = Namespace::new("xsi", "http://www.w3.org/2001/XMLSchema-instance");
pub const XSD: Namespace = Namespace::new("xsd", "http://www.w3.org/2001/XMLSchema");
pub const GML: Namespace = Namespace::new("gml", "http://www.opengis.net/gml/3.2");
pub const XLINK: Namespace = Namespace::new("xlink", "http://www.w3.org/1999/xlink");
pub const GCO: Namespace = Namespace::new("gco", "http://www.isotc211.org/2005/gco");
pub const GMD: Namespace = Namespace::new("gmd", "http://www.isotc211.org/2005/gmd");
const WELL_KNOWN: &[Namespace] = &[EML, RESQML, WITSML, PRODML, XSI, XSD, GML, XLINK, GCO, GMD];
pub fn well_known_namespaces() -> &'static [Namespace] {
WELL_KNOWN
}