use crate::models::time::DateTime;
use crate::service::{ProvidedArgument, RequiredArgument};
use serde::Serialize;
macro_rules! return_type {
($self:ident) => {
TidesRequest {
placeid: $self.placeid,
onlyhighlow: $self.onlyhighlow,
startdt: $self.startdt,
enddt: $self.enddt,
radius: $self.radius,
subordinate: $self.subordinate,
interval: $self.interval,
localtime: $self.localtime,
_a: Default::default(),
}
};
}
#[derive(Default, Serialize)]
pub struct TidesRequest<A = ProvidedArgument> {
placeid: Vec<String>,
onlyhighlow: Option<u8>,
startdt: Option<DateTime>,
enddt: Option<DateTime>,
radius: Option<i32>,
subordinate: Option<u8>,
interval: Option<i32>,
localtime: Option<u8>,
_a: std::marker::PhantomData<A>,
}
impl TidesRequest {
pub fn new() -> TidesRequest<RequiredArgument> {
Default::default()
}
}
impl<A> TidesRequest<A> {
pub fn with_placeid(mut self, placeid: impl Into<String>) -> TidesRequest<ProvidedArgument> {
self.placeid.push(placeid.into());
return_type!(self)
}
pub fn set_onlyhighlow(mut self, enable: bool) -> Self {
self.onlyhighlow.insert(enable.into());
self
}
pub fn set_startdt(mut self, startdt: DateTime) -> Self {
self.startdt.insert(startdt);
self
}
pub fn set_enddt(mut self, enddt: DateTime) -> Self {
self.enddt.insert(enddt);
self
}
pub fn set_radius(mut self, radius: i32) -> Self {
self.radius.insert(radius);
self
}
pub fn set_subordinate(mut self, enable: bool) -> Self {
self.subordinate.insert(enable.into());
self
}
pub fn set_interval(mut self, interval: i32) -> Self {
self.interval.insert(interval);
self
}
pub fn set_localtime(mut self, enable: bool) -> Self {
self.localtime.insert(enable.into());
self
}
}