rust_tdlib/types/
input_background.rs1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDInputBackground: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum InputBackground {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "inputBackgroundLocal")]
19 Local(InputBackgroundLocal),
20 #[serde(rename = "inputBackgroundRemote")]
22 Remote(InputBackgroundRemote),
23}
24
25impl RObject for InputBackground {
26 #[doc(hidden)]
27 fn extra(&self) -> Option<&str> {
28 match self {
29 InputBackground::Local(t) => t.extra(),
30 InputBackground::Remote(t) => t.extra(),
31
32 _ => None,
33 }
34 }
35 #[doc(hidden)]
36 fn client_id(&self) -> Option<i32> {
37 match self {
38 InputBackground::Local(t) => t.client_id(),
39 InputBackground::Remote(t) => t.client_id(),
40
41 _ => None,
42 }
43 }
44}
45
46impl InputBackground {
47 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
48 Ok(serde_json::from_str(json.as_ref())?)
49 }
50 #[doc(hidden)]
51 pub fn _is_default(&self) -> bool {
52 matches!(self, InputBackground::_Default)
53 }
54}
55
56impl AsRef<InputBackground> for InputBackground {
57 fn as_ref(&self) -> &InputBackground {
58 self
59 }
60}
61
62#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct InputBackgroundLocal {
65 #[doc(hidden)]
66 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
67 extra: Option<String>,
68 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
69 client_id: Option<i32>,
70 #[serde(skip_serializing_if = "InputFile::_is_default")]
73 background: InputFile,
74}
75
76impl RObject for InputBackgroundLocal {
77 #[doc(hidden)]
78 fn extra(&self) -> Option<&str> {
79 self.extra.as_deref()
80 }
81 #[doc(hidden)]
82 fn client_id(&self) -> Option<i32> {
83 self.client_id
84 }
85}
86
87impl TDInputBackground for InputBackgroundLocal {}
88
89impl InputBackgroundLocal {
90 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
91 Ok(serde_json::from_str(json.as_ref())?)
92 }
93 pub fn builder() -> InputBackgroundLocalBuilder {
94 let mut inner = InputBackgroundLocal::default();
95 inner.extra = Some(Uuid::new_v4().to_string());
96
97 InputBackgroundLocalBuilder { inner }
98 }
99
100 pub fn background(&self) -> &InputFile {
101 &self.background
102 }
103}
104
105#[doc(hidden)]
106pub struct InputBackgroundLocalBuilder {
107 inner: InputBackgroundLocal,
108}
109
110#[deprecated]
111pub type RTDInputBackgroundLocalBuilder = InputBackgroundLocalBuilder;
112
113impl InputBackgroundLocalBuilder {
114 pub fn build(&self) -> InputBackgroundLocal {
115 self.inner.clone()
116 }
117
118 pub fn background<T: AsRef<InputFile>>(&mut self, background: T) -> &mut Self {
119 self.inner.background = background.as_ref().clone();
120 self
121 }
122}
123
124impl AsRef<InputBackgroundLocal> for InputBackgroundLocal {
125 fn as_ref(&self) -> &InputBackgroundLocal {
126 self
127 }
128}
129
130impl AsRef<InputBackgroundLocal> for InputBackgroundLocalBuilder {
131 fn as_ref(&self) -> &InputBackgroundLocal {
132 &self.inner
133 }
134}
135
136#[derive(Debug, Clone, Default, Serialize, Deserialize)]
138pub struct InputBackgroundRemote {
139 #[doc(hidden)]
140 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
141 extra: Option<String>,
142 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
143 client_id: Option<i32>,
144 #[serde(
147 deserialize_with = "super::_common::number_from_string",
148 serialize_with = "super::_common::string_to_number"
149 )]
150 #[serde(default)]
151 background_id: i64,
152}
153
154impl RObject for InputBackgroundRemote {
155 #[doc(hidden)]
156 fn extra(&self) -> Option<&str> {
157 self.extra.as_deref()
158 }
159 #[doc(hidden)]
160 fn client_id(&self) -> Option<i32> {
161 self.client_id
162 }
163}
164
165impl TDInputBackground for InputBackgroundRemote {}
166
167impl InputBackgroundRemote {
168 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
169 Ok(serde_json::from_str(json.as_ref())?)
170 }
171 pub fn builder() -> InputBackgroundRemoteBuilder {
172 let mut inner = InputBackgroundRemote::default();
173 inner.extra = Some(Uuid::new_v4().to_string());
174
175 InputBackgroundRemoteBuilder { inner }
176 }
177
178 pub fn background_id(&self) -> i64 {
179 self.background_id
180 }
181}
182
183#[doc(hidden)]
184pub struct InputBackgroundRemoteBuilder {
185 inner: InputBackgroundRemote,
186}
187
188#[deprecated]
189pub type RTDInputBackgroundRemoteBuilder = InputBackgroundRemoteBuilder;
190
191impl InputBackgroundRemoteBuilder {
192 pub fn build(&self) -> InputBackgroundRemote {
193 self.inner.clone()
194 }
195
196 pub fn background_id(&mut self, background_id: i64) -> &mut Self {
197 self.inner.background_id = background_id;
198 self
199 }
200}
201
202impl AsRef<InputBackgroundRemote> for InputBackgroundRemote {
203 fn as_ref(&self) -> &InputBackgroundRemote {
204 self
205 }
206}
207
208impl AsRef<InputBackgroundRemote> for InputBackgroundRemoteBuilder {
209 fn as_ref(&self) -> &InputBackgroundRemote {
210 &self.inner
211 }
212}