use super::ValueChronoDate;
use std::time::SystemTime;
impl From<chrono::NaiveDate> for ValueChronoDate {
fn from(val: chrono::NaiveDate) -> Self {
ValueChronoDate(Some(val))
}
}
impl From<chrono::NaiveDateTime> for ValueChronoDate {
fn from(val: chrono::NaiveDateTime) -> Self {
let value = val.date();
ValueChronoDate(Some(value))
}
}
impl From<chrono::DateTime<chrono::Utc>> for ValueChronoDate {
fn from(val: chrono::DateTime<chrono::Utc>) -> Self {
let value = val.date_naive();
ValueChronoDate(Some(value))
}
}
impl From<chrono::DateTime<chrono::FixedOffset>> for ValueChronoDate {
fn from(val: chrono::DateTime<chrono::FixedOffset>) -> Self {
let value = val.date_naive();
ValueChronoDate(Some(value))
}
}
impl From<SystemTime> for ValueChronoDate {
fn from(value: SystemTime) -> Self {
let utc_value: chrono::DateTime<chrono::Utc> = value.into();
utc_value.into()
}
}
impl<T> From<&T> for ValueChronoDate
where
T: Into<ValueChronoDate> + Clone,
{
fn from(val: &T) -> Self {
val.clone().into()
}
}
impl<T> From<Option<T>> for ValueChronoDate
where
T: Into<ValueChronoDate>,
{
fn from(val: Option<T>) -> Self {
match val {
Some(value) => value.into(),
None => ValueChronoDate(None),
}
}
}
impl TryFrom<ValueChronoDate> for Option<chrono::NaiveDate> {
type Error = crate::Error;
fn try_from(value: ValueChronoDate) -> Result<Self, Self::Error> {
Ok(value.0)
}
}
impl TryFrom<ValueChronoDate> for chrono::NaiveDate {
type Error = crate::Error;
fn try_from(value: ValueChronoDate) -> Result<Self, Self::Error> {
match value.0 {
Some(v) => Ok(v),
None => Err(crate::Error::Message("Value is None!".into())),
}
}
}