Skip to main content

ecitygml_core/model/generics/
abstract_generic_attribute.rs

1use crate::model::generics::generic_attribute_set::GenericAttributeSet;
2use crate::model::generics::string_attribute::StringAttribute;
3use crate::model::generics::{DoubleAttribute, IntAttribute, MeasureAttribute};
4
5#[derive(Debug, Clone, PartialEq)]
6pub enum GenericAttributeKind {
7    StringAttribute(StringAttribute),
8    IntAttribute(IntAttribute),
9    DoubleAttribute(DoubleAttribute),
10    MeasureAttribute(MeasureAttribute),
11    GenericAttributeSet(GenericAttributeSet),
12}
13
14impl GenericAttributeKind {
15    pub fn name(&self) -> &str {
16        match self {
17            GenericAttributeKind::StringAttribute(x) => &x.name,
18            GenericAttributeKind::IntAttribute(x) => &x.name,
19            GenericAttributeKind::DoubleAttribute(x) => &x.name,
20            GenericAttributeKind::MeasureAttribute(x) => &x.name,
21            GenericAttributeKind::GenericAttributeSet(x) => &x.name,
22        }
23    }
24
25    pub fn as_string(&self) -> Option<&StringAttribute> {
26        if let GenericAttributeKind::StringAttribute(attr) = self {
27            Some(attr)
28        } else {
29            None
30        }
31    }
32
33    pub fn as_int(&self) -> Option<&IntAttribute> {
34        if let GenericAttributeKind::IntAttribute(attr) = self {
35            Some(attr)
36        } else {
37            None
38        }
39    }
40
41    pub fn as_double(&self) -> Option<&DoubleAttribute> {
42        if let GenericAttributeKind::DoubleAttribute(attr) = self {
43            Some(attr)
44        } else {
45            None
46        }
47    }
48}
49
50impl From<StringAttribute> for GenericAttributeKind {
51    fn from(attr: StringAttribute) -> Self {
52        GenericAttributeKind::StringAttribute(attr)
53    }
54}
55
56impl From<IntAttribute> for GenericAttributeKind {
57    fn from(attr: IntAttribute) -> Self {
58        GenericAttributeKind::IntAttribute(attr)
59    }
60}
61
62impl From<DoubleAttribute> for GenericAttributeKind {
63    fn from(attr: DoubleAttribute) -> Self {
64        GenericAttributeKind::DoubleAttribute(attr)
65    }
66}
67
68impl From<MeasureAttribute> for GenericAttributeKind {
69    fn from(attr: MeasureAttribute) -> Self {
70        GenericAttributeKind::MeasureAttribute(attr)
71    }
72}
73
74impl From<GenericAttributeSet> for GenericAttributeKind {
75    fn from(attr: GenericAttributeSet) -> Self {
76        GenericAttributeKind::GenericAttributeSet(attr)
77    }
78}