ecitygml_core/model/construction/
abstract_filling_surface.rs1use crate::model::construction::{DoorSurface, WindowSurface};
2use crate::model::core::{
3 AbstractThematicSurface, AsAbstractThematicSurface, AsAbstractThematicSurfaceMut,
4};
5
6#[derive(Debug, Clone, PartialEq)]
7pub struct AbstractFillingSurface {
8 pub(crate) abstract_thematic_surface: AbstractThematicSurface,
9}
10
11impl AbstractFillingSurface {
12 pub fn new(abstract_thematic_surface: AbstractThematicSurface) -> Self {
13 Self {
14 abstract_thematic_surface,
15 }
16 }
17}
18
19pub trait AsAbstractFillingSurface: AsAbstractThematicSurface {
20 fn abstract_filling_surface(&self) -> &AbstractFillingSurface;
21}
22
23pub trait AsAbstractFillingSurfaceMut:
24 AsAbstractThematicSurfaceMut + AsAbstractFillingSurface
25{
26 fn abstract_filling_surface_mut(&mut self) -> &mut AbstractFillingSurface;
27}
28
29impl AsAbstractFillingSurface for AbstractFillingSurface {
30 fn abstract_filling_surface(&self) -> &AbstractFillingSurface {
31 self
32 }
33}
34
35impl AsAbstractFillingSurfaceMut for AbstractFillingSurface {
36 fn abstract_filling_surface_mut(&mut self) -> &mut AbstractFillingSurface {
37 self
38 }
39}
40
41#[macro_export]
42macro_rules! impl_abstract_filling_surface_traits {
43 ($type:ty) => {
44 $crate::impl_abstract_thematic_surface_traits!($type);
45
46 impl $crate::model::core::AsAbstractThematicSurface for $type {
47 fn abstract_thematic_surface(&self) -> &$crate::model::core::AbstractThematicSurface {
48 use $crate::model::construction::AsAbstractFillingSurface;
49 &self.abstract_filling_surface().abstract_thematic_surface
50 }
51 }
52
53 impl $crate::model::core::AsAbstractThematicSurfaceMut for $type {
54 fn abstract_thematic_surface_mut(
55 &mut self,
56 ) -> &mut $crate::model::core::AbstractThematicSurface {
57 use $crate::model::construction::AsAbstractFillingSurfaceMut;
58 &mut self
59 .abstract_filling_surface_mut()
60 .abstract_thematic_surface
61 }
62 }
63 };
64}
65
66impl_abstract_filling_surface_traits!(AbstractFillingSurface);
67
68#[derive(Debug, Clone, PartialEq)]
69pub enum FillingSurfaceKind {
70 DoorSurface(DoorSurface),
71 WindowSurface(WindowSurface),
72}
73
74impl AsAbstractFillingSurface for FillingSurfaceKind {
75 fn abstract_filling_surface(&self) -> &AbstractFillingSurface {
76 match self {
77 FillingSurfaceKind::DoorSurface(surface) => surface.abstract_filling_surface(),
78 FillingSurfaceKind::WindowSurface(surface) => surface.abstract_filling_surface(),
79 }
80 }
81}
82
83impl AsAbstractFillingSurfaceMut for FillingSurfaceKind {
84 fn abstract_filling_surface_mut(&mut self) -> &mut AbstractFillingSurface {
85 match self {
86 FillingSurfaceKind::DoorSurface(surface) => surface.abstract_filling_surface_mut(),
87 FillingSurfaceKind::WindowSurface(surface) => surface.abstract_filling_surface_mut(),
88 }
89 }
90}
91
92impl_abstract_filling_surface_traits!(FillingSurfaceKind);