tfl_api_wrapper/
linemodels.rs

1use strum::EnumProperty;
2
3// LineID
4//
5// The display name (`to_string()`) matches TFL's display name for the line.
6//
7// The ID (`line()`) is TFL's ID for the line. This mostly matches the display name, but for more
8// complex lines uses kebab-case. There are also some inconsistent lines.
9// We only need to override the ID for lines that don't use their display name as the ID.
10// Note: Because we use the display as the default, our IDs are capitalised.
11// The TFL API ignores case for IDs.
12
13#[derive(
14    Debug,
15    Copy,
16    Clone,
17    strum::Display,
18    strum::IntoStaticStr,
19    strum::EnumString,
20    strum::EnumProperty,
21    strum::EnumIter,
22)]
23pub enum LineID {
24    Bakerloo,
25    Central,
26    Circle,
27    District,
28    #[strum(to_string = "Hammersmith & City")]
29    #[strum(props(OverrideId = "Hammersmith-City"))]
30    HammersmithAndCity,
31    Jubilee,
32    Metropolitan,
33    Northern,
34    Piccadilly,
35    Victoria,
36    #[strum(to_string = "Waterloo & City")]
37    #[strum(props(OverrideId = "Waterloo-City"))]
38    WaterlooAndCity,
39    A10,
40    #[strum(to_string = "Avanti West Coast")]
41    #[strum(props(OverrideId = "Avanti-West-Coast"))]
42    AvantiWestCoast,
43    B11,
44    B12,
45    B13,
46    B14,
47    B15,
48    B16,
49    C1,
50    C10,
51    C11,
52    #[strum(to_string = "c2c")]
53    C2c,
54    C3,
55    #[strum(to_string = "Chiltern Railways")]
56    #[strum(props(OverrideId = "Chiltern-Railways"))]
57    ChilternRailways,
58    #[strum(to_string = "Cross Country")]
59    #[strum(props(OverrideId = "Cross-Country"))]
60    CrossCountry,
61    D3,
62    D6,
63    D7,
64    D8,
65    DLR,
66    E1,
67    E10,
68    E11,
69    E2,
70    E3,
71    E5,
72    E6,
73    E7,
74    E8,
75    E9,
76    #[strum(to_string = "East Midlands Railway")]
77    #[strum(props(OverrideId = "East-Midlands-Railway"))]
78    EastMidlandsRailway,
79    EL1,
80    EL2,
81    EL3,
82    #[strum(to_string = "Elizabeth line")]
83    #[strum(props(OverrideId = "Elizabeth"))]
84    Elizabethline,
85    #[strum(to_string = "First Hull Trains")]
86    #[strum(props(OverrideId = "First-Hull-Trains"))]
87    FirstHullTrains,
88    #[strum(to_string = "First TransPennine Express")]
89    #[strum(props(OverrideId = "First-Transpennine-Express"))]
90    FirstTransPennineExpress,
91    G1,
92    #[strum(to_string = "Gatwick Express")]
93    #[strum(props(OverrideId = "Gatwick-Express"))]
94    GatwickExpress,
95    #[strum(to_string = "Grand Central")]
96    #[strum(props(OverrideId = "Grand-Central"))]
97    GrandCentral,
98    #[strum(to_string = "Greater Anglia")]
99    #[strum(props(OverrideId = "Greater-Anglia"))]
100    GreaterAnglia,
101    #[strum(to_string = "Great Northern")]
102    #[strum(props(OverrideId = "Great-Northern"))]
103    GreatNorthern,
104    #[strum(to_string = "Great Western Railway")]
105    #[strum(props(OverrideId = "Great-Western-Railway"))]
106    GreatWesternRailway,
107    H10,
108    H11,
109    H12,
110    H13,
111    H14,
112    H17,
113    H18,
114    H19,
115    H2,
116    H20,
117    H22,
118    H25,
119    H26,
120    H28,
121    H3,
122    H32,
123    H37,
124    H9,
125    H91,
126    H98,
127    #[strum(to_string = "Heathrow Express")]
128    #[strum(props(OverrideId = "Heathrow-Express"))]
129    HeathrowExpress,
130    #[strum(to_string = "Island Line")]
131    #[strum(props(OverrideId = "Island-Line"))]
132    IslandLine,
133    K1,
134    K2,
135    K3,
136    K4,
137    K5,
138    #[strum(to_string = "IFS Cloud Cable Car")]
139    #[strum(props(OverrideId = "London-Cable-Car"))]
140    IFSCloudCableCar,
141    #[strum(to_string = "London North Eastern Railway")]
142    #[strum(props(OverrideId = "London-North-Eastern-Railway"))]
143    LondonNorthEasternRailway,
144    #[strum(to_string = "London Overground")]
145    #[strum(props(OverrideId = "London-Overground"))]
146    LondonOverground,
147    Lumo,
148    Merseyrail,
149    N1,
150    N109,
151    N11,
152    N113,
153    N133,
154    N136,
155    N137,
156    N140,
157    N15,
158    N155,
159    N171,
160    N18,
161    N19,
162    N199,
163    N2,
164    N20,
165    N205,
166    N207,
167    N21,
168    N22,
169    N242,
170    N25,
171    N250,
172    N253,
173    N26,
174    N266,
175    N27,
176    N271,
177    N277,
178    N279,
179    N28,
180    N29,
181    N3,
182    N31,
183    N32,
184    N33,
185    N343,
186    N38,
187    N381,
188    N41,
189    N44,
190    N5,
191    N53,
192    N55,
193    N550,
194    N551,
195    N63,
196    N65,
197    N68,
198    N7,
199    N72,
200    N73,
201    N74,
202    N8,
203    N83,
204    N86,
205    N87,
206    N89,
207    N9,
208    N91,
209    N97,
210    N98,
211    #[strum(to_string = "Northern Rail")]
212    #[strum(props(OverrideId = "Northern-Rail"))]
213    NorthernRail,
214    P12,
215    P13,
216    P4,
217    P5,
218    R1,
219    R10,
220    R11,
221    R2,
222    R3,
223    R4,
224    R5,
225    R6,
226    R68,
227    R7,
228    R70,
229    R8,
230    R9,
231    RB1,
232    RB2,
233    RB4,
234    RB6,
235    S1,
236    S3,
237    S4,
238    #[strum(to_string = "ScotRail")]
239    #[strum(props(OverrideId = "ScotRail"))]
240    ScotRail,
241    SL8,
242    Southeastern,
243    Southern,
244    #[strum(to_string = "South Western Railway")]
245    #[strum(props(OverrideId = "South-Western-Railway"))]
246    SouthWesternRailway,
247    Thameslink,
248    #[strum(to_string = "Thames River Services")]
249    #[strum(props(OverrideId = "Thames-River-Services"))]
250    ThamesRiverServices,
251    Tram,
252    #[strum(to_string = "Transport for Wales")]
253    #[strum(props(OverrideId = "Transport-for-Wales"))]
254    TransportforWales,
255    U1,
256    U10,
257    U2,
258    U3,
259    U4,
260    U5,
261    U7,
262    U9,
263    W11,
264    W12,
265    W13,
266    W14,
267    W15,
268    W16,
269    W19,
270    W3,
271    W4,
272    W5,
273    W6,
274    W7,
275    W8,
276    W9,
277    #[strum(to_string = "West Midlands Trains")]
278    #[strum(props(OverrideId = "West-Midlands-Trains"))]
279    WestMidlandsTrains,
280    #[strum(to_string = "Woolwich Ferry")]
281    #[strum(props(OverrideId = "Woolwich-Ferry"))]
282    WoolwichFerry,
283    X140,
284    X26,
285    X68,
286}
287
288impl LineID {
289    pub fn line(&self) -> &'static str {
290        if let Some(id) = self.get_str("OverrideId") {
291            id
292        } else {
293            self.into()
294        }
295    }
296}