Skip to main content

ecitygml_core/model/construction/
roof_surface.rs

1use crate::model::construction::{
2    AbstractConstructionSurface, AsAbstractConstructionSurface, AsAbstractConstructionSurfaceMut,
3};
4use crate::model::core::{
5    AsAbstractThematicSurface, AsAbstractThematicSurfaceMut, CityObjectKind, CityObjectRef,
6};
7use crate::operations::{Visitable, Visitor};
8
9#[derive(Debug, Clone, PartialEq)]
10pub struct RoofSurface {
11    pub abstract_construction_surface: AbstractConstructionSurface,
12}
13
14impl RoofSurface {
15    pub fn new(abstract_construction_surface: AbstractConstructionSurface) -> Self {
16        Self {
17            abstract_construction_surface,
18        }
19    }
20
21    pub fn iter_city_object<'a>(&'a self) -> impl Iterator<Item = CityObjectRef<'a>> + 'a {
22        std::iter::once(CityObjectRef::RoofSurface(self))
23    }
24}
25
26impl AsAbstractConstructionSurface for RoofSurface {
27    fn abstract_construction_surface(&self) -> &AbstractConstructionSurface {
28        &self.abstract_construction_surface
29    }
30}
31
32impl AsAbstractConstructionSurfaceMut for RoofSurface {
33    fn abstract_construction_surface_mut(&mut self) -> &mut AbstractConstructionSurface {
34        &mut self.abstract_construction_surface
35    }
36}
37
38crate::impl_abstract_construction_surface_traits!(RoofSurface);
39
40impl From<RoofSurface> for CityObjectKind {
41    fn from(item: RoofSurface) -> Self {
42        CityObjectKind::RoofSurface(item)
43    }
44}
45
46impl Visitable for RoofSurface {
47    fn accept<V: Visitor>(&self, visitor: &mut V) {
48        visitor.visit_roof_surface(self);
49    }
50}