1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
17pub struct Trip {
18 #[serde(rename = "id")]
20 pub id: String,
21 #[serde(rename = "externalRef", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
23 pub external_ref: Option<Option<String>>,
24 #[serde(rename = "summary", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
26 pub summary: Option<Option<String>>,
27 #[serde(rename = "duration")]
29 pub duration: String,
30 #[serde(rename = "direction", skip_serializing_if = "Option::is_none")]
31 pub direction: Option<models::TripDirectionType>,
32 #[serde(rename = "origin", skip_serializing_if = "Option::is_none")]
33 pub origin: Option<Box<models::PlaceRef>>,
34 #[serde(rename = "originName", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
36 pub origin_name: Option<Option<String>>,
37 #[serde(rename = "destination", skip_serializing_if = "Option::is_none")]
38 pub destination: Option<Box<models::PlaceRef>>,
39 #[serde(rename = "destinationName", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
41 pub destination_name: Option<Option<String>>,
42 #[serde(rename = "startTime")]
44 pub start_time: String,
45 #[serde(rename = "endTime")]
47 pub end_time: String,
48 #[serde(rename = "transfers")]
50 pub transfers: i32,
51 #[serde(rename = "distance", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
53 pub distance: Option<Option<i32>>,
54 #[serde(rename = "legs")]
56 pub legs: Vec<models::TripLeg>,
57 #[serde(rename = "operatingDays", skip_serializing_if = "Option::is_none")]
58 pub operating_days: Option<Box<models::OperatingDays>>,
59 #[serde(rename = "operatingDaysDescription", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
61 pub operating_days_description: Option<Option<String>>,
62 #[serde(rename = "situationFullRefs", skip_serializing_if = "Option::is_none")]
63 pub situation_full_refs: Option<Vec<String>>,
64 #[serde(rename = "tripStatus", skip_serializing_if = "Option::is_none")]
65 pub trip_status: Option<Box<models::TripStatus>>,
66 #[serde(rename = "_links", skip_serializing_if = "Option::is_none")]
68 pub _links: Option<Vec<models::Link>>,
69}
70
71impl Trip {
72 pub fn new(id: String, duration: String, start_time: String, end_time: String, transfers: i32, legs: Vec<models::TripLeg>) -> Trip {
74 Trip {
75 id,
76 external_ref: None,
77 summary: None,
78 duration,
79 direction: None,
80 origin: None,
81 origin_name: None,
82 destination: None,
83 destination_name: None,
84 start_time,
85 end_time,
86 transfers,
87 distance: None,
88 legs,
89 operating_days: None,
90 operating_days_description: None,
91 situation_full_refs: None,
92 trip_status: None,
93 _links: None,
94 }
95 }
96}
97