pub const CORE_NS: &str = "http://schemas.microsoft.com/3dmanufacturing/core/2015/02";
pub const CORE_TRIANGLESET_NS: &str =
"http://schemas.microsoft.com/3dmanufacturing/trianglesets/2021/07";
pub const CORE_TRIANGLESET_PREFIX: &str = "t";
pub const BOOLEAN_NS: &str = "http://schemas.3mf.io/3dmanufacturing/booleanoperations/2023/07";
pub const BOOLEAN_PREFIX: &str = "bo";
pub const PROD_NS: &str = "http://schemas.microsoft.com/3dmanufacturing/production/2015/06";
pub const PROD_PREFIX: &str = "p";
pub const BEAM_LATTICE_NS: &str =
"http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/02";
pub const BEAM_LATTICE_PREFIX: &str = "b";
pub const BEAM_LATTICE_BALLS_NS: &str =
"http://schemas.microsoft.com/3dmanufacturing/beamlattice/balls/2020/07";
pub const BEAM_LATTICE_BALLS_PREFIX: &str = "b2";
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ThreemfNamespace {
Core,
Boolean,
Prod,
BeamLattice,
CoreTriangleSet,
}
impl ThreemfNamespace {
pub fn uri(&self) -> &'static str {
match self {
Self::Core => CORE_NS,
Self::Boolean => BOOLEAN_NS,
Self::Prod => PROD_NS,
Self::BeamLattice => BEAM_LATTICE_NS,
Self::CoreTriangleSet => CORE_TRIANGLESET_NS,
}
}
pub fn prefix(&self) -> Option<&'static str> {
match self {
Self::Core => None, Self::Boolean => Some(BOOLEAN_PREFIX),
Self::Prod => Some(PROD_PREFIX),
Self::BeamLattice => Some(BEAM_LATTICE_PREFIX),
Self::CoreTriangleSet => Some(CORE_TRIANGLESET_PREFIX),
}
}
pub fn xmlns_declaration(&self) -> String {
match self.prefix() {
Some(prefix) => format!(r#" xmlns:{}="{}""#, prefix, self.uri()),
None => format!(r#" xmlns="{}""#, self.uri()),
}
}
}