Added datetime field.

This commit is contained in:
2025-04-09 13:43:50 -04:00
parent fbd8e81a6f
commit ed1a4eed02
3 changed files with 287 additions and 21 deletions

View File

@ -1,3 +1,4 @@
use chrono::prelude::*;
use std::fmt;
use uuid::Uuid;
@ -5,6 +6,7 @@ use uuid::Uuid;
pub enum Field {
Static(String),
Uuid(Uuid),
DateTime(DateTime<Utc>),
}
impl Field {
@ -14,6 +16,13 @@ impl Field {
_ => Err("not a uuid".to_string()),
}
}
pub fn to_datetime(&self) -> Result<DateTime<Utc>, String> {
match self {
Field::DateTime(data) => Ok(data.clone()),
_ => Err("not a datetime".to_string()),
}
}
}
impl From<String> for Field {
@ -42,11 +51,18 @@ impl From<Uuid> for Field {
}
}
impl From<DateTime<Utc>> for Field {
fn from(value: DateTime<Utc>) -> Self {
Field::DateTime(value)
}
}
impl fmt::Display for Field {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Field::Uuid(data) => write!(f, "{}", data),
Field::Static(data) => write!(f, "{}", data),
Field::DateTime(data) => write!(f, "{}", data),
}
}
}
@ -148,4 +164,36 @@ mod fields {
Err(_) => {}
}
}
#[test]
fn use_date_to_field() {
let expected = Utc::now();
let field: Field = expected.into();
match field {
Field::DateTime(result) => assert_eq!(result, expected),
_ => unreachable!("should have been date time"),
}
}
#[test]
fn from_datetime_field_to_string() {
let now = Utc::now();
let expected = now.to_string();
let field: Field = now.into();
assert_eq!(field.to_string(), expected);
}
#[test]
fn from_field_to_datetime() {
let now = Utc::now();
let field: Field = now.into();
assert_eq!(field.to_datetime().unwrap(), now);
}
#[test]
fn from_static_field_to_datatime() {
let txt = "Not gonna work.";
let field: Field = txt.into();
assert!(field.to_datetime().is_err(), "should not return a value");
}
}