Skip to main content

lta/
types.rs

1// @generated by satay. Do not edit by hand.
2#![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    /// Unique 5-digit bus stop reference code.
16    #[cfg_attr(
17        feature = "serde",
18        serde(rename = "BusStopCode", with = "satay_runtime::serde_string::as_u32")
19    )]
20    pub bus_stop_code: u32,
21    /// Bus services serving the queried bus stop.
22    #[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    /// Bus service number.
29    #[cfg_attr(feature = "serde", serde(rename = "ServiceNo"))]
30    pub service_no: BusServiceNumber,
31    /// Public transport operator code.
32    #[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/// Public transport operator code.
69#[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/// Bus service number.
102#[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);
110/// Unique 5-digit bus stop reference code.
111pub type BusStopCode = u32;
112#[derive(Debug, Clone, PartialEq)]
113#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
114pub struct BusArrivalTiming {
115    /// Unique 5-digit bus stop reference code.
116    #[cfg_attr(
117        feature = "serde",
118        serde(rename = "OriginCode", with = "satay_runtime::serde_string::as_u32")
119    )]
120    pub origin_code: u32,
121    /// Unique 5-digit bus stop reference code.
122    #[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    /// Estimated arrival date-time in Singapore Standard Time.
131    #[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    /// Current estimated latitude of the bus.
140    #[cfg_attr(
141        feature = "serde",
142        serde(rename = "Latitude", with = "satay_runtime::serde_string::as_f64")
143    )]
144    pub latitude: f64,
145    /// Current estimated longitude of the bus.
146    #[cfg_attr(
147        feature = "serde",
148        serde(rename = "Longitude", with = "satay_runtime::serde_string::as_f64")
149    )]
150    pub longitude: f64,
151    /// Ordinal visit number of this vehicle at the bus stop.
152    #[cfg_attr(
153        feature = "serde",
154        serde(rename = "VisitNumber", with = "satay_runtime::serde_string::as_u8")
155    )]
156    pub visit_number: u8,
157    /// Current occupancy level.
158    #[cfg_attr(feature = "serde", serde(rename = "Load"))]
159    pub load: BusArrivalTimingLoad,
160    /// Wheelchair accessibility indicator.
161    #[cfg_attr(feature = "serde", serde(rename = "Feature"))]
162    pub feature: BusArrivalTimingFeature,
163    /// Vehicle type of the bus.
164    #[cfg_attr(feature = "serde", serde(rename = "Type"))]
165    pub r#type: BusArrivalTimingType,
166    /// Whether the bus is currently monitored by the system.
167    #[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    /// Bus stops in this response page.
177    pub value: Vec<BusStop>,
178}
179#[derive(Debug, Clone, PartialEq)]
180#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
181pub struct BusStop {
182    /// Unique 5-digit bus stop reference code.
183    #[cfg_attr(
184        feature = "serde",
185        serde(rename = "BusStopCode", with = "satay_runtime::serde_string::as_u32")
186    )]
187    pub bus_stop_code: u32,
188    /// Road on which the bus stop is located.
189    #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
190    pub road_name: String,
191    /// Bus stop landmark or location description.
192    #[cfg_attr(feature = "serde", serde(rename = "Description"))]
193    pub desc: String,
194    /// Latitude of the bus stop.
195    #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
196    pub lat: f64,
197    /// Longitude of the bus stop.
198    #[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    /// Traffic camera images in this response page.
205    pub value: Vec<TrafficImage>,
206}
207#[derive(Debug, Clone, PartialEq)]
208#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
209pub struct TrafficImage {
210    /// Numeric identifier of the traffic camera.
211    #[cfg_attr(
212        feature = "serde",
213        serde(rename = "CameraID", with = "satay_runtime::serde_string::as_u32")
214    )]
215    pub camera_id: u32,
216    /// Latitude of the traffic camera.
217    #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
218    pub lat: f64,
219    /// Longitude of the traffic camera.
220    #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
221    pub long: f64,
222    /// URL of the latest image from the traffic camera.
223    #[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    /// Traffic speed bands in this response page.
230    pub value: Vec<TrafficSpeedBand>,
231}
232#[derive(Debug, Clone, PartialEq)]
233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
234pub struct TrafficSpeedBand {
235    /// Numeric identifier of the road link.
236    #[cfg_attr(
237        feature = "serde",
238        serde(rename = "LinkID", with = "satay_runtime::serde_string::as_u64")
239    )]
240    pub link_id: u64,
241    /// Name of the road.
242    #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
243    pub road_name: String,
244    /// Classification of the road carrying the traffic-speed reading.
245    #[cfg_attr(feature = "serde", serde(rename = "RoadCategory"))]
246    pub road_category: RoadCategory,
247    /// Speed-band number assigned to the road link.
248    #[cfg_attr(feature = "serde", serde(rename = "SpeedBand"))]
249    pub speed_band: u8,
250    /// Lower speed bound in kilometres per hour.
251    #[cfg_attr(
252        feature = "serde",
253        serde(rename = "MinimumSpeed", with = "satay_runtime::serde_string::as_u16")
254    )]
255    pub min_speed: u16,
256    /// Upper speed bound in kilometres per hour.
257    #[cfg_attr(
258        feature = "serde",
259        serde(rename = "MaximumSpeed", with = "satay_runtime::serde_string::as_u16")
260    )]
261    pub max_speed: u16,
262    /// Longitude of the road link's start point.
263    #[cfg_attr(
264        feature = "serde",
265        serde(rename = "StartLon", with = "satay_runtime::serde_string::as_f64")
266    )]
267    pub start_lon: f64,
268    /// Latitude of the road link's start point.
269    #[cfg_attr(
270        feature = "serde",
271        serde(rename = "StartLat", with = "satay_runtime::serde_string::as_f64")
272    )]
273    pub start_lat: f64,
274    /// Longitude of the road link's end point.
275    #[cfg_attr(
276        feature = "serde",
277        serde(rename = "EndLon", with = "satay_runtime::serde_string::as_f64")
278    )]
279    pub end_lon: f64,
280    /// Latitude of the road link's end point.
281    #[cfg_attr(
282        feature = "serde",
283        serde(rename = "EndLat", with = "satay_runtime::serde_string::as_f64")
284    )]
285    pub end_lat: f64,
286}
287/// Classification of the road carrying the traffic-speed reading.
288#[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    /// Traffic flow data files in this response.
355    pub value: Vec<TrafficFlowLink>,
356}
357#[derive(Debug, Clone, PartialEq)]
358#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
359pub struct TrafficFlowLink {
360    /// URL of the traffic flow data file.
361    #[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    /// Traffic incidents in this response page.
368    pub value: Vec<TrafficIncident>,
369}
370#[derive(Debug, Clone, PartialEq)]
371#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
372pub struct TrafficIncident {
373    /// Type of traffic incident.
374    #[cfg_attr(feature = "serde", serde(rename = "Type"))]
375    pub incident_type: IncidentType,
376    /// Latitude of the traffic incident.
377    #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
378    pub lat: f64,
379    /// Longitude of the traffic incident.
380    #[cfg_attr(feature = "serde", serde(rename = "Longitude"))]
381    pub long: f64,
382    /// Human-readable description of the traffic incident.
383    #[cfg_attr(feature = "serde", serde(rename = "Message"))]
384    pub msg: String,
385}
386/// Type of traffic incident.
387#[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/// Unique identifier of a road work or road opening event.
463#[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    /// Road works in this response page.
475    pub value: Vec<RoadDetails>,
476}
477#[derive(Debug, Clone, PartialEq)]
478#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
479pub struct RoadDetails {
480    /// Unique identifier of a road work or road opening event.
481    #[cfg_attr(feature = "serde", serde(rename = "EventID"))]
482    pub event_id: EventId,
483    /// Date on which the road work starts.
484    #[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    /// Date on which the road work ends.
490    #[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    /// Agency responsible for the road work.
496    #[cfg_attr(feature = "serde", serde(rename = "SvcDept"))]
497    pub service_dept: String,
498    /// Name of the road affected by the road work.
499    #[cfg_attr(feature = "serde", serde(rename = "RoadName"))]
500    pub road_name: String,
501    /// Additional information about the road work.
502    #[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    /// Road openings in this response page.
509    pub value: Vec<RoadDetails>,
510}
511#[derive(Debug, Clone, PartialEq)]
512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
513pub struct TaxiAvailabilityResponse {
514    /// Coordinates of available taxis in this response page.
515    pub value: Vec<Coordinates>,
516}
517#[derive(Debug, Clone, PartialEq)]
518#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
519pub struct Coordinates {
520    /// Latitude of the taxi.
521    #[cfg_attr(feature = "serde", serde(rename = "Latitude"))]
522    pub lat: f64,
523    /// Longitude of the taxi.
524    #[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    /// Facility maintenance data files for the queried station.
531    pub value: Vec<FacilityMaintenanceLink>,
532}
533#[derive(Debug, Clone, PartialEq)]
534#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
535pub struct FacilityMaintenanceLink {
536    /// URL of the facility maintenance data file for the queried station.
537    #[cfg_attr(feature = "serde", serde(rename = "Link"))]
538    pub link: String,
539}
540/// MRT/LRT station code.
541#[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/// Current occupancy level.
1417#[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/// Wheelchair accessibility indicator.
1450#[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/// Vehicle type of the bus.
1477#[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}