rust_tdlib/types/
chat_filter_info.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Contains basic information about a chat filter
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct ChatFilterInfo {
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    /// Unique chat filter identifier
14
15    #[serde(default)]
16    id: i32,
17    /// The title of the filter; 1-12 characters without line feeds
18
19    #[serde(default)]
20    title: String,
21    /// The chosen or default icon name for short filter representation. One of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", "Custom", "Setup", "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work"
22
23    #[serde(default)]
24    icon_name: String,
25}
26
27impl RObject for ChatFilterInfo {
28    #[doc(hidden)]
29    fn extra(&self) -> Option<&str> {
30        self.extra.as_deref()
31    }
32    #[doc(hidden)]
33    fn client_id(&self) -> Option<i32> {
34        self.client_id
35    }
36}
37
38impl ChatFilterInfo {
39    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
40        Ok(serde_json::from_str(json.as_ref())?)
41    }
42    pub fn builder() -> ChatFilterInfoBuilder {
43        let mut inner = ChatFilterInfo::default();
44        inner.extra = Some(Uuid::new_v4().to_string());
45
46        ChatFilterInfoBuilder { inner }
47    }
48
49    pub fn id(&self) -> i32 {
50        self.id
51    }
52
53    pub fn title(&self) -> &String {
54        &self.title
55    }
56
57    pub fn icon_name(&self) -> &String {
58        &self.icon_name
59    }
60}
61
62#[doc(hidden)]
63pub struct ChatFilterInfoBuilder {
64    inner: ChatFilterInfo,
65}
66
67#[deprecated]
68pub type RTDChatFilterInfoBuilder = ChatFilterInfoBuilder;
69
70impl ChatFilterInfoBuilder {
71    pub fn build(&self) -> ChatFilterInfo {
72        self.inner.clone()
73    }
74
75    pub fn id(&mut self, id: i32) -> &mut Self {
76        self.inner.id = id;
77        self
78    }
79
80    pub fn title<T: AsRef<str>>(&mut self, title: T) -> &mut Self {
81        self.inner.title = title.as_ref().to_string();
82        self
83    }
84
85    pub fn icon_name<T: AsRef<str>>(&mut self, icon_name: T) -> &mut Self {
86        self.inner.icon_name = icon_name.as_ref().to_string();
87        self
88    }
89}
90
91impl AsRef<ChatFilterInfo> for ChatFilterInfo {
92    fn as_ref(&self) -> &ChatFilterInfo {
93        self
94    }
95}
96
97impl AsRef<ChatFilterInfo> for ChatFilterInfoBuilder {
98    fn as_ref(&self) -> &ChatFilterInfo {
99        &self.inner
100    }
101}