use crate::types::*;
use crate::errors::*;
use uuid::Uuid;
use std::fmt::Debug;
use serde::de::{Deserialize, Deserializer};
pub trait TDDiceStickers: Debug + RObject {}
#[derive(Debug, Clone, Serialize)]
#[serde(untagged)]
pub enum DiceStickers {
#[doc(hidden)] _Default(()),
Regular(DiceStickersRegular),
SlotMachine(DiceStickersSlotMachine),
}
impl Default for DiceStickers {
fn default() -> Self { DiceStickers::_Default(()) }
}
impl<'de> Deserialize<'de> for DiceStickers {
fn deserialize<D>(deserializer: D) -> Result<DiceStickers, D::Error> where D: Deserializer<'de> {
use serde::de::Error;
rtd_enum_deserialize!(
DiceStickers,
(diceStickersRegular, Regular);
(diceStickersSlotMachine, SlotMachine);
)(deserializer)
}
}
impl RObject for DiceStickers {
#[doc(hidden)] fn td_name(&self) -> &'static str {
match self {
DiceStickers::Regular(t) => t.td_name(),
DiceStickers::SlotMachine(t) => t.td_name(),
_ => "-1",
}
}
#[doc(hidden)] fn extra(&self) -> Option<String> {
match self {
DiceStickers::Regular(t) => t.extra(),
DiceStickers::SlotMachine(t) => t.extra(),
_ => None,
}
}
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl DiceStickers {
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 DiceStickers::_Default(_) = self { true } else { false } }
pub fn is_regular(&self) -> bool { if let DiceStickers::Regular(_) = self { true } else { false } }
pub fn is_slot_machine(&self) -> bool { if let DiceStickers::SlotMachine(_) = self { true } else { false } }
pub fn on_regular<F: FnOnce(&DiceStickersRegular)>(&self, fnc: F) -> &Self { if let DiceStickers::Regular(t) = self { fnc(t) }; self }
pub fn on_slot_machine<F: FnOnce(&DiceStickersSlotMachine)>(&self, fnc: F) -> &Self { if let DiceStickers::SlotMachine(t) = self { fnc(t) }; self }
pub fn as_regular(&self) -> Option<&DiceStickersRegular> { if let DiceStickers::Regular(t) = self { return Some(t) } None }
pub fn as_slot_machine(&self) -> Option<&DiceStickersSlotMachine> { if let DiceStickers::SlotMachine(t) = self { return Some(t) } None }
pub fn regular<T: AsRef<DiceStickersRegular>>(t: T) -> Self { DiceStickers::Regular(t.as_ref().clone()) }
pub fn slot_machine<T: AsRef<DiceStickersSlotMachine>>(t: T) -> Self { DiceStickers::SlotMachine(t.as_ref().clone()) }
}
impl AsRef<DiceStickers> for DiceStickers {
fn as_ref(&self) -> &DiceStickers { self }
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiceStickersRegular {
#[doc(hidden)]
#[serde(rename(serialize = "@type", deserialize = "@type"))]
td_name: String,
#[doc(hidden)]
#[serde(rename(serialize = "@extra", deserialize = "@extra"))]
extra: Option<String>,
sticker: Sticker,
}
impl RObject for DiceStickersRegular {
#[doc(hidden)] fn td_name(&self) -> &'static str { "diceStickersRegular" }
#[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl TDDiceStickers for DiceStickersRegular {}
impl DiceStickersRegular {
pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
pub fn builder() -> RTDDiceStickersRegularBuilder {
let mut inner = DiceStickersRegular::default();
inner.td_name = "diceStickersRegular".to_string();
inner.extra = Some(Uuid::new_v4().to_string());
RTDDiceStickersRegularBuilder { inner }
}
pub fn sticker(&self) -> &Sticker { &self.sticker }
}
#[doc(hidden)]
pub struct RTDDiceStickersRegularBuilder {
inner: DiceStickersRegular
}
impl RTDDiceStickersRegularBuilder {
pub fn build(&self) -> DiceStickersRegular { self.inner.clone() }
pub fn sticker<T: AsRef<Sticker>>(&mut self, sticker: T) -> &mut Self {
self.inner.sticker = sticker.as_ref().clone();
self
}
}
impl AsRef<DiceStickersRegular> for DiceStickersRegular {
fn as_ref(&self) -> &DiceStickersRegular { self }
}
impl AsRef<DiceStickersRegular> for RTDDiceStickersRegularBuilder {
fn as_ref(&self) -> &DiceStickersRegular { &self.inner }
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiceStickersSlotMachine {
#[doc(hidden)]
#[serde(rename(serialize = "@type", deserialize = "@type"))]
td_name: String,
#[doc(hidden)]
#[serde(rename(serialize = "@extra", deserialize = "@extra"))]
extra: Option<String>,
background: Sticker,
lever: Sticker,
left_reel: Sticker,
center_reel: Sticker,
right_reel: Sticker,
}
impl RObject for DiceStickersSlotMachine {
#[doc(hidden)] fn td_name(&self) -> &'static str { "diceStickersSlotMachine" }
#[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
}
impl TDDiceStickers for DiceStickersSlotMachine {}
impl DiceStickersSlotMachine {
pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
pub fn builder() -> RTDDiceStickersSlotMachineBuilder {
let mut inner = DiceStickersSlotMachine::default();
inner.td_name = "diceStickersSlotMachine".to_string();
inner.extra = Some(Uuid::new_v4().to_string());
RTDDiceStickersSlotMachineBuilder { inner }
}
pub fn background(&self) -> &Sticker { &self.background }
pub fn lever(&self) -> &Sticker { &self.lever }
pub fn left_reel(&self) -> &Sticker { &self.left_reel }
pub fn center_reel(&self) -> &Sticker { &self.center_reel }
pub fn right_reel(&self) -> &Sticker { &self.right_reel }
}
#[doc(hidden)]
pub struct RTDDiceStickersSlotMachineBuilder {
inner: DiceStickersSlotMachine
}
impl RTDDiceStickersSlotMachineBuilder {
pub fn build(&self) -> DiceStickersSlotMachine { self.inner.clone() }
pub fn background<T: AsRef<Sticker>>(&mut self, background: T) -> &mut Self {
self.inner.background = background.as_ref().clone();
self
}
pub fn lever<T: AsRef<Sticker>>(&mut self, lever: T) -> &mut Self {
self.inner.lever = lever.as_ref().clone();
self
}
pub fn left_reel<T: AsRef<Sticker>>(&mut self, left_reel: T) -> &mut Self {
self.inner.left_reel = left_reel.as_ref().clone();
self
}
pub fn center_reel<T: AsRef<Sticker>>(&mut self, center_reel: T) -> &mut Self {
self.inner.center_reel = center_reel.as_ref().clone();
self
}
pub fn right_reel<T: AsRef<Sticker>>(&mut self, right_reel: T) -> &mut Self {
self.inner.right_reel = right_reel.as_ref().clone();
self
}
}
impl AsRef<DiceStickersSlotMachine> for DiceStickersSlotMachine {
fn as_ref(&self) -> &DiceStickersSlotMachine { self }
}
impl AsRef<DiceStickersSlotMachine> for RTDDiceStickersSlotMachineBuilder {
fn as_ref(&self) -> &DiceStickersSlotMachine { &self.inner }
}