#[allow(unused_imports)]
use odata_client::{
chrono::{DateTime, FixedOffset, NaiveDate, NaiveTime},
deserialize_with, iso8601,
serde::Deserialize,
serde_with::serde_as,
uuid, EntityLink, EntityLinkStub, EntityProperties, EntitySetEndpoint, ExpandQuery,
SingletonEndpoint,
};
use std::marker::PhantomData;
pub const SERVICE_URL: &'static str = "http://services.odata.org/V4/TripPinService";
#[allow(dead_code)]
pub const PHOTOS: EntitySetEndpoint<Photo> = EntitySetEndpoint {
service_url: SERVICE_URL,
name: "Photos",
marker: PhantomData,
};
#[allow(dead_code)]
pub const PEOPLE: EntitySetEndpoint<Person> = EntitySetEndpoint {
service_url: SERVICE_URL,
name: "People",
marker: PhantomData,
};
#[allow(dead_code)]
pub const AIRLINES: EntitySetEndpoint<Airline> = EntitySetEndpoint {
service_url: SERVICE_URL,
name: "Airlines",
marker: PhantomData,
};
#[allow(dead_code)]
pub const AIRPORTS: EntitySetEndpoint<Airport> = EntitySetEndpoint {
service_url: SERVICE_URL,
name: "Airports",
marker: PhantomData,
};
#[allow(dead_code)]
pub const ME: SingletonEndpoint<Person> = SingletonEndpoint {
service_url: SERVICE_URL,
name: "Me",
marker: PhantomData,
};
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct City {
#[serde(rename = "CountryRegion")]
pub country_region: String,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Region")]
pub region: String,
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Location {
#[serde(rename = "Address")]
pub address: String,
#[serde(rename = "City")]
pub city: City,
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct EventLocation {
#[serde(flatten)]
pub base: Location,
#[serde(rename = "BuildingInfo")]
pub building_info: Option<String>,
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct AirportLocation {
#[serde(flatten)]
pub base: Location,
#[serde(rename = "Loc")]
pub loc: (),
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Photo {
#[serde(rename = "Id")]
pub id: i64,
#[serde(rename = "Name")]
pub name: Option<String>,
}
impl EntityProperties for Photo {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Person {
#[serde(rename = "UserName")]
pub user_name: String,
#[serde(rename = "FirstName")]
pub first_name: String,
#[serde(rename = "LastName")]
pub last_name: String,
#[serde(rename = "Emails")]
pub emails: Vec<Option<String>>,
#[serde(rename = "AddressInfo")]
pub address_info: Vec<Option<Location>>,
#[serde(rename = "Gender")]
pub gender: Option<PersonGender>,
#[serde(rename = "Concurrency")]
pub concurrency: i64,
#[serde(rename = "Friends")]
pub friends: Vec<EntityLink<Person>>,
#[serde(rename = "Trips")]
pub trips: Vec<Trip>,
#[serde(rename = "Photo")]
pub photo: Option<EntityLink<Photo>>,
}
impl EntityProperties for Person {
const EXPAND_QUERY: ExpandQuery =
ExpandQuery::Expand("Friends/$ref,Trips($expand=Photos/$ref,PlanItems),Photo/$ref");
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Airline {
#[serde(rename = "AirlineCode")]
pub airline_code: String,
#[serde(rename = "Name")]
pub name: String,
}
impl EntityProperties for Airline {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Airport {
#[serde(rename = "IcaoCode")]
pub icao_code: String,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "IataCode")]
pub iata_code: String,
#[serde(rename = "Location")]
pub location: AirportLocation,
}
impl EntityProperties for Airport {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct PlanItem {
#[serde(rename = "PlanItemId")]
pub plan_item_id: i32,
#[serde(rename = "ConfirmationCode")]
pub confirmation_code: Option<String>,
#[serde(rename = "StartsAt")]
pub starts_at: Option<DateTime<FixedOffset>>,
#[serde(rename = "EndsAt")]
pub ends_at: Option<DateTime<FixedOffset>>,
#[serde(rename = "Duration")]
#[serde_as(as = "Option<deserialize_with::Iso8601DurationDeserialize>")]
pub duration: Option<iso8601::Duration>,
}
impl EntityProperties for PlanItem {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct PublicTransportation {
#[serde(flatten)]
pub base: PlanItem,
#[serde(rename = "SeatNumber")]
pub seat_number: Option<String>,
}
impl EntityProperties for PublicTransportation {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Flight {
#[serde(flatten)]
pub base: PublicTransportation,
#[serde(rename = "FlightNumber")]
pub flight_number: String,
#[serde(rename = "From")]
pub from: EntityLink<Airport>,
#[serde(rename = "To")]
pub to: EntityLink<Airport>,
#[serde(rename = "Airline")]
pub airline: EntityLink<Airline>,
}
impl EntityProperties for Flight {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::Expand("From/$ref,To/$ref,Airline/$ref");
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Event {
#[serde(flatten)]
pub base: PlanItem,
#[serde(rename = "Description")]
pub description: Option<String>,
#[serde(rename = "OccursAt")]
pub occurs_at: EventLocation,
}
impl EntityProperties for Event {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::None;
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub struct Trip {
#[serde(rename = "TripId")]
pub trip_id: i32,
#[serde(rename = "ShareId")]
pub share_id: Option<uuid::Uuid>,
#[serde(rename = "Description")]
pub description: Option<String>,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Budget")]
pub budget: f32,
#[serde(rename = "StartsAt")]
pub starts_at: DateTime<FixedOffset>,
#[serde(rename = "EndsAt")]
pub ends_at: DateTime<FixedOffset>,
#[serde(rename = "Tags")]
pub tags: Vec<String>,
#[serde(rename = "Photos")]
pub photos: Vec<EntityLink<Photo>>,
#[serde(rename = "PlanItems")]
pub plan_items: Vec<PlanItem>,
}
impl EntityProperties for Trip {
const EXPAND_QUERY: ExpandQuery = ExpandQuery::Expand("Photos/$ref,PlanItems");
}
#[serde_as(crate = "odata_client::serde_with")]
#[derive(Debug, Deserialize)]
#[serde(crate = "odata_client::serde")]
pub enum PersonGender {
Male = 0,
Female = 1,
Unknown = 2,
}