egml_core/model/
abstract_object_kind.rs1use crate::model::base::AbstractGmlKind;
2use crate::model::geometry::Envelope;
3use crate::model::geometry::primitives::AbstractSurfacePatchKind;
4
5#[derive(Debug, Clone, PartialEq)]
6pub enum AbstractObjectKind {
7 AbstractGmlKind(AbstractGmlKind),
8 AbstractSurfacePatchKind(AbstractSurfacePatchKind),
9 Envelope(Envelope),
10}
11
12#[macro_export]
13macro_rules! impl_from_for_abstract_object_kind {
14 ($variant:ident, $type:ty) => {
15 impl From<$type> for $crate::model::AbstractObjectKind {
16 #[allow(unreachable_code)]
17 fn from(x: $type) -> Self {
18 $crate::model::AbstractObjectKind::$variant(x.into())
19 }
20 }
21 };
22 ($variant:ident) => {
23 $crate::impl_from_for_abstract_object_kind!($variant, $variant);
24 };
25}
26
27#[macro_export]
28macro_rules! impl_try_from_for_abstract_object_kind {
29 ($variant:ident, $type:ty) => {
30 impl TryFrom<$crate::model::AbstractObjectKind> for $type {
31 type Error = ();
32 #[allow(unreachable_code)]
33 fn try_from(x: $crate::model::AbstractObjectKind) -> Result<Self, ()> {
34 match x {
35 $crate::model::AbstractObjectKind::$variant(k) => k.try_into().map_err(|_| ()),
36 #[allow(unreachable_patterns)]
37 _ => Err(()),
38 }
39 }
40 }
41 };
42 ($variant:ident) => {
43 $crate::impl_try_from_for_abstract_object_kind!($variant, $variant);
44 };
45}
46
47impl_from_for_abstract_object_kind!(AbstractGmlKind);
48impl_from_for_abstract_object_kind!(AbstractSurfacePatchKind);
49
50impl From<Envelope> for AbstractObjectKind {
51 fn from(x: Envelope) -> Self {
52 AbstractObjectKind::Envelope(x)
53 }
54}
55
56impl_try_from_for_abstract_object_kind!(AbstractGmlKind);
57impl_try_from_for_abstract_object_kind!(AbstractSurfacePatchKind);
58
59impl TryFrom<AbstractObjectKind> for Envelope {
60 type Error = ();
61 fn try_from(x: AbstractObjectKind) -> Result<Self, ()> {
62 match x {
63 AbstractObjectKind::Envelope(e) => Ok(e),
64 _ => Err(()),
65 }
66 }
67}