Skip to main content

ecitygml_core/model/construction/
door_surface.rs

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