use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Template {
#[serde(rename = "appLaunchURL")]
#[serde(skip_serializing_if = "Option::is_none")]
pub app_launch_url: Option<String>,
#[serde(rename = "associatedStoreIdentifiers")]
#[serde(skip_serializing_if = "Option::is_none")]
pub associated_store_identifiers: Option<Vec<f64>>,
#[serde(rename = "authenticationToken")]
#[serde(skip_serializing_if = "Option::is_none")]
pub authentication_token: Option<String>,
#[serde(rename = "backgroundColor")]
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<String>,
#[serde(rename = "barcode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub barcode: Option<Barcode>,
#[serde(rename = "barcodes")]
#[serde(skip_serializing_if = "Option::is_none")]
pub barcodes: Option<Vec<Barcode>>,
#[serde(rename = "beacons")]
#[serde(skip_serializing_if = "Option::is_none")]
pub beacons: Option<Vec<Beacon>>,
#[serde(rename = "boardingPass")]
#[serde(skip_serializing_if = "Option::is_none")]
pub boarding_pass: Option<BoardingPass>,
#[serde(rename = "coupon")]
#[serde(skip_serializing_if = "Option::is_none")]
pub coupon: Option<Details>,
#[serde(rename = "description")]
pub description: String,
#[serde(rename = "eventTicket")]
#[serde(skip_serializing_if = "Option::is_none")]
pub event_ticket: Option<Details>,
#[serde(rename = "expirationDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub expiration_date: Option<String>,
#[serde(rename = "foregroundColor")]
#[serde(skip_serializing_if = "Option::is_none")]
pub foreground_color: Option<String>,
#[serde(rename = "formatVersion")]
#[serde(skip_serializing_if = "Option::is_none")]
pub format_version: Option<serde_json::Value>,
#[serde(rename = "generic")]
#[serde(skip_serializing_if = "Option::is_none")]
pub generic: Option<Details>,
#[serde(rename = "groupingIdentifier")]
#[serde(skip_serializing_if = "Option::is_none")]
pub grouping_identifier: Option<String>,
#[serde(rename = "labelColor")]
#[serde(skip_serializing_if = "Option::is_none")]
pub label_color: Option<String>,
#[serde(rename = "locations")]
#[serde(skip_serializing_if = "Option::is_none")]
pub locations: Option<Vec<Location>>,
#[serde(rename = "logoText")]
#[serde(skip_serializing_if = "Option::is_none")]
pub logo_text: Option<String>,
#[serde(rename = "maxDistance")]
#[serde(skip_serializing_if = "Option::is_none")]
pub max_distance: Option<f64>,
#[serde(rename = "nfc")]
#[serde(skip_serializing_if = "Option::is_none")]
pub nfc: Option<Nfc>,
#[serde(rename = "organizationName")]
pub organization_name: String,
#[serde(rename = "passTypeIdentifier")]
pub pass_type_identifier: String,
#[serde(rename = "relevantDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub relevant_date: Option<String>,
#[serde(rename = "serialNumber")]
pub serial_number: String,
#[serde(rename = "storeCard")]
#[serde(skip_serializing_if = "Option::is_none")]
pub store_card: Option<Details>,
#[serde(rename = "suppressStripShine")]
#[serde(skip_serializing_if = "Option::is_none")]
pub suppress_strip_shine: Option<bool>,
#[serde(rename = "teamIdentifier")]
#[serde(skip_serializing_if = "Option::is_none")]
pub team_identifier: Option<String>,
#[serde(rename = "userInfo")]
#[serde(skip_serializing_if = "Option::is_none")]
pub user_info: Option<HashMap<String, Option<serde_json::Value>>>,
#[serde(rename = "voided")]
#[serde(skip_serializing_if = "Option::is_none")]
pub voided: Option<bool>,
#[serde(rename = "webServiceURL")]
#[serde(skip_serializing_if = "Option::is_none")]
pub web_service_url: Option<String>,
}
impl Template {
pub fn new(
description: &str,
organization_name: &str,
pass_type_identifier: &str,
serial_number: &str,
) -> Self {
Self {
app_launch_url: None,
associated_store_identifiers: None,
authentication_token: None,
background_color: None,
barcode: None,
barcodes: None,
beacons: None,
boarding_pass: None,
coupon: None,
description: description.into(),
event_ticket: None,
expiration_date: None,
foreground_color: None,
format_version: None,
generic: None,
grouping_identifier: None,
label_color: None,
locations: None,
logo_text: None,
max_distance: None,
nfc: None,
organization_name: organization_name.into(),
pass_type_identifier: pass_type_identifier.into(),
relevant_date: None,
serial_number: serial_number.into(),
store_card: None,
suppress_strip_shine: None,
team_identifier: None,
user_info: None,
voided: None,
web_service_url: None,
}
}
pub fn app_launch_url(&mut self, app_launch_url: &str) {
self.app_launch_url = Some(app_launch_url.into());
}
pub fn add_associated_store_identifiers(&mut self, associated_store_identifier: f64) {
let mut vec = match &self.associated_store_identifiers {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(associated_store_identifier);
self.associated_store_identifiers = Some(vec);
}
pub fn clear_associated_store_identifiers(&mut self) {
self.associated_store_identifiers = None;
}
pub fn authentication_token(&mut self, authentication_token: &str) {
self.authentication_token = Some(authentication_token.into());
}
pub fn background_color(&mut self, background_color: &str) {
self.background_color = Some(background_color.into());
}
pub fn barcode(&mut self, barcode: Barcode) {
self.barcode = Some(barcode);
}
pub fn add_barcodes(&mut self, barcode: Barcode) {
let mut vec = match &self.barcodes {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(barcode);
self.barcodes = Some(vec);
}
pub fn clear_barcodes(&mut self) {
self.barcodes = None;
}
pub fn add_beacon(&mut self, beacon: Beacon) {
let mut vec = match &self.beacons {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(beacon);
self.beacons = Some(vec);
}
pub fn clear_beacons(&mut self) {
self.beacons = None;
}
pub fn boarding_pass(&mut self, boarding_pass: BoardingPass) {
self.boarding_pass = Some(boarding_pass);
}
pub fn coupon(&mut self, coupon: Details) {
self.coupon = Some(coupon);
}
pub fn description(&mut self, description: &str) {
self.description = description.into();
}
pub fn event_ticket(&mut self, event_ticket: Details) {
self.event_ticket = Some(event_ticket);
}
pub fn expiration_date(&mut self, expiration_date: &str) {
self.expiration_date = Some(expiration_date.into());
}
pub fn foreground_color(&mut self, foreground_color: &str) {
self.foreground_color = Some(foreground_color.into());
}
pub fn format_version(&mut self, format_version: serde_json::Value) {
self.format_version = Some(format_version);
}
pub fn generic(&mut self, generic: Details) {
self.generic = Some(generic);
}
pub fn grouping_identifier(&mut self, grouping_identifier: &str) {
self.grouping_identifier = Some(grouping_identifier.into());
}
pub fn label_color(&mut self, label_color: &str) {
self.label_color = Some(label_color.into());
}
pub fn add_location(&mut self, location: Location) {
let mut vec = match &self.locations {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(location);
self.locations = Some(vec);
}
pub fn clear_locations(&mut self) {
self.locations = None;
}
pub fn logo_text(&mut self, logo_text: &str) {
self.logo_text = Some(logo_text.into());
}
pub fn max_distance(&mut self, max_distance: f64) {
self.max_distance = Some(max_distance);
}
pub fn nfc(&mut self, nfc: Nfc) {
self.nfc = Some(nfc);
}
pub fn organization_name(&mut self, organization_name: &str) {
self.organization_name = organization_name.into();
}
pub fn pass_type_identifier(&mut self, pass_type_identifier: &str) {
self.pass_type_identifier = pass_type_identifier.into();
}
pub fn relevant_date(&mut self, relevant_date: &str) {
self.relevant_date = Some(relevant_date.into());
}
pub fn serial_number(&mut self, serial_number: &str) {
self.serial_number = serial_number.into();
}
pub fn store_card(&mut self, store_card: Details) {
self.store_card = Some(store_card);
}
pub fn suppress_strip_shine(&mut self, suppress_strip_shine: bool) {
self.suppress_strip_shine = Some(suppress_strip_shine);
}
pub fn team_identifier(&mut self, team_identifier: &str) {
self.team_identifier = Some(team_identifier.into());
}
pub fn add_user_info(&mut self, key: &str, value: serde_json::Value) {
let mut map = match &self.user_info {
Some(map) => map.clone(),
None => HashMap::new(),
};
map.insert(key.into(), Some(value));
self.user_info = Some(map);
}
pub fn clear_user_info(&mut self) {
self.user_info = None;
}
pub fn voided(&mut self, voided: bool) {
self.voided = Some(voided);
}
pub fn web_service_url(&mut self, web_service_url: &str) {
self.web_service_url = Some(web_service_url.into());
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Barcode {
#[serde(rename = "altText")]
#[serde(skip_serializing_if = "Option::is_none")]
pub alt_text: Option<String>,
#[serde(rename = "format")]
pub format: BarcodeFormat,
#[serde(rename = "message")]
pub message: String,
#[serde(rename = "messageEncoding")]
pub message_encoding: String,
}
impl Barcode {
pub fn new(format: BarcodeFormat, message: &str, message_encoding: &str) -> Self {
Self {
alt_text: None,
format,
message: message.into(),
message_encoding: message_encoding.into(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Beacon {
#[serde(rename = "major")]
#[serde(skip_serializing_if = "Option::is_none")]
pub major: Option<i64>,
#[serde(rename = "minor")]
#[serde(skip_serializing_if = "Option::is_none")]
pub minor: Option<i64>,
#[serde(rename = "proximityUUID")]
pub proximity_uuid: String,
#[serde(rename = "relevantText")]
#[serde(skip_serializing_if = "Option::is_none")]
pub relevant_text: Option<String>,
}
impl Beacon {
pub fn new(proximity_uuid: &str) -> Self {
Self {
major: None,
minor: None,
proximity_uuid: proximity_uuid.into(),
relevant_text: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BoardingPass {
#[serde(rename = "transitType")]
pub transit_type: TransitType,
#[serde(rename = "auxiliaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub auxiliary_fields: Option<Vec<Field>>,
#[serde(rename = "backFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub back_fields: Option<Vec<Field>>,
#[serde(rename = "headerFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub header_fields: Option<Vec<Field>>,
#[serde(rename = "primaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_fields: Option<Vec<Field>>,
#[serde(rename = "secondaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub secondary_fields: Option<Vec<Field>>,
}
impl BoardingPass {
pub fn new(transit_type: TransitType) -> Self {
Self {
transit_type,
auxiliary_fields: None,
back_fields: None,
header_fields: None,
primary_fields: None,
secondary_fields: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Field {
#[serde(rename = "attributedValue")]
#[serde(skip_serializing_if = "Option::is_none")]
pub attributed_value: Option<ValueUnion>,
#[serde(rename = "changeMessage")]
#[serde(skip_serializing_if = "Option::is_none")]
pub change_message: Option<String>,
#[serde(rename = "currencyCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub currency_code: Option<String>,
#[serde(rename = "dataDetectorTypes")]
#[serde(skip_serializing_if = "Option::is_none")]
pub data_detector_types: Option<Vec<serde_json::Value>>,
#[serde(rename = "dateStyle")]
#[serde(skip_serializing_if = "Option::is_none")]
pub date_style: Option<EStyle>,
#[serde(rename = "ignoresTimeZone")]
#[serde(skip_serializing_if = "Option::is_none")]
pub ignores_time_zone: Option<bool>,
#[serde(rename = "isRelative")]
#[serde(skip_serializing_if = "Option::is_none")]
pub is_relative: Option<bool>,
#[serde(rename = "key")]
pub key: String,
#[serde(rename = "label")]
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(rename = "numberStyle")]
#[serde(skip_serializing_if = "Option::is_none")]
pub number_style: Option<NumberStyle>,
#[serde(rename = "semantics")]
#[serde(skip_serializing_if = "Option::is_none")]
pub semantics: Option<Semantics>,
#[serde(rename = "textAlignment")]
#[serde(skip_serializing_if = "Option::is_none")]
pub text_alignment: Option<TextAlignment>,
#[serde(rename = "timeStyle")]
#[serde(skip_serializing_if = "Option::is_none")]
pub time_style: Option<EStyle>,
#[serde(rename = "value")]
pub value: ValueUnion,
#[serde(rename = "row")]
#[serde(skip_serializing_if = "Option::is_none")]
pub row: Option<i32>,
}
impl Field {
pub fn new_string(key: &str, value: &str) -> Self {
Self {
attributed_value: None,
change_message: None,
currency_code: None,
data_detector_types: None,
date_style: None,
ignores_time_zone: None,
is_relative: None,
key: key.into(),
label: None,
number_style: None,
semantics: None,
text_alignment: None,
time_style: None,
value: ValueUnion::String(value.into()),
row: None,
}
}
pub fn new_f64(key: &str, value: f64) -> Self {
Self {
attributed_value: None,
change_message: None,
currency_code: None,
data_detector_types: None,
date_style: None,
ignores_time_zone: None,
is_relative: None,
key: key.into(),
label: None,
number_style: None,
semantics: None,
text_alignment: None,
time_style: None,
value: ValueUnion::Double(value),
row: None,
}
}
pub fn attributed_value(&mut self, attributed_value: ValueUnion) {
self.attributed_value = Some(attributed_value);
}
pub fn change_message(&mut self, change_message: &str) {
self.change_message = Some(change_message.into());
}
pub fn currency_code(&mut self, currency_code: &str) {
self.currency_code = Some(currency_code.into());
}
pub fn clear_data_detector_types(&mut self) {
self.data_detector_types = None;
}
pub fn add_data_detector_type(&mut self, data_detector_type: serde_json::Value) {
let mut vec = match &self.data_detector_types {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(data_detector_type);
self.data_detector_types = Some(vec);
}
pub fn date_style(&mut self, date_style: EStyle) {
self.date_style = Some(date_style);
}
pub fn ignores_time_zone(&mut self, ignores_time_zone: bool) {
self.ignores_time_zone = Some(ignores_time_zone);
}
pub fn is_relative(&mut self, is_relative: bool) {
self.is_relative = Some(is_relative);
}
pub fn label(&mut self, label: &str) {
self.label = Some(label.into());
}
pub fn number_style(&mut self, number_style: NumberStyle) {
self.number_style = Some(number_style);
}
pub fn semantics(&mut self, semantics: Semantics) {
self.semantics = Some(semantics);
}
pub fn text_alignment(&mut self, text_alignment: TextAlignment) {
self.text_alignment = Some(text_alignment);
}
pub fn time_style(&mut self, time_style: EStyle) {
self.time_style = Some(time_style);
}
pub fn row(&mut self, row: i32) {
self.row = Some(row);
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Semantics {
#[serde(rename = "airlineCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub airline_code: Option<String>,
#[serde(rename = "artistIDs")]
#[serde(skip_serializing_if = "Option::is_none")]
pub artist_i_ds: Option<Vec<String>>,
#[serde(rename = "awayTeamAbbreviation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub away_team_abbreviation: Option<String>,
#[serde(rename = "awayTeamLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub away_team_location: Option<String>,
#[serde(rename = "awayTeamName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub away_team_name: Option<String>,
#[serde(rename = "balance")]
#[serde(skip_serializing_if = "Option::is_none")]
pub balance: Option<CurrencyAmount>,
#[serde(rename = "boardingGroup")]
#[serde(skip_serializing_if = "Option::is_none")]
pub boarding_group: Option<String>,
#[serde(rename = "boardingSequenceNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub boarding_sequence_number: Option<String>,
#[serde(rename = "carNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub car_number: Option<String>,
#[serde(rename = "confirmationNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub confirmation_number: Option<String>,
#[serde(rename = "currentArrivalDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub current_arrival_date: Option<String>,
#[serde(rename = "currentBoardingDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub current_boarding_date: Option<String>,
#[serde(rename = "currentDepartureDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub current_departure_date: Option<String>,
#[serde(rename = "departureAirportCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_airport_code: Option<String>,
#[serde(rename = "departureAirportName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_airport_name: Option<String>,
#[serde(rename = "departureGate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_gate: Option<String>,
#[serde(rename = "departureLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_location: Option<Location>,
#[serde(rename = "departureLocationDescription")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_location_description: Option<String>,
#[serde(rename = "departurePlatform")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_platform: Option<String>,
#[serde(rename = "departureStationName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_station_name: Option<String>,
#[serde(rename = "departureTerminal")]
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_terminal: Option<String>,
#[serde(rename = "destinationAirportCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_airport_code: Option<String>,
#[serde(rename = "destinationAirportName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_airport_name: Option<String>,
#[serde(rename = "destinationGate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_gate: Option<String>,
#[serde(rename = "destinationLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_location: Option<Location>,
#[serde(rename = "destinationLocationDescription")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_location_description: Option<Location>,
#[serde(rename = "destinationPlatform")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_platform: Option<String>,
#[serde(rename = "destinationStationName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_station_name: Option<String>,
#[serde(rename = "destinationTerminal")]
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_terminal: Option<String>,
#[serde(rename = "duration")]
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<f64>,
#[serde(rename = "eventEndDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub event_end_date: Option<String>,
#[serde(rename = "eventName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub event_name: Option<String>,
#[serde(rename = "eventStartDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub event_start_date: Option<String>,
#[serde(rename = "eventType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<EventType>,
#[serde(rename = "flightCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub flight_code: Option<String>,
#[serde(rename = "flightNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub flight_number: Option<f64>,
#[serde(rename = "genre")]
#[serde(skip_serializing_if = "Option::is_none")]
pub genre: Option<String>,
#[serde(rename = "homeTeamAbbreviation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub home_team_abbreviation: Option<String>,
#[serde(rename = "homeTeamLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub home_team_location: Option<String>,
#[serde(rename = "homeTeamName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub home_team_name: Option<String>,
#[serde(rename = "leagueAbbreviation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub league_abbreviation: Option<String>,
#[serde(rename = "leagueName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub league_name: Option<String>,
#[serde(rename = "membershipProgramName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub membership_program_name: Option<String>,
#[serde(rename = "membershipProgramNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub membership_program_number: Option<String>,
#[serde(rename = "originalArrivalDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub original_arrival_date: Option<String>,
#[serde(rename = "originalBoardingDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub original_boarding_date: Option<String>,
#[serde(rename = "originalDepartureDate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub original_departure_date: Option<String>,
#[serde(rename = "passengerName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub passenger_name: Option<PersonNameComponents>,
#[serde(rename = "performerNames")]
#[serde(skip_serializing_if = "Option::is_none")]
pub performer_names: Option<Vec<String>>,
#[serde(rename = "priorityStatus")]
#[serde(skip_serializing_if = "Option::is_none")]
pub priority_status: Option<String>,
#[serde(rename = "seats")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seats: Option<Vec<Seat>>,
#[serde(rename = "securityScreening")]
#[serde(skip_serializing_if = "Option::is_none")]
pub security_screening: Option<String>,
#[serde(rename = "silenceRequested")]
#[serde(skip_serializing_if = "Option::is_none")]
pub silence_requested: Option<bool>,
#[serde(rename = "sportName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub sport_name: Option<String>,
#[serde(rename = "totalPrice")]
#[serde(skip_serializing_if = "Option::is_none")]
pub total_price: Option<CurrencyAmount>,
#[serde(rename = "transitProvider")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transit_provider: Option<String>,
#[serde(rename = "transitStatus")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transit_status: Option<String>,
#[serde(rename = "transitStatusReason")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transit_status_reason: Option<String>,
#[serde(rename = "vehicleName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub vehicle_name: Option<String>,
#[serde(rename = "vehicleNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub vehicle_number: Option<String>,
#[serde(rename = "vehicleType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub vehicle_type: Option<String>,
#[serde(rename = "venueEntrance")]
#[serde(skip_serializing_if = "Option::is_none")]
pub venue_entrance: Option<String>,
#[serde(rename = "venueLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub venue_location: Option<Location>,
#[serde(rename = "venueName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub venue_name: Option<String>,
#[serde(rename = "venuePhoneNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub venue_phone_number: Option<String>,
#[serde(rename = "venueRoom")]
#[serde(skip_serializing_if = "Option::is_none")]
pub venue_room: Option<String>,
}
impl Semantics {
pub fn new() -> Self {
Self {
airline_code: None,
artist_i_ds: None,
away_team_abbreviation: None,
away_team_location: None,
away_team_name: None,
balance: None,
boarding_group: None,
boarding_sequence_number: None,
car_number: None,
confirmation_number: None,
current_arrival_date: None,
current_boarding_date: None,
current_departure_date: None,
departure_airport_code: None,
departure_airport_name: None,
departure_gate: None,
departure_location: None,
departure_location_description: None,
departure_platform: None,
departure_station_name: None,
departure_terminal: None,
destination_airport_code: None,
destination_airport_name: None,
destination_gate: None,
destination_location: None,
destination_location_description: None,
destination_platform: None,
destination_station_name: None,
destination_terminal: None,
duration: None,
event_end_date: None,
event_name: None,
event_start_date: None,
event_type: None,
flight_code: None,
flight_number: None,
genre: None,
home_team_abbreviation: None,
home_team_location: None,
home_team_name: None,
league_abbreviation: None,
league_name: None,
membership_program_name: None,
membership_program_number: None,
original_arrival_date: None,
original_boarding_date: None,
original_departure_date: None,
passenger_name: None,
performer_names: None,
priority_status: None,
seats: None,
security_screening: None,
silence_requested: None,
sport_name: None,
total_price: None,
transit_provider: None,
transit_status: None,
transit_status_reason: None,
vehicle_name: None,
vehicle_number: None,
vehicle_type: None,
venue_entrance: None,
venue_location: None,
venue_name: None,
venue_phone_number: None,
venue_room: None,
}
}
}
impl Default for Semantics {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CurrencyAmount {
#[serde(rename = "amount")]
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<String>,
#[serde(rename = "currencyCode")]
#[serde(skip_serializing_if = "Option::is_none")]
pub currency_code: Option<String>,
}
impl CurrencyAmount {
pub fn new() -> Self {
Self {
amount: None,
currency_code: None,
}
}
}
impl Default for CurrencyAmount {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
#[serde(rename = "altitude")]
#[serde(skip_serializing_if = "Option::is_none")]
pub altitude: Option<f64>,
#[serde(rename = "latitude")]
pub latitude: f64,
#[serde(rename = "longitude")]
pub longitude: f64,
#[serde(rename = "relevantText")]
#[serde(skip_serializing_if = "Option::is_none")]
pub relevant_text: Option<String>,
}
impl Location {
pub fn new(latitude: f64, longitude: f64) -> Self {
Self {
altitude: None,
latitude,
longitude,
relevant_text: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PersonNameComponents {
#[serde(rename = "familyName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub family_name: Option<String>,
#[serde(rename = "givenName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub given_name: Option<String>,
#[serde(rename = "middleName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub middle_name: Option<String>,
#[serde(rename = "namePrefix")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name_prefix: Option<String>,
#[serde(rename = "nameSuffix")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name_suffix: Option<String>,
#[serde(rename = "nickname")]
#[serde(skip_serializing_if = "Option::is_none")]
pub nickname: Option<String>,
#[serde(rename = "phoneticRepresentation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub phonetic_representation: Box<Option<PhoneticRepresentation>>,
}
impl PersonNameComponents {
pub fn new() -> Self {
Self {
family_name: None,
given_name: None,
middle_name: None,
name_prefix: None,
name_suffix: None,
nickname: None,
phonetic_representation: Box::new(None),
}
}
}
impl Default for PersonNameComponents {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhoneticRepresentation {
#[serde(rename = "familyName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub family_name: Option<String>,
#[serde(rename = "givenName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub given_name: Option<String>,
#[serde(rename = "middleName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub middle_name: Option<String>,
#[serde(rename = "namePrefix")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name_prefix: Option<String>,
#[serde(rename = "nameSuffix")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name_suffix: Option<String>,
#[serde(rename = "nickname")]
#[serde(skip_serializing_if = "Option::is_none")]
pub nickname: Option<String>,
#[serde(rename = "phoneticRepresentation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub phonetic_representation: Box<Option<PhoneticRepresentation>>,
}
impl PhoneticRepresentation {
pub fn new() -> Self {
Self {
family_name: None,
given_name: None,
middle_name: None,
name_prefix: None,
name_suffix: None,
nickname: None,
phonetic_representation: Box::new(None),
}
}
}
impl Default for PhoneticRepresentation {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Seat {
#[serde(rename = "seatDescription")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_description: Option<String>,
#[serde(rename = "seatIdentifier")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_identifier: Option<String>,
#[serde(rename = "seatNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_number: Option<String>,
#[serde(rename = "seatRow")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_row: Option<String>,
#[serde(rename = "seatSection")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_section: Option<String>,
#[serde(rename = "seatType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub seat_type: Option<String>,
}
impl Seat {
pub fn new() -> Self {
Self {
seat_description: None,
seat_identifier: None,
seat_number: None,
seat_row: None,
seat_section: None,
seat_type: None,
}
}
}
impl Default for Seat {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Details {
#[serde(rename = "auxiliaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub auxiliary_fields: Option<Vec<Field>>,
#[serde(rename = "backFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub back_fields: Option<Vec<Field>>,
#[serde(rename = "headerFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub header_fields: Option<Vec<Field>>,
#[serde(rename = "primaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_fields: Option<Vec<Field>>,
#[serde(rename = "secondaryFields")]
#[serde(skip_serializing_if = "Option::is_none")]
pub secondary_fields: Option<Vec<Field>>,
#[serde(rename = "transitType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transit_type: Option<TransitType>,
}
impl Details {
pub fn new() -> Self {
Self {
auxiliary_fields: None,
back_fields: None,
header_fields: None,
primary_fields: None,
secondary_fields: None,
transit_type: None,
}
}
pub fn transit_type(&mut self, transit_type: TransitType) {
self.transit_type = Some(transit_type);
}
pub fn add_auxiliary_field(&mut self, field: Field) {
let mut vec = match &self.auxiliary_fields {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(field);
self.auxiliary_fields = Some(vec);
}
pub fn clear_auxiliary_fields(&mut self) {
self.auxiliary_fields = None;
}
pub fn add_back_field(&mut self, field: Field) {
let mut vec = match &self.back_fields {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(field);
self.back_fields = Some(vec);
}
pub fn clear_back_fields(&mut self) {
self.back_fields = None;
}
pub fn add_header_field(&mut self, field: Field) {
let mut vec = match &self.header_fields {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(field);
self.header_fields = Some(vec);
}
pub fn clear_header_fields(&mut self) {
self.header_fields = None;
}
pub fn add_primary_field(&mut self, field: Field) {
let mut vec = match &self.primary_fields {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(field);
self.primary_fields = Some(vec);
}
pub fn clear_primary_fields(&mut self) {
self.primary_fields = None;
}
pub fn add_secondary_field(&mut self, field: Field) {
let mut vec = match &self.secondary_fields {
Some(vec) => vec.clone(),
None => Vec::new(),
};
vec.push(field);
self.secondary_fields = Some(vec);
}
pub fn clear_secondary_fields(&mut self) {
self.secondary_fields = None;
}
}
impl Default for Details {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Nfc {
#[serde(rename = "encryptionPublicKey")]
#[serde(skip_serializing_if = "Option::is_none")]
pub encryption_public_key: Option<String>,
#[serde(rename = "message")]
pub message: String,
}
impl Nfc {
pub fn new(message: &str) -> Self {
Self {
encryption_public_key: None,
message: message.into(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ValueUnion {
Double(f64),
String(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum BarcodeFormat {
#[serde(rename = "PKBarcodeFormatAztec")]
PkBarcodeFormatAztec,
#[serde(rename = "PKBarcodeFormatCode128")]
PkBarcodeFormatCode128,
#[serde(rename = "PKBarcodeFormatPDF417")]
PkBarcodeFormatPdf417,
#[serde(rename = "PKBarcodeFormatQR")]
PkBarcodeFormatQr,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EStyle {
#[serde(rename = "PKDateStyleFull")]
PkDateStyleFull,
#[serde(rename = "PKDateStyleLong")]
PkDateStyleLong,
#[serde(rename = "PKDateStyleMedium")]
PkDateStyleMedium,
#[serde(rename = "PKDateStyleNone")]
PkDateStyleNone,
#[serde(rename = "PKDateStyleShort")]
PkDateStyleShort,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NumberStyle {
#[serde(rename = "PKNumberStyleDecimal")]
PkNumberStyleDecimal,
#[serde(rename = "PKNumberStylePercent")]
PkNumberStylePercent,
#[serde(rename = "PKNumberStyleScientific")]
PkNumberStyleScientific,
#[serde(rename = "PKNumberStyleSpellOut")]
PkNumberStyleSpellOut,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EventType {
#[serde(rename = "PKEventTypeConference")]
PkEventTypeConference,
#[serde(rename = "PKEventTypeConvention")]
PkEventTypeConvention,
#[serde(rename = "PKEventTypeGeneric")]
PkEventTypeGeneric,
#[serde(rename = "PKEventTypeLivePerformance")]
PkEventTypeLivePerformance,
#[serde(rename = "PKEventTypeMovie")]
PkEventTypeMovie,
#[serde(rename = "PKEventTypeSocialGathering")]
PkEventTypeSocialGathering,
#[serde(rename = "PKEventTypeSports")]
PkEventTypeSports,
#[serde(rename = "PKEventTypeWorkshop")]
PkEventTypeWorkshop,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TextAlignment {
#[serde(rename = "PKTextAlignmentCenter")]
PkTextAlignmentCenter,
#[serde(rename = "PKTextAlignmentLeft")]
PkTextAlignmentLeft,
#[serde(rename = "PKTextAlignmentNatural")]
PkTextAlignmentNatural,
#[serde(rename = "PKTextAlignmentRight")]
PkTextAlignmentRight,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TransitType {
#[serde(rename = "PKTransitTypeAir")]
PkTransitTypeAir,
#[serde(rename = "PKTransitTypeBoat")]
PkTransitTypeBoat,
#[serde(rename = "PKTransitTypeBus")]
PkTransitTypeBus,
#[serde(rename = "PKTransitTypeGeneric")]
PkTransitTypeGeneric,
#[serde(rename = "PKTransitTypeTrain")]
PkTransitTypeTrain,
}