1use serde::{Deserialize, Serialize};
2
3use crate::models::address::Address;
4use crate::models::realestate::OfferType;
5
6#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
7#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
8pub enum Category {
9 Flat,
10 Apartment,
11 Maisonette,
12 Duplex,
13 AtticFlat,
14 RoofFlat,
15 Studio,
16 SingleRoom,
17 TerraceFlat,
18 BachelorFlat,
19 Loft,
20 Attic,
21 RowHouse,
22 BifamiliarHouse,
23 TerraceHouse,
24 Villa,
25 FarmHouse,
26 CaveHouse,
27 Castle,
28 GrannyFlat,
29 Chalet,
30 Rustico,
31 SingleHouse,
32 HobbyRoom,
33 CellarCompartment,
34 AtticCompartment,
35 FurnishedFlat,
36}
37
38#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
39#[serde(rename_all = "camelCase")]
40pub struct Characteristics {
41 pub living_space: u32,
42 pub number_of_rooms: f32,
43}
44
45#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
46#[serde(rename_all = "camelCase")]
47pub struct Lister {
48 pub phone: Option<String>,
49}
50
51
52#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
53#[serde(rename_all = "camelCase")]
54pub struct Attachment {
55 #[serde(rename = "type")]
56 pub t: String,
57 pub url: String,
58 pub file: String,
59}
60
61
62#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
63#[serde(rename_all = "camelCase")]
64pub struct LocalizationEntryText {
65 pub title: String,
66}
67
68#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
69#[serde(rename_all = "camelCase")]
70pub struct LocalizationEntry {
71 pub attachments: Vec<Attachment>,
72 pub text: LocalizationEntryText,
73}
74
75#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
76#[serde(rename_all = "camelCase")]
77pub struct Localization {
78 pub de: Option<LocalizationEntry>,
79 pub primary: String,
80}
81
82#[derive(Serialize, Deserialize, Debug, Clone)]
83pub enum PriceInterval {
84 MONTH
85}
86
87#[derive(Serialize, Deserialize, Debug, Clone)]
88#[serde(rename_all = "camelCase")]
89pub struct Price {
90 pub interval: Option<PriceInterval>,
91 pub net: Option<u32>,
92 pub gross: Option<u32>,
93 pub extra: Option<u32>,
94}
95
96#[derive(Serialize, Deserialize, Debug, Clone)]
97pub enum Currency {
98 CHF
99}
100
101#[derive(Serialize, Deserialize, Debug, Clone)]
102#[serde(rename_all = "camelCase")]
103pub struct Prices {
104 pub rent: Option<Price>,
105 pub currency: Currency,
106 pub buy: Option<Price>,
107}
108
109#[derive(Serialize, Deserialize, Debug, Clone)]
110#[serde(rename_all = "camelCase")]
111pub struct Listing {
112 pub address: Address,
113 pub categories: Vec<Category>,
114 pub characteristics: Characteristics,
115 pub id: String,
116 pub lister: Lister,
117 pub localization: Localization,
118 pub offer_type: OfferType,
119 pub prices: Prices,
120
121}