ecitygml_core/model/transportation/
traffic_area.rs1use 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}