airlabs_api/flight.rs
1use super::*;
2
3mod impls;
4
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6#[serde(deny_unknown_fields)]
7pub struct FlightFree {
8 /// ICAO24 Hex address.
9 pub hex: Option<String>,
10 /// Aircraft Registration Number
11 pub reg_number: Option<String>,
12 /// Aircraft ICAO type. Available in the Free plan.
13 pub aircraft_icao: Option<String>,
14 /// ISO 2 country code from Countries DB. Available in the Free plan.
15 pub flag: String,
16 /// Aircraft Geo-Latitude for now. Available in the Free plan.
17 pub lat: Option<f64>,
18 /// Aircraft Geo-Longitude for now. Available in the Free plan.
19 pub lng: Option<f64>,
20 /// Aircraft elevation for now (meters).
21 pub alt: Option<u64>,
22 /// Aircraft head direction for now. Available in the Free plan.
23 pub dir: Option<f64>,
24 /// Aircraft horizontal speed (km) for now.
25 pub speed: Option<u64>,
26 /// Aircraft vertical speed (km) for now.
27 pub v_speed: Option<u64>,
28 /// Aircraft squawk signal code.
29 pub squawk: Option<String>,
30 /// Airline IATA code. Available in the Free plan.
31 pub airline_iata: String,
32 /// Airline ICAO code.
33 pub airline_icao: String,
34 /// Flight IATA code-number. Available in the Free plan.
35 pub flight_iata: String,
36 /// Flight ICAO code-number.
37 pub flight_icao: String,
38 /// Flight number only. Available in the Free plan.
39 pub flight_number: String,
40 /// Codeshared airline IATA code.
41 pub cs_airline_iata: Option<String>,
42 /// Codeshared flight IATA code-number.
43 pub cs_flight_iata: Option<String>,
44 /// Codeshared flight number.
45 pub cs_flight_number: Option<String>,
46 /// Departure airport IATA code. Available in the Free plan.
47 pub dep_iata: String,
48 /// Departure airport ICAO code.
49 pub dep_icao: String,
50 /// Estimated departure terminal.
51 pub dep_terminal: Option<String>,
52 /// Estimated departure gate.
53 pub dep_gate: Option<String>,
54 /// Departure time in the airport time zone. Available in the Free plan.
55 pub dep_time: String,
56 /// Departure UNIX timestamp.
57 pub dep_time_ts: u64,
58 /// Departure time in UTC time zone.
59 pub dep_time_utc: String,
60 /// Updated departure time in the airport time zone.
61 pub dep_estimated: Option<String>,
62 /// Updated departure UNIX timestamp.
63 pub dep_estimated_ts: Option<u64>,
64 /// Updated departure time in UTC time zone.
65 pub dep_estimated_utc: Option<String>,
66 /// Arrival airport IATA code. Available in the Free plan.
67 pub arr_iata: String,
68 /// Arrival airport ICAO code.
69 pub arr_icao: String,
70 /// Estimated arrival terminal.
71 pub arr_terminal: Option<String>,
72 /// Estimated arrival gate.
73 pub arr_gate: Option<String>,
74 /// Arrival baggage claim carousel number.
75 pub arr_baggage: Option<String>,
76 /// Arrival time in the airport time zone. Available in the Free plan.
77 pub arr_time: String,
78 /// Arrival UNIX timestamp.
79 pub arr_time_ts: u64,
80 /// Arrival time in UTC time zone.
81 pub arr_time_utc: String,
82 /// Updated arrival time in the airport time zone.
83 pub arr_estimated: Option<String>,
84 /// Updated arrival UNIX timestamp.
85 pub arr_estimated_ts: Option<u64>,
86 /// Updated arrival time in UTC time zone.
87 pub arr_estimated_utc: Option<String>,
88 /// Estimated flight time (in minutes).
89 pub duration: u64,
90 /// (deprecated) Estimated flight delay time (in minutes).
91 pub delayed: Option<u64>,
92 /// Estimated time of flight departure delay (in minutes).
93 pub dep_delayed: Option<u64>,
94 /// Estimated time of flight arrival delay (in minutes).
95 pub arr_delayed: Option<u64>,
96 /// UNIX timestamp of last aircraft signal.
97 pub updated: u64,
98 /// Current flight status - scheduled, en-route, landed.
99 pub status: String,
100 /// Aircraft full model name.
101 pub model: Option<String>,
102 /// Aircraft manufacturer name. Available in the Free plan.
103 pub manufacturer: Option<String>,
104 /// Manufacturer serial number.
105 pub msn: Option<String>,
106 /// Aircraft type - landplane, seaplane, tiltrotor, helicopter, gyrocopter, amphibian.
107 pub r#type: Option<AircraftType>,
108 /// Aircraft engine type - jet, piston, turboprop/turboshaft, electric.
109 pub engine: Option<String>,
110 /// Aircraft engine number - 1, 2, 3, 4, 6, 8
111 pub engine_count: Option<String>,
112 /// Aircraft built year
113 pub built: Option<u64>,
114 /// Aircraft age (years)
115 pub age: Option<u64>,
116
117 // Next fields are present in the response, but not documented
118 /// Airline name. Available in the Free plan.
119 pub airline_name: Option<String>,
120 /// Departure airport name
121 pub dep_name: Option<String>,
122 /// Departure city
123 pub dep_city: Option<String>,
124 /// Departure country
125 pub dep_country: Option<String>,
126 /// Actual departure time in the airport time zone.
127 pub dep_actual: Option<String>,
128 /// Actual departure time UNIX timestamp.
129 pub dep_actual_ts: Option<u64>,
130 /// Actual departure time in the UTC time zone.
131 pub dep_actual_utc: Option<String>,
132 /// Arrival airport name
133 pub arr_name: Option<String>,
134 /// Arrival city
135 pub arr_city: Option<String>,
136 /// Arrival country
137 pub arr_country: Option<String>,
138 /// Actual arrival time in the airport time zone.
139 pub arr_actual: Option<String>,
140 /// Actual arrival time UNIX timestamp.
141 pub arr_actual_ts: Option<u64>,
142 /// Actual arrival time in the UTC time zone.
143 pub arr_actual_utc: Option<String>,
144 /// ETA (in minutes).
145 pub eta: Option<u64>,
146 /// Don't know what this is
147 pub percent: Option<u64>,
148 /// Response time in UTC timezone
149 pub utc: Option<String>,
150}
151
152#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
153#[serde(deny_unknown_fields)]
154pub struct Flight {
155 /// ICAO24 Hex address.
156 pub hex: Option<String>,
157 /// Aircraft Registration Number
158 pub reg_number: String,
159 /// Aircraft ICAO type. Available in the Free plan.
160 pub aircraft_icao: Option<String>,
161 /// ISO 2 country code from Countries DB. Available in the Free plan.
162 pub flag: String,
163 /// Aircraft Geo-Latitude for now. Available in the Free plan.
164 pub lat: Option<f64>,
165 /// Aircraft Geo-Longitude for now. Available in the Free plan.
166 pub lng: Option<f64>,
167 /// Aircraft elevation for now (meters).
168 pub alt: Option<u64>,
169 /// Aircraft head direction for now. Available in the Free plan.
170 pub dir: Option<f64>,
171 /// Aircraft horizontal speed (km) for now.
172 pub speed: Option<u64>,
173 /// Aircraft vertical speed (km) for now.
174 pub v_speed: Option<u64>,
175 /// Aircraft squawk signal code.
176 pub squawk: Option<String>,
177 /// Airline IATA code. Available in the Free plan.
178 pub airline_iata: String,
179 /// Airline ICAO code.
180 pub airline_icao: String,
181 /// Flight IATA code-number. Available in the Free plan.
182 pub flight_iata: String,
183 /// Flight ICAO code-number.
184 pub flight_icao: String,
185 /// Flight number only. Available in the Free plan.
186 pub flight_number: String,
187 /// Codeshared airline IATA code.
188 pub cs_airline_iata: Option<String>,
189 /// Codeshared flight IATA code-number.
190 pub cs_flight_iata: Option<String>,
191 /// Codeshared flight number.
192 pub cs_flight_number: Option<String>,
193 /// Departure airport IATA code. Available in the Free plan.
194 pub dep_iata: String,
195 /// Departure airport ICAO code.
196 pub dep_icao: String,
197 /// Estimated departure terminal.
198 pub dep_terminal: Option<String>,
199 /// Estimated departure gate.
200 pub dep_gate: Option<String>,
201 /// Departure time in the airport time zone. Available in the Free plan.
202 pub dep_time: String,
203 /// Departure UNIX timestamp.
204 pub dep_time_ts: u64,
205 /// Departure time in UTC time zone.
206 pub dep_time_utc: String,
207 /// Updated departure time in the airport time zone.
208 pub dep_estimated: Option<String>,
209 /// Updated departure UNIX timestamp.
210 pub dep_estimated_ts: Option<u64>,
211 /// Updated departure time in UTC time zone.
212 pub dep_estimated_utc: Option<String>,
213 /// Arrival airport IATA code. Available in the Free plan.
214 pub arr_iata: String,
215 /// Arrival airport ICAO code.
216 pub arr_icao: String,
217 /// Estimated arrival terminal.
218 pub arr_terminal: Option<String>,
219 /// Estimated arrival gate.
220 pub arr_gate: Option<String>,
221 /// Arrival baggage claim carousel number.
222 pub arr_baggage: Option<String>,
223 /// Arrival time in the airport time zone. Available in the Free plan.
224 pub arr_time: String,
225 /// Arrival UNIX timestamp.
226 pub arr_time_ts: u64,
227 /// Arrival time in UTC time zone.
228 pub arr_time_utc: String,
229 /// Updated arrival time in the airport time zone.
230 pub arr_estimated: Option<String>,
231 /// Updated arrival UNIX timestamp.
232 pub arr_estimated_ts: Option<u64>,
233 /// Updated arrival time in UTC time zone.
234 pub arr_estimated_utc: Option<String>,
235 /// Estimated flight time (in minutes).
236 pub duration: u64,
237 /// (deprecated) Estimated flight delay time (in minutes).
238 pub delayed: Option<u64>,
239 /// Estimated time of flight departure delay (in minutes).
240 pub dep_delayed: Option<u64>,
241 /// Estimated time of flight arrival delay (in minutes).
242 pub arr_delayed: Option<u64>,
243 /// UNIX timestamp of last aircraft signal.
244 pub updated: u64,
245 /// Current flight status - scheduled, en-route, landed.
246 pub status: String,
247 /// Aircraft full model name.
248 pub model: Option<String>,
249 /// Aircraft manufacturer name. Available in the Free plan.
250 pub manufacturer: Option<String>,
251 /// Manufacturer serial number.
252 pub msn: Option<String>,
253 /// Aircraft type - landplane, seaplane, tiltrotor, helicopter, gyrocopter, amphibian.
254 pub r#type: Option<AircraftType>,
255 /// Aircraft engine type - jet, piston, turboprop/turboshaft, electric.
256 pub engine: String,
257 /// Aircraft engine number - 1, 2, 3, 4, 6, 8
258 pub engine_count: String,
259 /// Aircraft built year
260 pub built: Option<u64>,
261 /// Aircraft age (years)
262 pub age: Option<u64>,
263
264 // Next fields are present in the response, but not documented
265 /// Airline name. Available in the Free plan.
266 pub airline_name: Option<String>,
267 /// Departure airport name
268 pub dep_name: Option<String>,
269 /// Departure city
270 pub dep_city: Option<String>,
271 /// Departure country
272 pub dep_country: Option<String>,
273 /// Actual departure time in the airport time zone.
274 pub dep_actual: Option<String>,
275 /// Actual departure time UNIX timestamp.
276 pub dep_actual_ts: Option<u64>,
277 /// Actual departure time in the UTC time zone.
278 pub dep_actual_utc: Option<String>,
279 /// Arrival airport name
280 pub arr_name: Option<String>,
281 /// Arrival city
282 pub arr_city: Option<String>,
283 /// Arrival country
284 pub arr_country: Option<String>,
285 /// Actual arrival time in the airport time zone.
286 pub arr_actual: Option<String>,
287 /// Actual arrival time UNIX timestamp.
288 pub arr_actual_ts: Option<u64>,
289 /// Actual arrival time in the UTC time zone.
290 pub arr_actual_utc: Option<String>,
291 /// ETA (in minutes).
292 pub eta: Option<u64>,
293 /// Don't know what this is
294 pub percent: Option<u64>,
295 /// Response time in UTC timezone
296 pub utc: Option<String>,
297}
298
299#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
300#[serde(rename_all = "lowercase")]
301pub enum AircraftType {
302 Adsb,
303 Landplane,
304 Seaplane,
305 Tiltrotor,
306 Helicopter,
307 Gyrocopter,
308 Amphibian,
309}
310
311#[derive(Clone, Debug, Serialize, Deserialize)]
312pub struct FlightRequest {
313 api_key: String,
314 #[serde(flatten)]
315 pub code: FlightCode,
316}
317
318#[derive(Clone, Debug, Serialize, Deserialize)]
319pub enum FlightCode {
320 #[serde(rename = "flight_iata")]
321 Iata(String),
322 #[serde(rename = "flight_icao")]
323 Icao(String),
324}
325
326impl AirLabsRequest for FlightRequest {
327 type Response = Flight;
328 type ResponseFree = FlightFree;
329 const METHOD: &'static str = "flight";
330}
331
332#[cfg(test)]
333mod tests;