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