use serde::{Deserialize, Serialize};
use super::{CollectionName, Extra, Meta, Timestamp, impl_document, time};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Setting {
#[serde(flatten)]
pub meta: Meta,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "time::millis"
)]
pub date: Option<Timestamp>,
#[serde(flatten)]
pub extra: Extra,
}
impl Setting {
#[must_use]
pub fn new(identifier: impl Into<String>, values: Extra) -> Self {
Self {
meta: Meta {
identifier: Some(identifier.into()),
..Meta::default()
},
date: Some(Timestamp::now()),
extra: values,
}
}
fn fill_defaults(&mut self, _app: &str) {
self.date.get_or_insert_with(Timestamp::now);
}
}
impl_document!(
Setting,
CollectionName::Settings,
timestamp = |s| s.date,
device = |_s| None
);