Skip to main content

homegate/models/
listing.rs

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}