1#![allow(
3 clippy::doc_markdown,
4 clippy::missing_errors_doc,
5 clippy::must_use_candidate,
6 clippy::needless_pass_by_value,
7 clippy::return_self_not_must_use,
8 clippy::single_match_else
9)]
10
11use std::fmt;
12#[derive(Debug, Clone, PartialEq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct BusArrivalResponse {
15 #[cfg_attr(
17 feature = "serde",
18 serde(rename = "BusStopCode", with = "satay_runtime::serde_string::as_u32")
19 )]
20 pub bus_stop_code: u32,
21 #[cfg_attr(feature = "serde", serde(rename = "Services"))]
23 pub services: Vec<BusServiceArrival>,
24}
25#[derive(Debug, Clone, PartialEq)]
26#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
27pub struct BusServiceArrival {
28 #[cfg_attr(feature = "serde", serde(rename = "ServiceNo"))]
30 pub service_no: BusServiceNumber,
31 #[cfg_attr(feature = "serde", serde(rename = "Operator"))]
33 pub operator: BusOperator,
34 #[cfg_attr(
35 feature = "serde",
36 serde(
37 rename = "NextBus",
38 deserialize_with = "satay_runtime::treat_error_as_none::deserialize",
39 serialize_with = "satay_runtime::treat_error_as_none::serialize",
40 default,
41 skip_serializing_if = "Option::is_none"
42 )
43 )]
44 pub next_bus: Option<BusArrivalTiming>,
45 #[cfg_attr(
46 feature = "serde",
47 serde(
48 rename = "NextBus2",
49 deserialize_with = "satay_runtime::treat_error_as_none::deserialize",
50 serialize_with = "satay_runtime::treat_error_as_none::serialize",
51 default,
52 skip_serializing_if = "Option::is_none"
53 )
54 )]
55 pub next_bus2: Option<BusArrivalTiming>,
56 #[cfg_attr(
57 feature = "serde",
58 serde(
59 rename = "NextBus3",
60 deserialize_with = "satay_runtime::treat_error_as_none::deserialize",
61 serialize_with = "satay_runtime::treat_error_as_none::serialize",
62 default,
63 skip_serializing_if = "Option::is_none"
64 )
65 )]
66 pub next_bus3: Option<BusArrivalTiming>,
67}
68#[derive(Debug, Clone, PartialEq, Eq)]
70#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
71pub enum BusOperator {
72 #[cfg_attr(feature = "serde", serde(rename = "SBST"))]
73 Sbst,
74 #[cfg_attr(feature = "serde", serde(rename = "SMRT"))]
75 Smrt,
76 #[cfg_attr(feature = "serde", serde(rename = "TTS"))]
77 Tts,
78 #[cfg_attr(feature = "serde", serde(rename = "GAS"))]
79 Gas,
80}
81impl BusOperator {
82 pub const fn as_str(&self) -> &'static str {
83 match self {
84 Self::Sbst => "SBST",
85 Self::Smrt => "SMRT",
86 Self::Tts => "TTS",
87 Self::Gas => "GAS",
88 }
89 }
90}
91impl AsRef<str> for BusOperator {
92 fn as_ref(&self) -> &str {
93 self.as_str()
94 }
95}
96impl fmt::Display for BusOperator {
97 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
98 f.write_str(self.as_str())
99 }
100}
101#[nutype::nutype(
103 validate(regex = "^[a-zA-Z0-9]+$", len_char_max = 5),
104 derive(
105 Debug, Clone, PartialEq, Eq, PartialOrd, Ord, AsRef, Deref, TryFrom, Into, Display, Hash
106 ),
107 cfg_attr(feature = "serde", derive(Serialize, Deserialize))
108)]
109pub struct BusServiceNumber(String);
110pub type BusStopCode = u32;
112#[derive(Debug, Clone, PartialEq)]
113#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
114pub struct BusArrivalTiming {
115 #[cfg_attr(
117 feature = "serde",
118 serde(rename = "OriginCode", with = "satay_runtime::serde_string::as_u32")
119 )]
120 pub origin_code: u32,
121 #[cfg_attr(
123 feature = "serde",
124 serde(
125 rename = "DestinationCode",
126 with = "satay_runtime::serde_string::as_u32"
127 )
128 )]
129 pub destination_code: u32,
130 #[cfg_attr(
132 feature = "serde",
133 serde(
134 rename = "EstimatedArrival",
135 with = "satay_runtime::serde_string::as_offset_datetime"
136 )
137 )]
138 pub estimated_arrival: satay_runtime::OffsetDateTime,
139 #[cfg_attr(
141 feature = "serde",
142 serde(rename = "Latitude", with = "satay_runtime::serde_string::as_f64")
143 )]
144 pub latitude: f64,
145 #[cfg_attr(
147 feature = "serde",
148 serde(rename = "Longitude", with = "satay_runtime::serde_string::as_f64")
149 )]
150 pub longitude: f64,
151 #[cfg_attr(
153 feature = "serde",
154 serde(rename = "VisitNumber", with = "satay_runtime::serde_string::as_u8")
155 )]
156 pub visit_number: u8,
157 #[cfg_attr(feature = "serde", serde(rename = "Load"))]
159 pub load: BusArrivalTimingLoad,
160 #[cfg_attr(feature = "serde", serde(rename = "Feature"))]
162 pub feature: BusArrivalTimingFeature,
163 #[cfg_attr(feature = "serde", serde(rename = "Type"))]
165 pub r#type: BusArrivalTimingType,
166 #[cfg_attr(
168 feature = "serde",
169 serde(rename = "Monitored", with = "satay_runtime::serde_integer::as_bool")
170 )]
171 pub monitored: bool,
172}
173#[derive(Debug, Clone, PartialEq)]
174#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
175pub struct BusStopsResponse {
176 pub value: Vec<BusStop>,
178}
179#[derive(Debug, Clone, PartialEq)]
180#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
181pub struct BusStop {
182 #[cfg_attr(
184 feature = "serde",
185 serde(rename = "BusStopCode", with = "satay_runtime::serde_string::as_u32")
186 )]
187 pub bus_stop_code: u32,
188 #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
190 pub road_name: String,
191 #[cfg_attr(feature = "serde", serde(rename = "Description"))]
193 pub desc: String,
194 #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
196 pub lat: f64,
197 #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
199 pub long: f64,
200}
201#[derive(Debug, Clone, PartialEq)]
202#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
203pub struct TrafficImagesResponse {
204 pub value: Vec<TrafficImage>,
206}
207#[derive(Debug, Clone, PartialEq)]
208#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
209pub struct TrafficImage {
210 #[cfg_attr(
212 feature = "serde",
213 serde(rename = "CameraID", with = "satay_runtime::serde_string::as_u32")
214 )]
215 pub camera_id: u32,
216 #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
218 pub lat: f64,
219 #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
221 pub long: f64,
222 #[cfg_attr(feature = "serde", serde(rename = "ImageLink"))]
224 pub image_link: String,
225}
226#[derive(Debug, Clone, PartialEq)]
227#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
228pub struct TrafficSpeedBandsResponse {
229 pub value: Vec<TrafficSpeedBand>,
231}
232#[derive(Debug, Clone, PartialEq)]
233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
234pub struct TrafficSpeedBand {
235 #[cfg_attr(
237 feature = "serde",
238 serde(rename = "LinkID", with = "satay_runtime::serde_string::as_u64")
239 )]
240 pub link_id: u64,
241 #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
243 pub road_name: String,
244 #[cfg_attr(feature = "serde", serde(rename = "RoadCategory"))]
246 pub road_category: RoadCategory,
247 #[cfg_attr(feature = "serde", serde(rename = "SpeedBand"))]
249 pub speed_band: u8,
250 #[cfg_attr(
252 feature = "serde",
253 serde(rename = "MinimumSpeed", with = "satay_runtime::serde_string::as_u16")
254 )]
255 pub min_speed: u16,
256 #[cfg_attr(
258 feature = "serde",
259 serde(rename = "MaximumSpeed", with = "satay_runtime::serde_string::as_u16")
260 )]
261 pub max_speed: u16,
262 #[cfg_attr(
264 feature = "serde",
265 serde(rename = "StartLon", with = "satay_runtime::serde_string::as_f64")
266 )]
267 pub start_lon: f64,
268 #[cfg_attr(
270 feature = "serde",
271 serde(rename = "StartLat", with = "satay_runtime::serde_string::as_f64")
272 )]
273 pub start_lat: f64,
274 #[cfg_attr(
276 feature = "serde",
277 serde(rename = "EndLon", with = "satay_runtime::serde_string::as_f64")
278 )]
279 pub end_lon: f64,
280 #[cfg_attr(
282 feature = "serde",
283 serde(rename = "EndLat", with = "satay_runtime::serde_string::as_f64")
284 )]
285 pub end_lat: f64,
286}
287#[derive(Debug, Clone, PartialEq, Eq)]
289pub enum RoadCategory {
290 Expressway,
291 MajorArterialRoads,
292 ArterialRoads,
293 MinorArterialRoads,
294 SmallRoads,
295 SlipRoads,
296 NoCategoryInfoAvail,
297 Other(String),
298}
299impl RoadCategory {
300 pub fn as_str(&self) -> &str {
301 match self {
302 Self::Expressway => "A",
303 Self::MajorArterialRoads => "B",
304 Self::ArterialRoads => "C",
305 Self::MinorArterialRoads => "D",
306 Self::SmallRoads => "E",
307 Self::SlipRoads => "F",
308 Self::NoCategoryInfoAvail => "G",
309 Self::Other(value) => value.as_str(),
310 }
311 }
312}
313impl AsRef<str> for RoadCategory {
314 fn as_ref(&self) -> &str {
315 self.as_str()
316 }
317}
318impl fmt::Display for RoadCategory {
319 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
320 f.write_str(self.as_str())
321 }
322}
323#[cfg(feature = "serde")]
324impl serde::Serialize for RoadCategory {
325 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
326 where
327 S: serde::Serializer,
328 {
329 serializer.serialize_str(self.as_str())
330 }
331}
332#[cfg(feature = "serde")]
333impl<'de> serde::Deserialize<'de> for RoadCategory {
334 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
335 where
336 D: serde::Deserializer<'de>,
337 {
338 let value = String::deserialize(deserializer)?;
339 Ok(match value.as_str() {
340 "A" => Self::Expressway,
341 "B" => Self::MajorArterialRoads,
342 "C" => Self::ArterialRoads,
343 "D" => Self::MinorArterialRoads,
344 "E" => Self::SmallRoads,
345 "F" => Self::SlipRoads,
346 "G" => Self::NoCategoryInfoAvail,
347 _ => Self::Other(value),
348 })
349 }
350}
351#[derive(Debug, Clone, PartialEq)]
352#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
353pub struct TrafficFlowResponse {
354 pub value: Vec<TrafficFlowLink>,
356}
357#[derive(Debug, Clone, PartialEq)]
358#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
359pub struct TrafficFlowLink {
360 #[cfg_attr(feature = "serde", serde(rename = "Link"))]
362 pub link: String,
363}
364#[derive(Debug, Clone, PartialEq)]
365#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
366pub struct TrafficIncidentsResponse {
367 pub value: Vec<TrafficIncident>,
369}
370#[derive(Debug, Clone, PartialEq)]
371#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
372pub struct TrafficIncident {
373 #[cfg_attr(feature = "serde", serde(rename = "Type"))]
375 pub incident_type: IncidentType,
376 #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
378 pub lat: f64,
379 #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
381 pub long: f64,
382 #[cfg_attr(feature = "serde", serde(rename = "Message"))]
384 pub msg: String,
385}
386#[derive(Debug, Clone, PartialEq, Eq)]
388pub enum IncidentType {
389 Accident,
390 RoadWorks,
391 VehicleBreakdown,
392 Weather,
393 Obstacle,
394 RoadBlock,
395 HeavyTraffic,
396 Misc,
397 Diversion,
398 UnattendedVehicle,
399 Roadwork,
400 Other(String),
401}
402impl IncidentType {
403 pub fn as_str(&self) -> &str {
404 match self {
405 Self::Accident => "Accident",
406 Self::RoadWorks => "Road Works",
407 Self::VehicleBreakdown => "Vehicle breakdown",
408 Self::Weather => "Weather",
409 Self::Obstacle => "Obstacle",
410 Self::RoadBlock => "Road Block",
411 Self::HeavyTraffic => "Heavy Traffic",
412 Self::Misc => "Misc.",
413 Self::Diversion => "Diversion",
414 Self::UnattendedVehicle => "Unattended Vehicle",
415 Self::Roadwork => "Roadwork",
416 Self::Other(value) => value.as_str(),
417 }
418 }
419}
420impl AsRef<str> for IncidentType {
421 fn as_ref(&self) -> &str {
422 self.as_str()
423 }
424}
425impl fmt::Display for IncidentType {
426 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
427 f.write_str(self.as_str())
428 }
429}
430#[cfg(feature = "serde")]
431impl serde::Serialize for IncidentType {
432 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
433 where
434 S: serde::Serializer,
435 {
436 serializer.serialize_str(self.as_str())
437 }
438}
439#[cfg(feature = "serde")]
440impl<'de> serde::Deserialize<'de> for IncidentType {
441 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
442 where
443 D: serde::Deserializer<'de>,
444 {
445 let value = String::deserialize(deserializer)?;
446 Ok(match value.as_str() {
447 "Accident" => Self::Accident,
448 "Road Works" => Self::RoadWorks,
449 "Vehicle breakdown" => Self::VehicleBreakdown,
450 "Weather" => Self::Weather,
451 "Obstacle" => Self::Obstacle,
452 "Road Block" => Self::RoadBlock,
453 "Heavy Traffic" => Self::HeavyTraffic,
454 "Misc." => Self::Misc,
455 "Diversion" => Self::Diversion,
456 "Unattended Vehicle" => Self::UnattendedVehicle,
457 "Roadwork" => Self::Roadwork,
458 _ => Self::Other(value),
459 })
460 }
461}
462#[nutype::nutype(
464 validate(regex = "^[A-Z]+-\\d{6}-\\d{4}$"),
465 derive(
466 Debug, Clone, PartialEq, Eq, PartialOrd, Ord, AsRef, Deref, TryFrom, Into, Display, Hash
467 ),
468 cfg_attr(feature = "serde", derive(Serialize, Deserialize))
469)]
470pub struct EventId(String);
471#[derive(Debug, Clone, PartialEq)]
472#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
473pub struct RoadWorksResponse {
474 pub value: Vec<RoadDetails>,
476}
477#[derive(Debug, Clone, PartialEq)]
478#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
479pub struct RoadDetails {
480 #[cfg_attr(feature = "serde", serde(rename = "EventID"))]
482 pub event_id: EventId,
483 #[cfg_attr(
485 feature = "serde",
486 serde(rename = "StartDate", with = "satay_runtime::serde_string::as_date")
487 )]
488 pub start_date: satay_runtime::Date,
489 #[cfg_attr(
491 feature = "serde",
492 serde(rename = "EndDate", with = "satay_runtime::serde_string::as_date")
493 )]
494 pub end_date: satay_runtime::Date,
495 #[cfg_attr(feature = "serde", serde(rename = "SvcDept"))]
497 pub service_dept: String,
498 #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
500 pub road_name: String,
501 #[cfg_attr(feature = "serde", serde(rename = "Other"))]
503 pub other: String,
504}
505#[derive(Debug, Clone, PartialEq)]
506#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
507pub struct RoadOpeningsResponse {
508 pub value: Vec<RoadDetails>,
510}
511#[derive(Debug, Clone, PartialEq)]
512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
513pub struct TaxiAvailabilityResponse {
514 pub value: Vec<Coordinates>,
516}
517#[derive(Debug, Clone, PartialEq)]
518#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
519pub struct Coordinates {
520 #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
522 pub lat: f64,
523 #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
525 pub long: f64,
526}
527#[derive(Debug, Clone, PartialEq)]
528#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
529pub struct FacilitiesMaintenanceResponse {
530 pub value: Vec<FacilityMaintenanceLink>,
532}
533#[derive(Debug, Clone, PartialEq)]
534#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
535pub struct FacilityMaintenanceLink {
536 #[cfg_attr(feature = "serde", serde(rename = "Link"))]
538 pub link: String,
539}
540#[derive(Debug, Clone, PartialEq, Eq)]
542#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
543pub enum StationCode {
544 #[cfg_attr(feature = "serde", serde(rename = "NS1"))]
545 Ns1,
546 #[cfg_attr(feature = "serde", serde(rename = "NS2"))]
547 Ns2,
548 #[cfg_attr(feature = "serde", serde(rename = "NS3"))]
549 Ns3,
550 #[cfg_attr(feature = "serde", serde(rename = "NS3A"))]
551 Ns3a,
552 #[cfg_attr(feature = "serde", serde(rename = "NS4"))]
553 Ns4,
554 #[cfg_attr(feature = "serde", serde(rename = "NS5"))]
555 Ns5,
556 #[cfg_attr(feature = "serde", serde(rename = "NS6"))]
557 Ns6,
558 #[cfg_attr(feature = "serde", serde(rename = "NS7"))]
559 Ns7,
560 #[cfg_attr(feature = "serde", serde(rename = "NS8"))]
561 Ns8,
562 #[cfg_attr(feature = "serde", serde(rename = "NS9"))]
563 Ns9,
564 #[cfg_attr(feature = "serde", serde(rename = "NS10"))]
565 Ns10,
566 #[cfg_attr(feature = "serde", serde(rename = "NS11"))]
567 Ns11,
568 #[cfg_attr(feature = "serde", serde(rename = "NS12"))]
569 Ns12,
570 #[cfg_attr(feature = "serde", serde(rename = "NS13"))]
571 Ns13,
572 #[cfg_attr(feature = "serde", serde(rename = "NS14"))]
573 Ns14,
574 #[cfg_attr(feature = "serde", serde(rename = "NS15"))]
575 Ns15,
576 #[cfg_attr(feature = "serde", serde(rename = "NS16"))]
577 Ns16,
578 #[cfg_attr(feature = "serde", serde(rename = "NS17"))]
579 Ns17,
580 #[cfg_attr(feature = "serde", serde(rename = "NS18"))]
581 Ns18,
582 #[cfg_attr(feature = "serde", serde(rename = "NS19"))]
583 Ns19,
584 #[cfg_attr(feature = "serde", serde(rename = "NS20"))]
585 Ns20,
586 #[cfg_attr(feature = "serde", serde(rename = "NS21"))]
587 Ns21,
588 #[cfg_attr(feature = "serde", serde(rename = "NS22"))]
589 Ns22,
590 #[cfg_attr(feature = "serde", serde(rename = "NS23"))]
591 Ns23,
592 #[cfg_attr(feature = "serde", serde(rename = "NS24"))]
593 Ns24,
594 #[cfg_attr(feature = "serde", serde(rename = "NS25"))]
595 Ns25,
596 #[cfg_attr(feature = "serde", serde(rename = "NS26"))]
597 Ns26,
598 #[cfg_attr(feature = "serde", serde(rename = "NS27"))]
599 Ns27,
600 #[cfg_attr(feature = "serde", serde(rename = "NS28"))]
601 Ns28,
602 #[cfg_attr(feature = "serde", serde(rename = "EW1"))]
603 Ew1,
604 #[cfg_attr(feature = "serde", serde(rename = "EW2"))]
605 Ew2,
606 #[cfg_attr(feature = "serde", serde(rename = "EW3"))]
607 Ew3,
608 #[cfg_attr(feature = "serde", serde(rename = "EW4"))]
609 Ew4,
610 #[cfg_attr(feature = "serde", serde(rename = "EW5"))]
611 Ew5,
612 #[cfg_attr(feature = "serde", serde(rename = "EW6"))]
613 Ew6,
614 #[cfg_attr(feature = "serde", serde(rename = "EW7"))]
615 Ew7,
616 #[cfg_attr(feature = "serde", serde(rename = "EW8"))]
617 Ew8,
618 #[cfg_attr(feature = "serde", serde(rename = "EW9"))]
619 Ew9,
620 #[cfg_attr(feature = "serde", serde(rename = "EW10"))]
621 Ew10,
622 #[cfg_attr(feature = "serde", serde(rename = "EW11"))]
623 Ew11,
624 #[cfg_attr(feature = "serde", serde(rename = "EW12"))]
625 Ew12,
626 #[cfg_attr(feature = "serde", serde(rename = "EW13"))]
627 Ew13,
628 #[cfg_attr(feature = "serde", serde(rename = "EW14"))]
629 Ew14,
630 #[cfg_attr(feature = "serde", serde(rename = "EW15"))]
631 Ew15,
632 #[cfg_attr(feature = "serde", serde(rename = "EW16"))]
633 Ew16,
634 #[cfg_attr(feature = "serde", serde(rename = "EW17"))]
635 Ew17,
636 #[cfg_attr(feature = "serde", serde(rename = "EW18"))]
637 Ew18,
638 #[cfg_attr(feature = "serde", serde(rename = "EW19"))]
639 Ew19,
640 #[cfg_attr(feature = "serde", serde(rename = "EW20"))]
641 Ew20,
642 #[cfg_attr(feature = "serde", serde(rename = "EW21"))]
643 Ew21,
644 #[cfg_attr(feature = "serde", serde(rename = "EW22"))]
645 Ew22,
646 #[cfg_attr(feature = "serde", serde(rename = "EW23"))]
647 Ew23,
648 #[cfg_attr(feature = "serde", serde(rename = "EW24"))]
649 Ew24,
650 #[cfg_attr(feature = "serde", serde(rename = "EW25"))]
651 Ew25,
652 #[cfg_attr(feature = "serde", serde(rename = "EW26"))]
653 Ew26,
654 #[cfg_attr(feature = "serde", serde(rename = "EW27"))]
655 Ew27,
656 #[cfg_attr(feature = "serde", serde(rename = "EW28"))]
657 Ew28,
658 #[cfg_attr(feature = "serde", serde(rename = "EW29"))]
659 Ew29,
660 #[cfg_attr(feature = "serde", serde(rename = "EW30"))]
661 Ew30,
662 #[cfg_attr(feature = "serde", serde(rename = "EW31"))]
663 Ew31,
664 #[cfg_attr(feature = "serde", serde(rename = "EW32"))]
665 Ew32,
666 #[cfg_attr(feature = "serde", serde(rename = "EW33"))]
667 Ew33,
668 #[cfg_attr(feature = "serde", serde(rename = "CG"))]
669 Cg,
670 #[cfg_attr(feature = "serde", serde(rename = "CG1"))]
671 Cg1,
672 #[cfg_attr(feature = "serde", serde(rename = "CG2"))]
673 Cg2,
674 #[cfg_attr(feature = "serde", serde(rename = "NE1"))]
675 Ne1,
676 #[cfg_attr(feature = "serde", serde(rename = "NE2"))]
677 Ne2,
678 #[cfg_attr(feature = "serde", serde(rename = "NE3"))]
679 Ne3,
680 #[cfg_attr(feature = "serde", serde(rename = "NE4"))]
681 Ne4,
682 #[cfg_attr(feature = "serde", serde(rename = "NE5"))]
683 Ne5,
684 #[cfg_attr(feature = "serde", serde(rename = "NE6"))]
685 Ne6,
686 #[cfg_attr(feature = "serde", serde(rename = "NE7"))]
687 Ne7,
688 #[cfg_attr(feature = "serde", serde(rename = "NE8"))]
689 Ne8,
690 #[cfg_attr(feature = "serde", serde(rename = "NE9"))]
691 Ne9,
692 #[cfg_attr(feature = "serde", serde(rename = "NE10"))]
693 Ne10,
694 #[cfg_attr(feature = "serde", serde(rename = "NE11"))]
695 Ne11,
696 #[cfg_attr(feature = "serde", serde(rename = "NE12"))]
697 Ne12,
698 #[cfg_attr(feature = "serde", serde(rename = "NE13"))]
699 Ne13,
700 #[cfg_attr(feature = "serde", serde(rename = "NE14"))]
701 Ne14,
702 #[cfg_attr(feature = "serde", serde(rename = "NE15"))]
703 Ne15,
704 #[cfg_attr(feature = "serde", serde(rename = "NE16"))]
705 Ne16,
706 #[cfg_attr(feature = "serde", serde(rename = "NE17"))]
707 Ne17,
708 #[cfg_attr(feature = "serde", serde(rename = "CC1"))]
709 Cc1,
710 #[cfg_attr(feature = "serde", serde(rename = "CC2"))]
711 Cc2,
712 #[cfg_attr(feature = "serde", serde(rename = "CC3"))]
713 Cc3,
714 #[cfg_attr(feature = "serde", serde(rename = "CC4"))]
715 Cc4,
716 #[cfg_attr(feature = "serde", serde(rename = "CC5"))]
717 Cc5,
718 #[cfg_attr(feature = "serde", serde(rename = "CC6"))]
719 Cc6,
720 #[cfg_attr(feature = "serde", serde(rename = "CC7"))]
721 Cc7,
722 #[cfg_attr(feature = "serde", serde(rename = "CC8"))]
723 Cc8,
724 #[cfg_attr(feature = "serde", serde(rename = "CC9"))]
725 Cc9,
726 #[cfg_attr(feature = "serde", serde(rename = "CC10"))]
727 Cc10,
728 #[cfg_attr(feature = "serde", serde(rename = "CC11"))]
729 Cc11,
730 #[cfg_attr(feature = "serde", serde(rename = "CC12"))]
731 Cc12,
732 #[cfg_attr(feature = "serde", serde(rename = "CC13"))]
733 Cc13,
734 #[cfg_attr(feature = "serde", serde(rename = "CC14"))]
735 Cc14,
736 #[cfg_attr(feature = "serde", serde(rename = "CC15"))]
737 Cc15,
738 #[cfg_attr(feature = "serde", serde(rename = "CC16"))]
739 Cc16,
740 #[cfg_attr(feature = "serde", serde(rename = "CC17"))]
741 Cc17,
742 #[cfg_attr(feature = "serde", serde(rename = "CC18"))]
743 Cc18,
744 #[cfg_attr(feature = "serde", serde(rename = "CC19"))]
745 Cc19,
746 #[cfg_attr(feature = "serde", serde(rename = "CC20"))]
747 Cc20,
748 #[cfg_attr(feature = "serde", serde(rename = "CC21"))]
749 Cc21,
750 #[cfg_attr(feature = "serde", serde(rename = "CC22"))]
751 Cc22,
752 #[cfg_attr(feature = "serde", serde(rename = "CC23"))]
753 Cc23,
754 #[cfg_attr(feature = "serde", serde(rename = "CC24"))]
755 Cc24,
756 #[cfg_attr(feature = "serde", serde(rename = "CC25"))]
757 Cc25,
758 #[cfg_attr(feature = "serde", serde(rename = "CC26"))]
759 Cc26,
760 #[cfg_attr(feature = "serde", serde(rename = "CC27"))]
761 Cc27,
762 #[cfg_attr(feature = "serde", serde(rename = "CC28"))]
763 Cc28,
764 #[cfg_attr(feature = "serde", serde(rename = "CC29"))]
765 Cc29,
766 #[cfg_attr(feature = "serde", serde(rename = "CC30"))]
767 Cc30,
768 #[cfg_attr(feature = "serde", serde(rename = "CC31"))]
769 Cc31,
770 #[cfg_attr(feature = "serde", serde(rename = "CC32"))]
771 Cc32,
772 #[cfg_attr(feature = "serde", serde(rename = "CC33"))]
773 Cc33,
774 #[cfg_attr(feature = "serde", serde(rename = "CC34"))]
775 Cc34,
776 #[cfg_attr(feature = "serde", serde(rename = "CE1"))]
777 Ce1,
778 #[cfg_attr(feature = "serde", serde(rename = "CE2"))]
779 Ce2,
780 #[cfg_attr(feature = "serde", serde(rename = "DT1"))]
781 Dt1,
782 #[cfg_attr(feature = "serde", serde(rename = "DT2"))]
783 Dt2,
784 #[cfg_attr(feature = "serde", serde(rename = "DT3"))]
785 Dt3,
786 #[cfg_attr(feature = "serde", serde(rename = "DT4"))]
787 Dt4,
788 #[cfg_attr(feature = "serde", serde(rename = "DT5"))]
789 Dt5,
790 #[cfg_attr(feature = "serde", serde(rename = "DT6"))]
791 Dt6,
792 #[cfg_attr(feature = "serde", serde(rename = "DT7"))]
793 Dt7,
794 #[cfg_attr(feature = "serde", serde(rename = "DT8"))]
795 Dt8,
796 #[cfg_attr(feature = "serde", serde(rename = "DT9"))]
797 Dt9,
798 #[cfg_attr(feature = "serde", serde(rename = "DT10"))]
799 Dt10,
800 #[cfg_attr(feature = "serde", serde(rename = "DT11"))]
801 Dt11,
802 #[cfg_attr(feature = "serde", serde(rename = "DT12"))]
803 Dt12,
804 #[cfg_attr(feature = "serde", serde(rename = "DT13"))]
805 Dt13,
806 #[cfg_attr(feature = "serde", serde(rename = "DT14"))]
807 Dt14,
808 #[cfg_attr(feature = "serde", serde(rename = "DT15"))]
809 Dt15,
810 #[cfg_attr(feature = "serde", serde(rename = "DT16"))]
811 Dt16,
812 #[cfg_attr(feature = "serde", serde(rename = "DT17"))]
813 Dt17,
814 #[cfg_attr(feature = "serde", serde(rename = "DT18"))]
815 Dt18,
816 #[cfg_attr(feature = "serde", serde(rename = "DT19"))]
817 Dt19,
818 #[cfg_attr(feature = "serde", serde(rename = "DT20"))]
819 Dt20,
820 #[cfg_attr(feature = "serde", serde(rename = "DT21"))]
821 Dt21,
822 #[cfg_attr(feature = "serde", serde(rename = "DT22"))]
823 Dt22,
824 #[cfg_attr(feature = "serde", serde(rename = "DT23"))]
825 Dt23,
826 #[cfg_attr(feature = "serde", serde(rename = "DT24"))]
827 Dt24,
828 #[cfg_attr(feature = "serde", serde(rename = "DT25"))]
829 Dt25,
830 #[cfg_attr(feature = "serde", serde(rename = "DT26"))]
831 Dt26,
832 #[cfg_attr(feature = "serde", serde(rename = "DT27"))]
833 Dt27,
834 #[cfg_attr(feature = "serde", serde(rename = "DT28"))]
835 Dt28,
836 #[cfg_attr(feature = "serde", serde(rename = "DT29"))]
837 Dt29,
838 #[cfg_attr(feature = "serde", serde(rename = "DT30"))]
839 Dt30,
840 #[cfg_attr(feature = "serde", serde(rename = "DT31"))]
841 Dt31,
842 #[cfg_attr(feature = "serde", serde(rename = "DT32"))]
843 Dt32,
844 #[cfg_attr(feature = "serde", serde(rename = "DT33"))]
845 Dt33,
846 #[cfg_attr(feature = "serde", serde(rename = "DT34"))]
847 Dt34,
848 #[cfg_attr(feature = "serde", serde(rename = "DT35"))]
849 Dt35,
850 #[cfg_attr(feature = "serde", serde(rename = "DT36"))]
851 Dt36,
852 #[cfg_attr(feature = "serde", serde(rename = "DT37"))]
853 Dt37,
854 #[cfg_attr(feature = "serde", serde(rename = "DE1"))]
855 De1,
856 #[cfg_attr(feature = "serde", serde(rename = "DE2"))]
857 De2,
858 #[cfg_attr(feature = "serde", serde(rename = "TE1"))]
859 Te1,
860 #[cfg_attr(feature = "serde", serde(rename = "TE2"))]
861 Te2,
862 #[cfg_attr(feature = "serde", serde(rename = "TE3"))]
863 Te3,
864 #[cfg_attr(feature = "serde", serde(rename = "TE4"))]
865 Te4,
866 #[cfg_attr(feature = "serde", serde(rename = "TE5"))]
867 Te5,
868 #[cfg_attr(feature = "serde", serde(rename = "TE6"))]
869 Te6,
870 #[cfg_attr(feature = "serde", serde(rename = "TE7"))]
871 Te7,
872 #[cfg_attr(feature = "serde", serde(rename = "TE8"))]
873 Te8,
874 #[cfg_attr(feature = "serde", serde(rename = "TE9"))]
875 Te9,
876 #[cfg_attr(feature = "serde", serde(rename = "TE10"))]
877 Te10,
878 #[cfg_attr(feature = "serde", serde(rename = "TE11"))]
879 Te11,
880 #[cfg_attr(feature = "serde", serde(rename = "TE12"))]
881 Te12,
882 #[cfg_attr(feature = "serde", serde(rename = "TE13"))]
883 Te13,
884 #[cfg_attr(feature = "serde", serde(rename = "TE14"))]
885 Te14,
886 #[cfg_attr(feature = "serde", serde(rename = "TE15"))]
887 Te15,
888 #[cfg_attr(feature = "serde", serde(rename = "TE16"))]
889 Te16,
890 #[cfg_attr(feature = "serde", serde(rename = "TE17"))]
891 Te17,
892 #[cfg_attr(feature = "serde", serde(rename = "TE18"))]
893 Te18,
894 #[cfg_attr(feature = "serde", serde(rename = "TE19"))]
895 Te19,
896 #[cfg_attr(feature = "serde", serde(rename = "TE20"))]
897 Te20,
898 #[cfg_attr(feature = "serde", serde(rename = "TE21"))]
899 Te21,
900 #[cfg_attr(feature = "serde", serde(rename = "TE22"))]
901 Te22,
902 #[cfg_attr(feature = "serde", serde(rename = "TE22A"))]
903 Te22a,
904 #[cfg_attr(feature = "serde", serde(rename = "TE23"))]
905 Te23,
906 #[cfg_attr(feature = "serde", serde(rename = "TE24"))]
907 Te24,
908 #[cfg_attr(feature = "serde", serde(rename = "TE25"))]
909 Te25,
910 #[cfg_attr(feature = "serde", serde(rename = "TE26"))]
911 Te26,
912 #[cfg_attr(feature = "serde", serde(rename = "TE27"))]
913 Te27,
914 #[cfg_attr(feature = "serde", serde(rename = "TE28"))]
915 Te28,
916 #[cfg_attr(feature = "serde", serde(rename = "TE29"))]
917 Te29,
918 #[cfg_attr(feature = "serde", serde(rename = "TE30"))]
919 Te30,
920 #[cfg_attr(feature = "serde", serde(rename = "TE31"))]
921 Te31,
922 #[cfg_attr(feature = "serde", serde(rename = "TE32"))]
923 Te32,
924 #[cfg_attr(feature = "serde", serde(rename = "BP1"))]
925 Bp1,
926 #[cfg_attr(feature = "serde", serde(rename = "BP2"))]
927 Bp2,
928 #[cfg_attr(feature = "serde", serde(rename = "BP3"))]
929 Bp3,
930 #[cfg_attr(feature = "serde", serde(rename = "BP4"))]
931 Bp4,
932 #[cfg_attr(feature = "serde", serde(rename = "BP5"))]
933 Bp5,
934 #[cfg_attr(feature = "serde", serde(rename = "BP6"))]
935 Bp6,
936 #[cfg_attr(feature = "serde", serde(rename = "BP7"))]
937 Bp7,
938 #[cfg_attr(feature = "serde", serde(rename = "BP8"))]
939 Bp8,
940 #[cfg_attr(feature = "serde", serde(rename = "BP9"))]
941 Bp9,
942 #[cfg_attr(feature = "serde", serde(rename = "BP10"))]
943 Bp10,
944 #[cfg_attr(feature = "serde", serde(rename = "BP11"))]
945 Bp11,
946 #[cfg_attr(feature = "serde", serde(rename = "BP12"))]
947 Bp12,
948 #[cfg_attr(feature = "serde", serde(rename = "BP13"))]
949 Bp13,
950 #[cfg_attr(feature = "serde", serde(rename = "BP14"))]
951 Bp14,
952 #[cfg_attr(feature = "serde", serde(rename = "STC"))]
953 Stc,
954 #[cfg_attr(feature = "serde", serde(rename = "SE1"))]
955 Se1,
956 #[cfg_attr(feature = "serde", serde(rename = "SE2"))]
957 Se2,
958 #[cfg_attr(feature = "serde", serde(rename = "SE3"))]
959 Se3,
960 #[cfg_attr(feature = "serde", serde(rename = "SE4"))]
961 Se4,
962 #[cfg_attr(feature = "serde", serde(rename = "SE5"))]
963 Se5,
964 #[cfg_attr(feature = "serde", serde(rename = "SW1"))]
965 Sw1,
966 #[cfg_attr(feature = "serde", serde(rename = "SW2"))]
967 Sw2,
968 #[cfg_attr(feature = "serde", serde(rename = "SW3"))]
969 Sw3,
970 #[cfg_attr(feature = "serde", serde(rename = "SW4"))]
971 Sw4,
972 #[cfg_attr(feature = "serde", serde(rename = "SW5"))]
973 Sw5,
974 #[cfg_attr(feature = "serde", serde(rename = "SW6"))]
975 Sw6,
976 #[cfg_attr(feature = "serde", serde(rename = "SW7"))]
977 Sw7,
978 #[cfg_attr(feature = "serde", serde(rename = "SW8"))]
979 Sw8,
980 #[cfg_attr(feature = "serde", serde(rename = "PTC"))]
981 Ptc,
982 #[cfg_attr(feature = "serde", serde(rename = "PE1"))]
983 Pe1,
984 #[cfg_attr(feature = "serde", serde(rename = "PE2"))]
985 Pe2,
986 #[cfg_attr(feature = "serde", serde(rename = "PE3"))]
987 Pe3,
988 #[cfg_attr(feature = "serde", serde(rename = "PE4"))]
989 Pe4,
990 #[cfg_attr(feature = "serde", serde(rename = "PE5"))]
991 Pe5,
992 #[cfg_attr(feature = "serde", serde(rename = "PE6"))]
993 Pe6,
994 #[cfg_attr(feature = "serde", serde(rename = "PE7"))]
995 Pe7,
996 #[cfg_attr(feature = "serde", serde(rename = "PW1"))]
997 Pw1,
998 #[cfg_attr(feature = "serde", serde(rename = "PW2"))]
999 Pw2,
1000 #[cfg_attr(feature = "serde", serde(rename = "PW3"))]
1001 Pw3,
1002 #[cfg_attr(feature = "serde", serde(rename = "PW4"))]
1003 Pw4,
1004 #[cfg_attr(feature = "serde", serde(rename = "PW5"))]
1005 Pw5,
1006 #[cfg_attr(feature = "serde", serde(rename = "PW6"))]
1007 Pw6,
1008 #[cfg_attr(feature = "serde", serde(rename = "PW7"))]
1009 Pw7,
1010 #[cfg_attr(feature = "serde", serde(rename = "CR1"))]
1011 Cr1,
1012 #[cfg_attr(feature = "serde", serde(rename = "CR2"))]
1013 Cr2,
1014 #[cfg_attr(feature = "serde", serde(rename = "CR3"))]
1015 Cr3,
1016 #[cfg_attr(feature = "serde", serde(rename = "CR4"))]
1017 Cr4,
1018 #[cfg_attr(feature = "serde", serde(rename = "CR5"))]
1019 Cr5,
1020 #[cfg_attr(feature = "serde", serde(rename = "CR6"))]
1021 Cr6,
1022 #[cfg_attr(feature = "serde", serde(rename = "CR7"))]
1023 Cr7,
1024 #[cfg_attr(feature = "serde", serde(rename = "CR8"))]
1025 Cr8,
1026 #[cfg_attr(feature = "serde", serde(rename = "CR9"))]
1027 Cr9,
1028 #[cfg_attr(feature = "serde", serde(rename = "CR10"))]
1029 Cr10,
1030 #[cfg_attr(feature = "serde", serde(rename = "CR11"))]
1031 Cr11,
1032 #[cfg_attr(feature = "serde", serde(rename = "CR12"))]
1033 Cr12,
1034 #[cfg_attr(feature = "serde", serde(rename = "CR13"))]
1035 Cr13,
1036 #[cfg_attr(feature = "serde", serde(rename = "CR14"))]
1037 Cr14,
1038 #[cfg_attr(feature = "serde", serde(rename = "CR15"))]
1039 Cr15,
1040 #[cfg_attr(feature = "serde", serde(rename = "CR16"))]
1041 Cr16,
1042 #[cfg_attr(feature = "serde", serde(rename = "CR17"))]
1043 Cr17,
1044 #[cfg_attr(feature = "serde", serde(rename = "CR18"))]
1045 Cr18,
1046 #[cfg_attr(feature = "serde", serde(rename = "CR19"))]
1047 Cr19,
1048 #[cfg_attr(feature = "serde", serde(rename = "CR20"))]
1049 Cr20,
1050 #[cfg_attr(feature = "serde", serde(rename = "CR21"))]
1051 Cr21,
1052 #[cfg_attr(feature = "serde", serde(rename = "CR22"))]
1053 Cr22,
1054 #[cfg_attr(feature = "serde", serde(rename = "CR23"))]
1055 Cr23,
1056 #[cfg_attr(feature = "serde", serde(rename = "CP1"))]
1057 Cp1,
1058 #[cfg_attr(feature = "serde", serde(rename = "CP2"))]
1059 Cp2,
1060 #[cfg_attr(feature = "serde", serde(rename = "CP3"))]
1061 Cp3,
1062 #[cfg_attr(feature = "serde", serde(rename = "CP4"))]
1063 Cp4,
1064 #[cfg_attr(feature = "serde", serde(rename = "JS1"))]
1065 Js1,
1066 #[cfg_attr(feature = "serde", serde(rename = "JS2"))]
1067 Js2,
1068 #[cfg_attr(feature = "serde", serde(rename = "JS2A"))]
1069 Js2a,
1070 #[cfg_attr(feature = "serde", serde(rename = "JS3"))]
1071 Js3,
1072 #[cfg_attr(feature = "serde", serde(rename = "JS4"))]
1073 Js4,
1074 #[cfg_attr(feature = "serde", serde(rename = "JS5"))]
1075 Js5,
1076 #[cfg_attr(feature = "serde", serde(rename = "JS6"))]
1077 Js6,
1078 #[cfg_attr(feature = "serde", serde(rename = "JS7"))]
1079 Js7,
1080 #[cfg_attr(feature = "serde", serde(rename = "JS8"))]
1081 Js8,
1082 #[cfg_attr(feature = "serde", serde(rename = "JS9"))]
1083 Js9,
1084 #[cfg_attr(feature = "serde", serde(rename = "JS10"))]
1085 Js10,
1086 #[cfg_attr(feature = "serde", serde(rename = "JS11"))]
1087 Js11,
1088 #[cfg_attr(feature = "serde", serde(rename = "JS12"))]
1089 Js12,
1090 #[cfg_attr(feature = "serde", serde(rename = "JW1"))]
1091 Jw1,
1092 #[cfg_attr(feature = "serde", serde(rename = "JW2"))]
1093 Jw2,
1094 #[cfg_attr(feature = "serde", serde(rename = "JW3"))]
1095 Jw3,
1096 #[cfg_attr(feature = "serde", serde(rename = "JW4"))]
1097 Jw4,
1098 #[cfg_attr(feature = "serde", serde(rename = "JW5"))]
1099 Jw5,
1100 #[cfg_attr(feature = "serde", serde(rename = "JE1"))]
1101 Je1,
1102 #[cfg_attr(feature = "serde", serde(rename = "JE2"))]
1103 Je2,
1104 #[cfg_attr(feature = "serde", serde(rename = "JE3"))]
1105 Je3,
1106 #[cfg_attr(feature = "serde", serde(rename = "JE4"))]
1107 Je4,
1108 #[cfg_attr(feature = "serde", serde(rename = "JE5"))]
1109 Je5,
1110 #[cfg_attr(feature = "serde", serde(rename = "JE6"))]
1111 Je6,
1112 #[cfg_attr(feature = "serde", serde(rename = "JE7"))]
1113 Je7,
1114}
1115impl StationCode {
1116 pub const fn as_str(&self) -> &'static str {
1117 match self {
1118 Self::Ns1 => "NS1",
1119 Self::Ns2 => "NS2",
1120 Self::Ns3 => "NS3",
1121 Self::Ns3a => "NS3A",
1122 Self::Ns4 => "NS4",
1123 Self::Ns5 => "NS5",
1124 Self::Ns6 => "NS6",
1125 Self::Ns7 => "NS7",
1126 Self::Ns8 => "NS8",
1127 Self::Ns9 => "NS9",
1128 Self::Ns10 => "NS10",
1129 Self::Ns11 => "NS11",
1130 Self::Ns12 => "NS12",
1131 Self::Ns13 => "NS13",
1132 Self::Ns14 => "NS14",
1133 Self::Ns15 => "NS15",
1134 Self::Ns16 => "NS16",
1135 Self::Ns17 => "NS17",
1136 Self::Ns18 => "NS18",
1137 Self::Ns19 => "NS19",
1138 Self::Ns20 => "NS20",
1139 Self::Ns21 => "NS21",
1140 Self::Ns22 => "NS22",
1141 Self::Ns23 => "NS23",
1142 Self::Ns24 => "NS24",
1143 Self::Ns25 => "NS25",
1144 Self::Ns26 => "NS26",
1145 Self::Ns27 => "NS27",
1146 Self::Ns28 => "NS28",
1147 Self::Ew1 => "EW1",
1148 Self::Ew2 => "EW2",
1149 Self::Ew3 => "EW3",
1150 Self::Ew4 => "EW4",
1151 Self::Ew5 => "EW5",
1152 Self::Ew6 => "EW6",
1153 Self::Ew7 => "EW7",
1154 Self::Ew8 => "EW8",
1155 Self::Ew9 => "EW9",
1156 Self::Ew10 => "EW10",
1157 Self::Ew11 => "EW11",
1158 Self::Ew12 => "EW12",
1159 Self::Ew13 => "EW13",
1160 Self::Ew14 => "EW14",
1161 Self::Ew15 => "EW15",
1162 Self::Ew16 => "EW16",
1163 Self::Ew17 => "EW17",
1164 Self::Ew18 => "EW18",
1165 Self::Ew19 => "EW19",
1166 Self::Ew20 => "EW20",
1167 Self::Ew21 => "EW21",
1168 Self::Ew22 => "EW22",
1169 Self::Ew23 => "EW23",
1170 Self::Ew24 => "EW24",
1171 Self::Ew25 => "EW25",
1172 Self::Ew26 => "EW26",
1173 Self::Ew27 => "EW27",
1174 Self::Ew28 => "EW28",
1175 Self::Ew29 => "EW29",
1176 Self::Ew30 => "EW30",
1177 Self::Ew31 => "EW31",
1178 Self::Ew32 => "EW32",
1179 Self::Ew33 => "EW33",
1180 Self::Cg => "CG",
1181 Self::Cg1 => "CG1",
1182 Self::Cg2 => "CG2",
1183 Self::Ne1 => "NE1",
1184 Self::Ne2 => "NE2",
1185 Self::Ne3 => "NE3",
1186 Self::Ne4 => "NE4",
1187 Self::Ne5 => "NE5",
1188 Self::Ne6 => "NE6",
1189 Self::Ne7 => "NE7",
1190 Self::Ne8 => "NE8",
1191 Self::Ne9 => "NE9",
1192 Self::Ne10 => "NE10",
1193 Self::Ne11 => "NE11",
1194 Self::Ne12 => "NE12",
1195 Self::Ne13 => "NE13",
1196 Self::Ne14 => "NE14",
1197 Self::Ne15 => "NE15",
1198 Self::Ne16 => "NE16",
1199 Self::Ne17 => "NE17",
1200 Self::Cc1 => "CC1",
1201 Self::Cc2 => "CC2",
1202 Self::Cc3 => "CC3",
1203 Self::Cc4 => "CC4",
1204 Self::Cc5 => "CC5",
1205 Self::Cc6 => "CC6",
1206 Self::Cc7 => "CC7",
1207 Self::Cc8 => "CC8",
1208 Self::Cc9 => "CC9",
1209 Self::Cc10 => "CC10",
1210 Self::Cc11 => "CC11",
1211 Self::Cc12 => "CC12",
1212 Self::Cc13 => "CC13",
1213 Self::Cc14 => "CC14",
1214 Self::Cc15 => "CC15",
1215 Self::Cc16 => "CC16",
1216 Self::Cc17 => "CC17",
1217 Self::Cc18 => "CC18",
1218 Self::Cc19 => "CC19",
1219 Self::Cc20 => "CC20",
1220 Self::Cc21 => "CC21",
1221 Self::Cc22 => "CC22",
1222 Self::Cc23 => "CC23",
1223 Self::Cc24 => "CC24",
1224 Self::Cc25 => "CC25",
1225 Self::Cc26 => "CC26",
1226 Self::Cc27 => "CC27",
1227 Self::Cc28 => "CC28",
1228 Self::Cc29 => "CC29",
1229 Self::Cc30 => "CC30",
1230 Self::Cc31 => "CC31",
1231 Self::Cc32 => "CC32",
1232 Self::Cc33 => "CC33",
1233 Self::Cc34 => "CC34",
1234 Self::Ce1 => "CE1",
1235 Self::Ce2 => "CE2",
1236 Self::Dt1 => "DT1",
1237 Self::Dt2 => "DT2",
1238 Self::Dt3 => "DT3",
1239 Self::Dt4 => "DT4",
1240 Self::Dt5 => "DT5",
1241 Self::Dt6 => "DT6",
1242 Self::Dt7 => "DT7",
1243 Self::Dt8 => "DT8",
1244 Self::Dt9 => "DT9",
1245 Self::Dt10 => "DT10",
1246 Self::Dt11 => "DT11",
1247 Self::Dt12 => "DT12",
1248 Self::Dt13 => "DT13",
1249 Self::Dt14 => "DT14",
1250 Self::Dt15 => "DT15",
1251 Self::Dt16 => "DT16",
1252 Self::Dt17 => "DT17",
1253 Self::Dt18 => "DT18",
1254 Self::Dt19 => "DT19",
1255 Self::Dt20 => "DT20",
1256 Self::Dt21 => "DT21",
1257 Self::Dt22 => "DT22",
1258 Self::Dt23 => "DT23",
1259 Self::Dt24 => "DT24",
1260 Self::Dt25 => "DT25",
1261 Self::Dt26 => "DT26",
1262 Self::Dt27 => "DT27",
1263 Self::Dt28 => "DT28",
1264 Self::Dt29 => "DT29",
1265 Self::Dt30 => "DT30",
1266 Self::Dt31 => "DT31",
1267 Self::Dt32 => "DT32",
1268 Self::Dt33 => "DT33",
1269 Self::Dt34 => "DT34",
1270 Self::Dt35 => "DT35",
1271 Self::Dt36 => "DT36",
1272 Self::Dt37 => "DT37",
1273 Self::De1 => "DE1",
1274 Self::De2 => "DE2",
1275 Self::Te1 => "TE1",
1276 Self::Te2 => "TE2",
1277 Self::Te3 => "TE3",
1278 Self::Te4 => "TE4",
1279 Self::Te5 => "TE5",
1280 Self::Te6 => "TE6",
1281 Self::Te7 => "TE7",
1282 Self::Te8 => "TE8",
1283 Self::Te9 => "TE9",
1284 Self::Te10 => "TE10",
1285 Self::Te11 => "TE11",
1286 Self::Te12 => "TE12",
1287 Self::Te13 => "TE13",
1288 Self::Te14 => "TE14",
1289 Self::Te15 => "TE15",
1290 Self::Te16 => "TE16",
1291 Self::Te17 => "TE17",
1292 Self::Te18 => "TE18",
1293 Self::Te19 => "TE19",
1294 Self::Te20 => "TE20",
1295 Self::Te21 => "TE21",
1296 Self::Te22 => "TE22",
1297 Self::Te22a => "TE22A",
1298 Self::Te23 => "TE23",
1299 Self::Te24 => "TE24",
1300 Self::Te25 => "TE25",
1301 Self::Te26 => "TE26",
1302 Self::Te27 => "TE27",
1303 Self::Te28 => "TE28",
1304 Self::Te29 => "TE29",
1305 Self::Te30 => "TE30",
1306 Self::Te31 => "TE31",
1307 Self::Te32 => "TE32",
1308 Self::Bp1 => "BP1",
1309 Self::Bp2 => "BP2",
1310 Self::Bp3 => "BP3",
1311 Self::Bp4 => "BP4",
1312 Self::Bp5 => "BP5",
1313 Self::Bp6 => "BP6",
1314 Self::Bp7 => "BP7",
1315 Self::Bp8 => "BP8",
1316 Self::Bp9 => "BP9",
1317 Self::Bp10 => "BP10",
1318 Self::Bp11 => "BP11",
1319 Self::Bp12 => "BP12",
1320 Self::Bp13 => "BP13",
1321 Self::Bp14 => "BP14",
1322 Self::Stc => "STC",
1323 Self::Se1 => "SE1",
1324 Self::Se2 => "SE2",
1325 Self::Se3 => "SE3",
1326 Self::Se4 => "SE4",
1327 Self::Se5 => "SE5",
1328 Self::Sw1 => "SW1",
1329 Self::Sw2 => "SW2",
1330 Self::Sw3 => "SW3",
1331 Self::Sw4 => "SW4",
1332 Self::Sw5 => "SW5",
1333 Self::Sw6 => "SW6",
1334 Self::Sw7 => "SW7",
1335 Self::Sw8 => "SW8",
1336 Self::Ptc => "PTC",
1337 Self::Pe1 => "PE1",
1338 Self::Pe2 => "PE2",
1339 Self::Pe3 => "PE3",
1340 Self::Pe4 => "PE4",
1341 Self::Pe5 => "PE5",
1342 Self::Pe6 => "PE6",
1343 Self::Pe7 => "PE7",
1344 Self::Pw1 => "PW1",
1345 Self::Pw2 => "PW2",
1346 Self::Pw3 => "PW3",
1347 Self::Pw4 => "PW4",
1348 Self::Pw5 => "PW5",
1349 Self::Pw6 => "PW6",
1350 Self::Pw7 => "PW7",
1351 Self::Cr1 => "CR1",
1352 Self::Cr2 => "CR2",
1353 Self::Cr3 => "CR3",
1354 Self::Cr4 => "CR4",
1355 Self::Cr5 => "CR5",
1356 Self::Cr6 => "CR6",
1357 Self::Cr7 => "CR7",
1358 Self::Cr8 => "CR8",
1359 Self::Cr9 => "CR9",
1360 Self::Cr10 => "CR10",
1361 Self::Cr11 => "CR11",
1362 Self::Cr12 => "CR12",
1363 Self::Cr13 => "CR13",
1364 Self::Cr14 => "CR14",
1365 Self::Cr15 => "CR15",
1366 Self::Cr16 => "CR16",
1367 Self::Cr17 => "CR17",
1368 Self::Cr18 => "CR18",
1369 Self::Cr19 => "CR19",
1370 Self::Cr20 => "CR20",
1371 Self::Cr21 => "CR21",
1372 Self::Cr22 => "CR22",
1373 Self::Cr23 => "CR23",
1374 Self::Cp1 => "CP1",
1375 Self::Cp2 => "CP2",
1376 Self::Cp3 => "CP3",
1377 Self::Cp4 => "CP4",
1378 Self::Js1 => "JS1",
1379 Self::Js2 => "JS2",
1380 Self::Js2a => "JS2A",
1381 Self::Js3 => "JS3",
1382 Self::Js4 => "JS4",
1383 Self::Js5 => "JS5",
1384 Self::Js6 => "JS6",
1385 Self::Js7 => "JS7",
1386 Self::Js8 => "JS8",
1387 Self::Js9 => "JS9",
1388 Self::Js10 => "JS10",
1389 Self::Js11 => "JS11",
1390 Self::Js12 => "JS12",
1391 Self::Jw1 => "JW1",
1392 Self::Jw2 => "JW2",
1393 Self::Jw3 => "JW3",
1394 Self::Jw4 => "JW4",
1395 Self::Jw5 => "JW5",
1396 Self::Je1 => "JE1",
1397 Self::Je2 => "JE2",
1398 Self::Je3 => "JE3",
1399 Self::Je4 => "JE4",
1400 Self::Je5 => "JE5",
1401 Self::Je6 => "JE6",
1402 Self::Je7 => "JE7",
1403 }
1404 }
1405}
1406impl AsRef<str> for StationCode {
1407 fn as_ref(&self) -> &str {
1408 self.as_str()
1409 }
1410}
1411impl fmt::Display for StationCode {
1412 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1413 f.write_str(self.as_str())
1414 }
1415}
1416#[derive(Debug, Clone, PartialEq, Eq)]
1418#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1419pub enum BusArrivalTimingLoad {
1420 #[cfg_attr(feature = "serde", serde(rename = "SEA"))]
1421 SeatsAvailable,
1422 #[cfg_attr(feature = "serde", serde(rename = "SDA"))]
1423 StandingAvailable,
1424 #[cfg_attr(feature = "serde", serde(rename = "LSD"))]
1425 LimitedStanding,
1426 #[cfg_attr(feature = "serde", serde(rename = ""))]
1427 Unspecified,
1428}
1429impl BusArrivalTimingLoad {
1430 pub const fn as_str(&self) -> &'static str {
1431 match self {
1432 Self::SeatsAvailable => "SEA",
1433 Self::StandingAvailable => "SDA",
1434 Self::LimitedStanding => "LSD",
1435 Self::Unspecified => "",
1436 }
1437 }
1438}
1439impl AsRef<str> for BusArrivalTimingLoad {
1440 fn as_ref(&self) -> &str {
1441 self.as_str()
1442 }
1443}
1444impl fmt::Display for BusArrivalTimingLoad {
1445 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1446 f.write_str(self.as_str())
1447 }
1448}
1449#[derive(Debug, Clone, PartialEq, Eq)]
1451#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1452pub enum BusArrivalTimingFeature {
1453 #[cfg_attr(feature = "serde", serde(rename = "WAB"))]
1454 WheelchairAccessible,
1455 #[cfg_attr(feature = "serde", serde(rename = ""))]
1456 Unspecified,
1457}
1458impl BusArrivalTimingFeature {
1459 pub const fn as_str(&self) -> &'static str {
1460 match self {
1461 Self::WheelchairAccessible => "WAB",
1462 Self::Unspecified => "",
1463 }
1464 }
1465}
1466impl AsRef<str> for BusArrivalTimingFeature {
1467 fn as_ref(&self) -> &str {
1468 self.as_str()
1469 }
1470}
1471impl fmt::Display for BusArrivalTimingFeature {
1472 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1473 f.write_str(self.as_str())
1474 }
1475}
1476#[derive(Debug, Clone, PartialEq, Eq)]
1478#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1479pub enum BusArrivalTimingType {
1480 #[cfg_attr(feature = "serde", serde(rename = "SD"))]
1481 SingleDecker,
1482 #[cfg_attr(feature = "serde", serde(rename = "DD"))]
1483 DoubleDecker,
1484 #[cfg_attr(feature = "serde", serde(rename = "BD"))]
1485 Bendy,
1486 #[cfg_attr(feature = "serde", serde(rename = ""))]
1487 Unspecified,
1488}
1489impl BusArrivalTimingType {
1490 pub const fn as_str(&self) -> &'static str {
1491 match self {
1492 Self::SingleDecker => "SD",
1493 Self::DoubleDecker => "DD",
1494 Self::Bendy => "BD",
1495 Self::Unspecified => "",
1496 }
1497 }
1498}
1499impl AsRef<str> for BusArrivalTimingType {
1500 fn as_ref(&self) -> &str {
1501 self.as_str()
1502 }
1503}
1504impl fmt::Display for BusArrivalTimingType {
1505 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1506 f.write_str(self.as_str())
1507 }
1508}