use super::*;
#[derive(Debug, Serialize, Deserialize)]
pub struct AirlineFree {
pub name: String,
pub iata_code: Option<String>,
pub icao_code: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Airline {
pub name: String,
pub iata_prefix: u64,
pub iata_accounting: u64,
pub iata_code: Option<String>,
pub icao_code: Option<String>,
pub callsign: String,
pub country_code: String,
pub iosa_registered: u64,
pub is_scheduled: u64,
pub is_passenger: u64,
pub is_cargo: u64,
pub is_international: u64,
pub total_aircrafts: u64,
pub average_fleet_age: u64,
pub accidents_last_5y: u64,
pub crashes_last_5y: u64,
pub website: String,
pub facebook: String,
pub twitter: String,
pub instagram: String,
pub linkedin: String,
pub slug: String,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct AirlinesRequest {
pub api_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub iata_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iata_prefix: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iata_accounting: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icao_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callsign: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub _fields: Option<String>,
}
impl AirlinesRequest {
pub fn new(key: &str) -> Self {
let api_key = key.into();
Self {
api_key,
..default()
}
}
}
impl AirLabsRequest for AirlinesRequest {
type Response = Vec<Airline>;
type ResponseFree = Vec<AirlineFree>;
const METHOD: &'static str = "airlines";
}
#[cfg(test)]
mod tests {
use serde_json as json;
use super::*;
const BODY: &str = r#"[{
"name": "American Airlines",
"iata_code": "AA",
"iata_prefix": 1,
"iata_accounting": 1,
"icao_code": "AAL",
"callsign": "AMERICAN",
"country_code": "US",
"iosa_registered": 1,
"is_scheduled": 1,
"is_passenger": 1,
"is_cargo": 1,
"is_international": 1,
"total_aircrafts": 684,
"average_fleet_age": 10,
"accidents_last_5y": 26,
"crashes_last_5y": 0,
"website": "www.aa.com",
"facebook": "facebook.com/aa",
"twitter": "twitter.com/americanair",
"instagram": "instagram.com/americanair",
"linkedin": "linkedin.com/company/american-airlines",
"slug": "american-aa-aal-us"
}]
"#;
#[test]
fn airlines() {
let airlines = json::from_str::<Vec<Airline>>(BODY).unwrap();
println!("{airlines:#?}");
assert_eq!(airlines.len(), 1);
assert_eq!(airlines[0].iata_code.as_deref(), Some("AA"));
}
}