rust_tdlib/types/
call_server.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Describes a server for relaying call data
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct CallServer {
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    /// Server identifier
14
15    #[serde(
16        deserialize_with = "super::_common::number_from_string",
17        serialize_with = "super::_common::string_to_number"
18    )]
19    #[serde(default)]
20    id: i64,
21    /// Server IPv4 address
22
23    #[serde(default)]
24    ip_address: String,
25    /// Server IPv6 address
26
27    #[serde(default)]
28    ipv6_address: String,
29    /// Server port number
30
31    #[serde(default)]
32    port: i32,
33    /// Server type
34
35    #[serde(rename(serialize = "type", deserialize = "type"))]
36    #[serde(skip_serializing_if = "CallServerType::_is_default")]
37    type_: CallServerType,
38}
39
40impl RObject for CallServer {
41    #[doc(hidden)]
42    fn extra(&self) -> Option<&str> {
43        self.extra.as_deref()
44    }
45    #[doc(hidden)]
46    fn client_id(&self) -> Option<i32> {
47        self.client_id
48    }
49}
50
51impl CallServer {
52    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
53        Ok(serde_json::from_str(json.as_ref())?)
54    }
55    pub fn builder() -> CallServerBuilder {
56        let mut inner = CallServer::default();
57        inner.extra = Some(Uuid::new_v4().to_string());
58
59        CallServerBuilder { inner }
60    }
61
62    pub fn id(&self) -> i64 {
63        self.id
64    }
65
66    pub fn ip_address(&self) -> &String {
67        &self.ip_address
68    }
69
70    pub fn ipv6_address(&self) -> &String {
71        &self.ipv6_address
72    }
73
74    pub fn port(&self) -> i32 {
75        self.port
76    }
77
78    pub fn type_(&self) -> &CallServerType {
79        &self.type_
80    }
81}
82
83#[doc(hidden)]
84pub struct CallServerBuilder {
85    inner: CallServer,
86}
87
88#[deprecated]
89pub type RTDCallServerBuilder = CallServerBuilder;
90
91impl CallServerBuilder {
92    pub fn build(&self) -> CallServer {
93        self.inner.clone()
94    }
95
96    pub fn id(&mut self, id: i64) -> &mut Self {
97        self.inner.id = id;
98        self
99    }
100
101    pub fn ip_address<T: AsRef<str>>(&mut self, ip_address: T) -> &mut Self {
102        self.inner.ip_address = ip_address.as_ref().to_string();
103        self
104    }
105
106    pub fn ipv6_address<T: AsRef<str>>(&mut self, ipv6_address: T) -> &mut Self {
107        self.inner.ipv6_address = ipv6_address.as_ref().to_string();
108        self
109    }
110
111    pub fn port(&mut self, port: i32) -> &mut Self {
112        self.inner.port = port;
113        self
114    }
115
116    pub fn type_<T: AsRef<CallServerType>>(&mut self, type_: T) -> &mut Self {
117        self.inner.type_ = type_.as_ref().clone();
118        self
119    }
120}
121
122impl AsRef<CallServer> for CallServer {
123    fn as_ref(&self) -> &CallServer {
124        self
125    }
126}
127
128impl AsRef<CallServer> for CallServerBuilder {
129    fn as_ref(&self) -> &CallServer {
130        &self.inner
131    }
132}