egml_core/model/geometry/
abstract_geometry.rs1use crate::model::base::{AbstractGml, AsAbstractGml, AsAbstractGmlMut};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
8pub struct AbstractGeometry {
9 pub(crate) abstract_gml: AbstractGml,
10}
11
12impl AbstractGeometry {
13 pub fn new(abstract_gml: AbstractGml) -> Self {
15 Self { abstract_gml }
16 }
17}
18
19pub trait AsAbstractGeometry: AsAbstractGml {
21 fn abstract_geometry(&self) -> &AbstractGeometry;
23}
24
25pub trait AsAbstractGeometryMut: AsAbstractGeometry + AsAbstractGmlMut {
27 fn abstract_geometry_mut(&mut self) -> &mut AbstractGeometry;
29}
30
31impl AsAbstractGeometry for AbstractGeometry {
32 fn abstract_geometry(&self) -> &AbstractGeometry {
33 self
34 }
35}
36
37impl AsAbstractGeometryMut for AbstractGeometry {
38 fn abstract_geometry_mut(&mut self) -> &mut AbstractGeometry {
39 self
40 }
41}
42
43#[doc(hidden)]
44#[macro_export]
45macro_rules! impl_abstract_geometry_traits {
46 ($type:ty) => {
47 impl $crate::model::base::AsAbstractGml for $type {
48 fn abstract_gml(&self) -> &$crate::model::base::AbstractGml {
49 use $crate::model::geometry::AsAbstractGeometry;
50 &self.abstract_geometry().abstract_gml
51 }
52 }
53
54 impl $crate::model::base::AsAbstractGmlMut for $type {
55 fn abstract_gml_mut(&mut self) -> &mut $crate::model::base::AbstractGml {
56 use $crate::model::geometry::AsAbstractGeometryMut;
57 &mut self.abstract_geometry_mut().abstract_gml
58 }
59 }
60 };
61}
62
63impl_abstract_geometry_traits!(AbstractGeometry);