rust_tdlib/types/
address.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Describes an address
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct Address {
8    #[doc(hidden)]
9    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
10    extra: Option<String>,
11    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
12    client_id: Option<i32>,
13    /// A two-letter ISO 3166-1 alpha-2 country code
14
15    #[serde(default)]
16    country_code: String,
17    /// State, if applicable
18
19    #[serde(default)]
20    state: String,
21    /// City
22
23    #[serde(default)]
24    city: String,
25    /// First line of the address
26
27    #[serde(default)]
28    street_line1: String,
29    /// Second line of the address
30
31    #[serde(default)]
32    street_line2: String,
33    /// Address postal code
34
35    #[serde(default)]
36    postal_code: String,
37}
38
39impl RObject for Address {
40    #[doc(hidden)]
41    fn extra(&self) -> Option<&str> {
42        self.extra.as_deref()
43    }
44    #[doc(hidden)]
45    fn client_id(&self) -> Option<i32> {
46        self.client_id
47    }
48}
49
50impl Address {
51    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
52        Ok(serde_json::from_str(json.as_ref())?)
53    }
54    pub fn builder() -> AddressBuilder {
55        let mut inner = Address::default();
56        inner.extra = Some(Uuid::new_v4().to_string());
57
58        AddressBuilder { inner }
59    }
60
61    pub fn country_code(&self) -> &String {
62        &self.country_code
63    }
64
65    pub fn state(&self) -> &String {
66        &self.state
67    }
68
69    pub fn city(&self) -> &String {
70        &self.city
71    }
72
73    pub fn street_line1(&self) -> &String {
74        &self.street_line1
75    }
76
77    pub fn street_line2(&self) -> &String {
78        &self.street_line2
79    }
80
81    pub fn postal_code(&self) -> &String {
82        &self.postal_code
83    }
84}
85
86#[doc(hidden)]
87pub struct AddressBuilder {
88    inner: Address,
89}
90
91#[deprecated]
92pub type RTDAddressBuilder = AddressBuilder;
93
94impl AddressBuilder {
95    pub fn build(&self) -> Address {
96        self.inner.clone()
97    }
98
99    pub fn country_code<T: AsRef<str>>(&mut self, country_code: T) -> &mut Self {
100        self.inner.country_code = country_code.as_ref().to_string();
101        self
102    }
103
104    pub fn state<T: AsRef<str>>(&mut self, state: T) -> &mut Self {
105        self.inner.state = state.as_ref().to_string();
106        self
107    }
108
109    pub fn city<T: AsRef<str>>(&mut self, city: T) -> &mut Self {
110        self.inner.city = city.as_ref().to_string();
111        self
112    }
113
114    pub fn street_line1<T: AsRef<str>>(&mut self, street_line1: T) -> &mut Self {
115        self.inner.street_line1 = street_line1.as_ref().to_string();
116        self
117    }
118
119    pub fn street_line2<T: AsRef<str>>(&mut self, street_line2: T) -> &mut Self {
120        self.inner.street_line2 = street_line2.as_ref().to_string();
121        self
122    }
123
124    pub fn postal_code<T: AsRef<str>>(&mut self, postal_code: T) -> &mut Self {
125        self.inner.postal_code = postal_code.as_ref().to_string();
126        self
127    }
128}
129
130impl AsRef<Address> for Address {
131    fn as_ref(&self) -> &Address {
132        self
133    }
134}
135
136impl AsRef<Address> for AddressBuilder {
137    fn as_ref(&self) -> &Address {
138        &self.inner
139    }
140}