1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
16pub struct Car {
17 #[serde(rename = "weight")]
19 pub weight: i32,
20 #[serde(rename = "length")]
22 pub length: i32,
23 #[serde(rename = "width")]
25 pub width: i32,
26 #[serde(rename = "height")]
28 pub height: i32,
29 #[serde(rename = "brand")]
31 pub brand: String,
32 #[serde(rename = "model")]
34 pub model: String,
35 #[serde(rename = "specialType", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
36 pub special_type: Option<Option<String>>,
37 #[serde(rename = "roofWidth")]
38 pub roof_width: i32,
39 #[serde(rename = "textileRoof", skip_serializing_if = "Option::is_none")]
41 pub textile_roof: Option<bool>,
42 #[serde(rename = "rack", skip_serializing_if = "Option::is_none")]
43 pub rack: Option<Box<models::CarRack>>,
44 #[serde(rename = "attachedItems", skip_serializing_if = "Option::is_none")]
46 pub attached_items: Option<Vec<String>>,
47 #[serde(rename = "contactName", skip_serializing_if = "Option::is_none")]
49 pub contact_name: Option<String>,
50 #[serde(rename = "contactDetail", skip_serializing_if = "Option::is_none")]
51 pub contact_detail: Option<Box<models::ContactDetail>>,
52 #[serde(rename = "licensePlate")]
54 pub license_plate: String,
55}
56
57impl Car {
58 pub fn new(weight: i32, length: i32, width: i32, height: i32, brand: String, model: String, roof_width: i32, license_plate: String) -> Car {
59 Car {
60 weight,
61 length,
62 width,
63 height,
64 brand,
65 model,
66 special_type: None,
67 roof_width,
68 textile_roof: None,
69 rack: None,
70 attached_items: None,
71 contact_name: None,
72 contact_detail: None,
73 license_plate,
74 }
75 }
76}
77