ecitygml_core/model/construction/
abstract_constructive_element.rs1use crate::model::core::{
2 AbstractOccupiedSpace, AsAbstractOccupiedSpace, AsAbstractOccupiedSpaceMut,
3};
4
5#[derive(Debug, Clone, PartialEq)]
6pub struct AbstractConstructiveElement {
7 pub abstract_occupied_space: AbstractOccupiedSpace,
8 is_structural_element: Option<bool>,
9}
10
11impl AbstractConstructiveElement {
12 pub fn new(abstract_occupied_space: AbstractOccupiedSpace) -> Self {
13 Self {
14 abstract_occupied_space,
15 is_structural_element: None,
16 }
17 }
18}
19
20pub trait AsAbstractConstructiveElement: AsAbstractOccupiedSpace {
21 fn abstract_constructive_element(&self) -> &AbstractConstructiveElement;
22}
23
24pub trait AsAbstractConstructiveElementMut:
25 AsAbstractOccupiedSpaceMut + AsAbstractConstructiveElement
26{
27 fn abstract_constructive_element_mut(&mut self) -> &mut AbstractConstructiveElement;
28}
29
30impl AsAbstractConstructiveElement for AbstractConstructiveElement {
31 fn abstract_constructive_element(&self) -> &AbstractConstructiveElement {
32 self
33 }
34}
35
36impl AsAbstractConstructiveElementMut for AbstractConstructiveElement {
37 fn abstract_constructive_element_mut(&mut self) -> &mut AbstractConstructiveElement {
38 self
39 }
40}
41
42#[macro_export]
43macro_rules! impl_abstract_constructive_element_traits {
44 ($type:ty) => {
45 $crate::impl_abstract_occupied_space_traits!($type);
46
47 impl $crate::model::core::AsAbstractOccupiedSpace for $type {
48 fn abstract_occupied_space(&self) -> &$crate::model::core::AbstractOccupiedSpace {
49 use $crate::model::construction::AsAbstractConstructiveElement;
50 &self.abstract_constructive_element().abstract_occupied_space
51 }
52 }
53
54 impl $crate::model::core::AsAbstractOccupiedSpaceMut for $type {
55 fn abstract_occupied_space_mut(
56 &mut self,
57 ) -> &mut $crate::model::core::AbstractOccupiedSpace {
58 use $crate::model::construction::AsAbstractConstructiveElementMut;
59 &mut self
60 .abstract_constructive_element_mut()
61 .abstract_occupied_space
62 }
63 }
64 };
65}
66
67impl_abstract_constructive_element_traits!(AbstractConstructiveElement);