use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct Product {
#[serde(rename = "id")]
pub id: String,
#[serde(rename = "summary", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub summary: Option<Option<String>>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(rename = "code")]
pub code: String,
#[serde(rename = "description", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub description: Option<Option<String>>,
#[serde(rename = "owner")]
pub owner: String,
#[serde(rename = "conditions", skip_serializing_if = "Option::is_none")]
pub conditions: Option<Vec<models::Condition>>,
#[serde(rename = "flexibility")]
pub flexibility: String,
#[serde(rename = "serviceClass", skip_serializing_if = "Option::is_none")]
pub service_class: Option<Box<models::ServiceClass>>,
#[serde(rename = "travelClass", skip_serializing_if = "Option::is_none")]
pub travel_class: Option<String>,
#[serde(rename = "fulfillmentOptions", skip_serializing_if = "Option::is_none")]
pub fulfillment_options: Option<Vec<models::FulfillmentOption>>,
#[serde(rename = "isTrainBound", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub is_train_bound: Option<Option<bool>>,
#[serde(rename = "isReturnProduct", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub is_return_product: Option<Option<bool>>,
#[serde(rename = "serviceConstraintText", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub service_constraint_text: Option<Option<String>>,
#[serde(rename = "carrierConstraintText", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub carrier_constraint_text: Option<Option<String>>,
#[serde(rename = "descriptiveTexts", skip_serializing_if = "Option::is_none")]
pub descriptive_texts: Option<Vec<models::TextElement>>,
#[serde(rename = "tariff", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub tariff: Option<Option<String>>,
#[serde(rename = "combinationTags", skip_serializing_if = "Option::is_none")]
pub combination_tags: Option<Vec<models::CombinationTag>>,
#[serde(rename = "productTags", skip_serializing_if = "Option::is_none")]
pub product_tags: Option<Vec<String>>,
#[serde(rename = "_links", skip_serializing_if = "Option::is_none")]
pub _links: Option<Vec<models::Link>>,
}
impl Product {
pub fn new(id: String, code: String, owner: String, flexibility: String) -> Product {
Product {
id,
summary: None,
r#type: None,
code,
description: None,
owner,
conditions: None,
flexibility,
service_class: None,
travel_class: None,
fulfillment_options: None,
is_train_bound: None,
is_return_product: None,
service_constraint_text: None,
carrier_constraint_text: None,
descriptive_texts: None,
tariff: None,
combination_tags: None,
product_tags: None,
_links: None,
}
}
}