wzdx/model/
df.rs

1use geo::Geometry;
2use serde::{Deserialize, Serialize};
3
4use super::shared::FeedInfo;
5
6#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
7pub struct DeviceFeed {
8    pub r#type: String,
9    pub feed_info: FeedInfo,
10    pub features: Vec<FieldDeviceFeature>,
11    pub bbox: Option<Vec<f64>>
12}
13
14#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
15pub struct FieldDeviceFeature {
16    pub id: String,
17    pub r#type: String,
18    pub properties: Properties,
19    #[serde(deserialize_with = "geojson::de::deserialize_geometry")]
20    pub geometry: Geometry,
21    pub bbox: Option<Vec<f64>>
22}
23
24#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
25pub struct Properties {
26    pub core_details: FieldDeviceCoreDetails,
27    #[serde(flatten)]
28    pub arrow_board: Option<ArrowBoard>,
29    #[serde(flatten)]
30    pub camera: Option<Camera>,
31    #[serde(flatten)]
32    pub dynamic_message_sign: Option<DynamicMessageSign>,
33    #[serde(flatten)]
34    pub flashing_becon: Option<FlashingBeacon>,
35    #[serde(flatten)]
36    pub hybrid_sign: Option<HybridSign>,
37    #[serde(flatten)]
38    pub location_marker: Option<LocationMarker>,
39    #[serde(flatten)]
40    pub traffic_sensor: Option<TrafficSensor>,
41    #[serde(flatten)]
42    pub traffic_signal: Option<TrafficSignal>
43}
44
45#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
46pub struct FieldDeviceCoreDetails {
47    pub device_type: String,
48    pub data_source_id: String,
49    pub device_status: String,
50    pub update_date: String,
51    pub has_automatic_location: bool,
52    pub road_direction: Option<String>,
53    pub road_names: Option<Vec<String>>,
54    pub name: Option<String>,
55    pub description: Option<String>,
56    pub status_message: Option<Vec<String>>,
57    pub is_moving: Option<bool>,
58    pub road_event_ids: Option<Vec<String>>,
59    pub milepost: Option<f64>,
60    pub make: Option<String>,
61    pub model: Option<String>,
62    pub serial_number: Option<String>,
63    pub firmware_version: Option<String>,
64    pub velocity_kph: Option<f64>
65}
66
67#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
68pub struct ArrowBoard {
69    pub pattern: String,
70    #[deprecated]
71    pub is_moving: Option<bool>,
72    pub is_in_transport_position: Option<bool>
73}
74
75#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
76pub struct Camera {
77    pub image_url: Option<String>,
78    pub image_timestamp: Option<String>
79}
80
81#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
82pub struct DynamicMessageSign {
83    pub message_multi_string: String
84}
85
86#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
87pub struct FlashingBeacon {
88    pub function: String,
89    pub is_flashing: Option<bool>,
90    pub sign_text: Option<String>
91}
92
93#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
94pub struct HybridSign {
95    pub dynamic_message_function: String,
96    pub dynamic_message_text: Option<String>,
97    pub static_sign_text: Option<String>
98}
99
100#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
101pub struct LocationMarker {
102    pub marked_locations: Vec<MarkedLocationType>
103}
104
105#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
106pub struct MarkedLocationType {
107    pub r#type: String,
108    pub road_event_id: Option<String>
109}
110
111#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
112pub struct TrafficSensor {
113    pub collection_interval_start_date: String,
114    pub collection_interval_end_date: String,
115    pub average_speed_kph: Option<f64>,
116    pub volume_vph: Option<f64>,
117    pub occupancy_percent: Option<f64>,
118    pub lane_data: Option<Vec<TrafficSensorLaneData>>
119}
120
121#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
122pub struct TrafficSensorLaneData {
123    pub lane_order: u64,
124    pub road_event_id: Option<String>,
125    pub average_speed_kph: Option<f64>,
126    pub volume_vph: Option<f64>,
127    pub occupancy_percent: Option<f64>
128}
129
130#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
131pub struct TrafficSignal {
132    pub mode: String
133}