ecitygml_core/model/construction/
roof_surface.rs1use 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}