rust_tdlib/types/
venue.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Describes a venue
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct Venue {
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    /// Venue location; as defined by the sender
14    location: Location,
15    /// Venue name; as defined by the sender
16
17    #[serde(default)]
18    title: String,
19    /// Venue address; as defined by the sender
20
21    #[serde(default)]
22    address: String,
23    /// Provider of the venue database; as defined by the sender. Currently, only "foursquare" and "gplaces" (Google Places) need to be supported
24
25    #[serde(default)]
26    provider: String,
27    /// Identifier of the venue in the provider database; as defined by the sender
28
29    #[serde(default)]
30    id: String,
31    /// Type of the venue in the provider database; as defined by the sender
32
33    #[serde(rename(serialize = "type", deserialize = "type"))]
34    #[serde(default)]
35    type_: String,
36}
37
38impl RObject for Venue {
39    #[doc(hidden)]
40    fn extra(&self) -> Option<&str> {
41        self.extra.as_deref()
42    }
43    #[doc(hidden)]
44    fn client_id(&self) -> Option<i32> {
45        self.client_id
46    }
47}
48
49impl Venue {
50    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
51        Ok(serde_json::from_str(json.as_ref())?)
52    }
53    pub fn builder() -> VenueBuilder {
54        let mut inner = Venue::default();
55        inner.extra = Some(Uuid::new_v4().to_string());
56
57        VenueBuilder { inner }
58    }
59
60    pub fn location(&self) -> &Location {
61        &self.location
62    }
63
64    pub fn title(&self) -> &String {
65        &self.title
66    }
67
68    pub fn address(&self) -> &String {
69        &self.address
70    }
71
72    pub fn provider(&self) -> &String {
73        &self.provider
74    }
75
76    pub fn id(&self) -> &String {
77        &self.id
78    }
79
80    pub fn type_(&self) -> &String {
81        &self.type_
82    }
83}
84
85#[doc(hidden)]
86pub struct VenueBuilder {
87    inner: Venue,
88}
89
90#[deprecated]
91pub type RTDVenueBuilder = VenueBuilder;
92
93impl VenueBuilder {
94    pub fn build(&self) -> Venue {
95        self.inner.clone()
96    }
97
98    pub fn location<T: AsRef<Location>>(&mut self, location: T) -> &mut Self {
99        self.inner.location = location.as_ref().clone();
100        self
101    }
102
103    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
104        self.inner.title = title.as_ref().to_string();
105        self
106    }
107
108    pub fn address<T: AsRef<str>>(&mut self, address: T) -> &mut Self {
109        self.inner.address = address.as_ref().to_string();
110        self
111    }
112
113    pub fn provider<T: AsRef<str>>(&mut self, provider: T) -> &mut Self {
114        self.inner.provider = provider.as_ref().to_string();
115        self
116    }
117
118    pub fn id<T: AsRef<str>>(&mut self, id: T) -> &mut Self {
119        self.inner.id = id.as_ref().to_string();
120        self
121    }
122
123    pub fn type_<T: AsRef<str>>(&mut self, type_: T) -> &mut Self {
124        self.inner.type_ = type_.as_ref().to_string();
125        self
126    }
127}
128
129impl AsRef<Venue> for Venue {
130    fn as_ref(&self) -> &Venue {
131        self
132    }
133}
134
135impl AsRef<Venue> for VenueBuilder {
136    fn as_ref(&self) -> &Venue {
137        &self.inner
138    }
139}