use crate::models::time::DateTime;
use crate::service::{ProvidedArgument, RequiredArgument};
use serde::Serialize;
macro_rules! return_type {
($self:ident) => {
ConvertTimeRequest {
fromid: $self.fromid,
toid: $self.toid,
iso: $self.iso,
lang: $self.lang,
radius: $self.radius,
timechanges: $self.timechanges,
tz: $self.tz,
verbosetime: $self.verbosetime,
_a: Default::default(),
_b: Default::default(),
}
};
}
#[derive(Default, Serialize)]
pub struct ConvertTimeRequest<A = ProvidedArgument, B = ProvidedArgument> {
fromid: String,
toid: Option<Vec<String>>,
iso: DateTime,
lang: Option<String>,
radius: Option<i32>,
timechanges: Option<u8>,
tz: Option<u8>,
verbosetime: Option<u8>,
_a: std::marker::PhantomData<A>,
_b: std::marker::PhantomData<B>,
}
impl ConvertTimeRequest {
pub fn new() -> ConvertTimeRequest<RequiredArgument, RequiredArgument> {
Default::default()
}
}
impl<A, B> ConvertTimeRequest<A, B> {
pub fn set_fromid(
mut self,
fromid: impl Into<String>,
) -> ConvertTimeRequest<ProvidedArgument, B> {
self.fromid = fromid.into();
return_type!(self)
}
pub fn with_toid(mut self, toid: impl Into<String>) -> Self {
if let Some(ref mut toids) = self.toid {
toids.push(toid.into());
} else {
self.toid.insert(vec![toid.into()]);
}
self
}
pub fn set_datetime(mut self, datetime: DateTime) -> ConvertTimeRequest<A, ProvidedArgument> {
self.iso = datetime;
return_type!(self)
}
pub fn set_lang(mut self, lang: impl Into<String>) -> Self {
self.lang.insert(lang.into());
self
}
pub fn set_radius(mut self, radius: i32) -> Self {
self.radius.insert(radius);
self
}
pub fn set_timechanges(mut self, enable: bool) -> Self {
self.timechanges.insert(enable.into());
self
}
pub fn set_tz(mut self, enable: bool) -> Self {
self.tz.insert(enable.into());
self
}
pub fn set_verbosetime(mut self, enable: bool) -> Self {
self.verbosetime.insert(enable.into());
self
}
}