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;