ecitygml-core 0.0.1-alpha.13

Core primitives and operations for processing CityGML data.
Documentation
use crate::model::generics::string_attribute::StringAttribute;
use crate::model::generics::{DoubleAttribute, IntAttribute, MeasureAttribute};

#[derive(Debug, Clone, PartialEq)]
pub enum GenericAttributeKind {
    StringAttribute(StringAttribute),
    IntAttribute(IntAttribute),
    DoubleAttribute(DoubleAttribute),
    MeasureAttribute(MeasureAttribute),
}

impl GenericAttributeKind {
    pub fn name(&self) -> &str {
        match self {
            GenericAttributeKind::StringAttribute(attr) => &attr.name,
            GenericAttributeKind::IntAttribute(attr) => &attr.name,
            GenericAttributeKind::DoubleAttribute(attr) => &attr.name,
            GenericAttributeKind::MeasureAttribute(attr) => &attr.name,
        }
    }

    pub fn as_string(&self) -> Option<&StringAttribute> {
        if let GenericAttributeKind::StringAttribute(attr) = self {
            Some(attr)
        } else {
            None
        }
    }

    pub fn as_int(&self) -> Option<&IntAttribute> {
        if let GenericAttributeKind::IntAttribute(attr) = self {
            Some(attr)
        } else {
            None
        }
    }

    pub fn as_double(&self) -> Option<&DoubleAttribute> {
        if let GenericAttributeKind::DoubleAttribute(attr) = self {
            Some(attr)
        } else {
            None
        }
    }
}

impl From<StringAttribute> for GenericAttributeKind {
    fn from(attr: StringAttribute) -> Self {
        GenericAttributeKind::StringAttribute(attr)
    }
}

impl From<IntAttribute> for GenericAttributeKind {
    fn from(attr: IntAttribute) -> Self {
        GenericAttributeKind::IntAttribute(attr)
    }
}

impl From<DoubleAttribute> for GenericAttributeKind {
    fn from(attr: DoubleAttribute) -> Self {
        GenericAttributeKind::DoubleAttribute(attr)
    }
}