rust_tdlib/types/
input_background.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Contains information about background to set
8pub trait TDInputBackground: Debug + RObject {}
9
10/// Contains information about background to set
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum InputBackground {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// A background from a local file
18    #[serde(rename = "inputBackgroundLocal")]
19    Local(InputBackgroundLocal),
20    /// A background from the server
21    #[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/// A background from a local file
63#[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    /// Background file to use. Only inputFileLocal and inputFileGenerated are supported. The file must be in JPEG format for wallpapers and in PNG format for patterns
71
72    #[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/// A background from the server
137#[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    /// The background identifier
145
146    #[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}