Skip to main content

ecitygml_core/model/construction/
window_surface.rs

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