ecitygml_core/model/generics/
abstract_generic_attribute.rs1use 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}