osdm_sys/models/
product.rs1use 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 Product {
18 #[serde(rename = "id")]
20 pub id: String,
21 #[serde(rename = "summary", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
23 pub summary: Option<Option<String>>,
24 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
26 pub r#type: Option<String>,
27 #[serde(rename = "code")]
29 pub code: String,
30 #[serde(rename = "description", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
32 pub description: Option<Option<String>>,
33 #[serde(rename = "owner")]
35 pub owner: String,
36 #[serde(rename = "conditions", skip_serializing_if = "Option::is_none")]
38 pub conditions: Option<Vec<models::Condition>>,
39 #[serde(rename = "flexibility")]
40 pub flexibility: String,
41 #[serde(rename = "serviceClass", skip_serializing_if = "Option::is_none")]
42 pub service_class: Option<Box<models::ServiceClass>>,
43 #[serde(rename = "travelClass", skip_serializing_if = "Option::is_none")]
45 pub travel_class: Option<String>,
46 #[serde(rename = "fulfillmentOptions", skip_serializing_if = "Option::is_none")]
47 pub fulfillment_options: Option<Vec<models::FulfillmentOption>>,
48 #[serde(rename = "isTrainBound", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
49 pub is_train_bound: Option<Option<bool>>,
50 #[serde(rename = "isReturnProduct", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
51 pub is_return_product: Option<Option<bool>>,
52 #[serde(rename = "serviceConstraintText", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
53 pub service_constraint_text: Option<Option<String>>,
54 #[serde(rename = "carrierConstraintText", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
55 pub carrier_constraint_text: Option<Option<String>>,
56 #[serde(rename = "descriptiveTexts", skip_serializing_if = "Option::is_none")]
57 pub descriptive_texts: Option<Vec<models::TextElement>>,
58 #[serde(rename = "tariff", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
60 pub tariff: Option<Option<String>>,
61 #[serde(rename = "combinationTags", skip_serializing_if = "Option::is_none")]
62 pub combination_tags: Option<Vec<models::CombinationTag>>,
63 #[serde(rename = "productTags", skip_serializing_if = "Option::is_none")]
65 pub product_tags: Option<Vec<String>>,
66 #[serde(rename = "_links", skip_serializing_if = "Option::is_none")]
68 pub _links: Option<Vec<models::Link>>,
69}
70
71impl Product {
72 pub fn new(id: String, code: String, owner: String, flexibility: String) -> Product {
74 Product {
75 id,
76 summary: None,
77 r#type: None,
78 code,
79 description: None,
80 owner,
81 conditions: None,
82 flexibility,
83 service_class: None,
84 travel_class: None,
85 fulfillment_options: None,
86 is_train_bound: None,
87 is_return_product: None,
88 service_constraint_text: None,
89 carrier_constraint_text: None,
90 descriptive_texts: None,
91 tariff: None,
92 combination_tags: None,
93 product_tags: None,
94 _links: None,
95 }
96 }
97}
98