use crate::types::*;
use crate::errors::*;
use uuid::Uuid;
use std::fmt::Debug;
use serde::de::{Deserialize, Deserializer};
pub trait TDChatSource: Debug + RObject {}
#[derive(Debug, Clone, Serialize)]
#[serde(untagged)]
pub enum ChatSource {
#[doc(hidden)] _Default(()),
MtprotoProxy(ChatSourceMtprotoProxy),
PublicServiceAnnouncement(ChatSourcePublicServiceAnnouncement),
}
impl Default for ChatSource {
fn default() -> Self { ChatSource::_Default(()) }
}
impl<'de> Deserialize<'de> for ChatSource {
fn deserialize<D>(deserializer: D) -> Result<ChatSource, D::Error> where D: Deserializer<'de> {
use serde::de::Error;
rtd_enum_deserialize!(
ChatSource,
(chatSourceMtprotoProxy, MtprotoProxy);
(chatSourcePublicServiceAnnouncement, PublicServiceAnnouncement);
)(deserializer)
}
}
impl RObject for ChatSource {
#[doc(hidden)] fn td_name(&self) -> &'static str {
match self {
ChatSource::MtprotoProxy(t) => t.td_name(),
ChatSource::PublicServiceAnnouncement(t) => t.td_name(),
_ => "-1",
}
}
#[doc(hidden)] fn extra(&self) -> Option<String> {
match self {
ChatSource::MtprotoProxy(t) => t.extra(),
ChatSource::PublicServiceAnnouncement(t) => t.extra(),
_ => None,
}
}
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl ChatSource {
pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
#[doc(hidden)] pub fn _is_default(&self) -> bool { if let ChatSource::_Default(_) = self { true } else { false } }
pub fn is_mtproto_proxy(&self) -> bool { if let ChatSource::MtprotoProxy(_) = self { true } else { false } }
pub fn is_public_service_announcement(&self) -> bool { if let ChatSource::PublicServiceAnnouncement(_) = self { true } else { false } }
pub fn on_mtproto_proxy<F: FnOnce(&ChatSourceMtprotoProxy)>(&self, fnc: F) -> &Self { if let ChatSource::MtprotoProxy(t) = self { fnc(t) }; self }
pub fn on_public_service_announcement<F: FnOnce(&ChatSourcePublicServiceAnnouncement)>(&self, fnc: F) -> &Self { if let ChatSource::PublicServiceAnnouncement(t) = self { fnc(t) }; self }
pub fn as_mtproto_proxy(&self) -> Option<&ChatSourceMtprotoProxy> { if let ChatSource::MtprotoProxy(t) = self { return Some(t) } None }
pub fn as_public_service_announcement(&self) -> Option<&ChatSourcePublicServiceAnnouncement> { if let ChatSource::PublicServiceAnnouncement(t) = self { return Some(t) } None }
pub fn mtproto_proxy<T: AsRef<ChatSourceMtprotoProxy>>(t: T) -> Self { ChatSource::MtprotoProxy(t.as_ref().clone()) }
pub fn public_service_announcement<T: AsRef<ChatSourcePublicServiceAnnouncement>>(t: T) -> Self { ChatSource::PublicServiceAnnouncement(t.as_ref().clone()) }
}
impl AsRef<ChatSource> for ChatSource {
fn as_ref(&self) -> &ChatSource { self }
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChatSourceMtprotoProxy {
#[doc(hidden)]
#[serde(rename(serialize = "@type", deserialize = "@type"))]
td_name: String,
#[doc(hidden)]
#[serde(rename(serialize = "@extra", deserialize = "@extra"))]
extra: Option<String>,
}
impl RObject for ChatSourceMtprotoProxy {
#[doc(hidden)] fn td_name(&self) -> &'static str { "chatSourceMtprotoProxy" }
#[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl TDChatSource for ChatSourceMtprotoProxy {}
impl ChatSourceMtprotoProxy {
pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
pub fn builder() -> RTDChatSourceMtprotoProxyBuilder {
let mut inner = ChatSourceMtprotoProxy::default();
inner.td_name = "chatSourceMtprotoProxy".to_string();
inner.extra = Some(Uuid::new_v4().to_string());
RTDChatSourceMtprotoProxyBuilder { inner }
}
}
#[doc(hidden)]
pub struct RTDChatSourceMtprotoProxyBuilder {
inner: ChatSourceMtprotoProxy
}
impl RTDChatSourceMtprotoProxyBuilder {
pub fn build(&self) -> ChatSourceMtprotoProxy { self.inner.clone() }
}
impl AsRef<ChatSourceMtprotoProxy> for ChatSourceMtprotoProxy {
fn as_ref(&self) -> &ChatSourceMtprotoProxy { self }
}
impl AsRef<ChatSourceMtprotoProxy> for RTDChatSourceMtprotoProxyBuilder {
fn as_ref(&self) -> &ChatSourceMtprotoProxy { &self.inner }
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChatSourcePublicServiceAnnouncement {
#[doc(hidden)]
#[serde(rename(serialize = "@type", deserialize = "@type"))]
td_name: String,
#[doc(hidden)]
#[serde(rename(serialize = "@extra", deserialize = "@extra"))]
extra: Option<String>,
#[serde(rename(serialize = "type", deserialize = "type"))] type_: String,
text: String,
}
impl RObject for ChatSourcePublicServiceAnnouncement {
#[doc(hidden)] fn td_name(&self) -> &'static str { "chatSourcePublicServiceAnnouncement" }
#[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl TDChatSource for ChatSourcePublicServiceAnnouncement {}
impl ChatSourcePublicServiceAnnouncement {
pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
pub fn builder() -> RTDChatSourcePublicServiceAnnouncementBuilder {
let mut inner = ChatSourcePublicServiceAnnouncement::default();
inner.td_name = "chatSourcePublicServiceAnnouncement".to_string();
inner.extra = Some(Uuid::new_v4().to_string());
RTDChatSourcePublicServiceAnnouncementBuilder { inner }
}
pub fn type_(&self) -> &String { &self.type_ }
pub fn text(&self) -> &String { &self.text }
}
#[doc(hidden)]
pub struct RTDChatSourcePublicServiceAnnouncementBuilder {
inner: ChatSourcePublicServiceAnnouncement
}
impl RTDChatSourcePublicServiceAnnouncementBuilder {
pub fn build(&self) -> ChatSourcePublicServiceAnnouncement { self.inner.clone() }
pub fn type_<T: AsRef<str>>(&mut self, type_: T) -> &mut Self {
self.inner.type_ = type_.as_ref().to_string();
self
}
pub fn text<T: AsRef<str>>(&mut self, text: T) -> &mut Self {
self.inner.text = text.as_ref().to_string();
self
}
}
impl AsRef<ChatSourcePublicServiceAnnouncement> for ChatSourcePublicServiceAnnouncement {
fn as_ref(&self) -> &ChatSourcePublicServiceAnnouncement { self }
}
impl AsRef<ChatSourcePublicServiceAnnouncement> for RTDChatSourcePublicServiceAnnouncementBuilder {
fn as_ref(&self) -> &ChatSourcePublicServiceAnnouncement { &self.inner }
}