use serde::Serialize;
#[derive(Debug, PartialEq, Clone, Default)]
pub struct Options {
ttl_seconds: Option<f64>,
}
#[derive(Debug, PartialEq, Clone, Default)]
pub struct OptionsBuilder(Options);
#[derive(Serialize)]
pub(crate) struct SerializableOptions {
#[serde(skip_serializing_if = "Option::is_none")]
ttl_seconds: Option<f64>,
}
impl Options {
pub fn builder() -> OptionsBuilder {
OptionsBuilder::new()
}
pub fn json(&self) -> Result<String, serde_json::Error> {
serde_json::to_string(&SerializableOptions::from(self))
}
}
impl OptionsBuilder {
pub fn new() -> Self {
Self(Options { ttl_seconds: None })
}
pub fn ttl_seconds(mut self, ttl_seconds: f64) -> Self {
self.0.ttl_seconds = Some(ttl_seconds);
self
}
pub fn build(self) -> Options {
self.0
}
}
impl From<&Options> for SerializableOptions {
fn from(options: &Options) -> Self {
Self {
ttl_seconds: options.ttl_seconds,
}
}
}