Skip to main content

ecitygml_core/model/construction/
ground_surface.rs

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