use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct ParseDate {
#[serde(rename = "__type")]
pub __type: String, pub iso: String, }
impl fmt::Display for ParseDate {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.iso)
}
}
impl ParseDate {
pub fn new(iso_string: impl Into<String>) -> Self {
ParseDate {
__type: "Date".to_string(),
iso: iso_string.into(),
}
}
pub fn now() -> Self {
Self::from_datetime(Utc::now())
}
pub fn from_datetime(dt: DateTime<Utc>) -> Self {
ParseDate {
__type: "Date".to_string(),
iso: dt.to_rfc3339_opts(chrono::SecondsFormat::Millis, true),
}
}
pub fn to_datetime(&self) -> Result<DateTime<Utc>, chrono::ParseError> {
DateTime::parse_from_rfc3339(&self.iso).map(|dt| dt.with_timezone(&Utc))
}
}