Skip to main content

ecitygml_core/model/transportation/
traffic_area.rs

1use crate::model::core::{
2    AbstractThematicSurface, AsAbstractThematicSurface, AsAbstractThematicSurfaceMut,
3    CityObjectKind, CityObjectRef,
4};
5use crate::operations::{Visitable, Visitor};
6use egml::model::basic::Code;
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct TrafficArea {
10    pub(crate) abstract_thematic_surface: AbstractThematicSurface,
11    pub(crate) class: Option<Code>,
12    pub(crate) functions: Vec<Code>,
13    pub(crate) usages: Vec<Code>,
14    pub(crate) surface_material: Option<Code>,
15}
16
17impl TrafficArea {
18    pub fn new(abstract_thematic_surface: AbstractThematicSurface) -> Self {
19        Self {
20            abstract_thematic_surface,
21            class: None,
22            functions: Vec::new(),
23            usages: Vec::new(),
24            surface_material: None,
25        }
26    }
27
28    pub fn iter_city_object<'a>(&'a self) -> impl Iterator<Item = CityObjectRef<'a>> + 'a {
29        std::iter::once(CityObjectRef::TrafficArea(self))
30    }
31
32    pub fn class(&self) -> &Option<Code> {
33        &self.class
34    }
35
36    pub fn set_class(&mut self, class: Option<Code>) {
37        self.class = class;
38    }
39
40    pub fn functions(&self) -> &Vec<Code> {
41        &self.functions
42    }
43
44    pub fn set_functions(&mut self, functions: Vec<Code>) {
45        self.functions = functions;
46    }
47
48    pub fn usages(&self) -> &Vec<Code> {
49        &self.usages
50    }
51
52    pub fn set_usages(&mut self, usages: Vec<Code>) {
53        self.usages = usages;
54    }
55
56    pub fn surface_material(&self) -> Option<&Code> {
57        self.surface_material.as_ref()
58    }
59
60    pub fn set_surface_material(&mut self, surface_material: Option<Code>) {
61        self.surface_material = surface_material;
62    }
63}
64
65impl AsAbstractThematicSurface for TrafficArea {
66    fn abstract_thematic_surface(&self) -> &AbstractThematicSurface {
67        &self.abstract_thematic_surface
68    }
69}
70
71impl AsAbstractThematicSurfaceMut for TrafficArea {
72    fn abstract_thematic_surface_mut(&mut self) -> &mut AbstractThematicSurface {
73        &mut self.abstract_thematic_surface
74    }
75}
76
77crate::impl_abstract_thematic_surface_traits!(TrafficArea);
78
79impl From<TrafficArea> for CityObjectKind {
80    fn from(item: TrafficArea) -> Self {
81        CityObjectKind::TrafficArea(item)
82    }
83}
84
85impl Visitable for TrafficArea {
86    fn accept<V: Visitor>(&self, visitor: &mut V) {
87        visitor.visit_traffic_area(self);
88    }
89}