From b9da2ec03025250901c2ce91fd4ae442f10167c7 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Fri, 15 May 2020 20:47:11 -0300 Subject: [PATCH] Use From from DateTime to Date and Time --- src/eventlist/event.rs | 45 +++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/eventlist/event.rs b/src/eventlist/event.rs index b15a189..6e45458 100644 --- a/src/eventlist/event.rs +++ b/src/eventlist/event.rs @@ -26,7 +26,6 @@ use serde_derive::Deserialize; use serde_derive::Serialize; use uuid::Uuid; -// TODO constructors #[derive(Serialize, Deserialize, Debug)] pub struct Date { year: i32, @@ -34,13 +33,31 @@ pub struct Date { day: u32, } -// TODO constructors +impl From<&DateTime> for Date { + fn from(origin: &DateTime) -> Date { + Date { + year: origin.year(), + month: origin.month(), + day: origin.day(), + } + } +} + #[derive(Serialize, Deserialize, Debug)] pub struct Time { hour: u32, min: u32, } +impl From<&DateTime> for Time { + fn from(origin: &DateTime) -> Time { + Time { + hour: origin.hour(), + min: origin.minute(), + } + } +} + #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "due", content = "datetime")] pub enum EventDateType { @@ -83,17 +100,15 @@ fn uuid() -> String { } impl Event { + // TODO result this pub fn new_on_date(description: &str, date: &str) -> Self { let fake_datetime = format!("{} 00:00:00", date); - if let Ok(dt) = Utc.datetime_from_str(&fake_datetime, "%Y-%m-%d %H:%M:%S") { + if let Ok(dt) = Local.datetime_from_str(&fake_datetime, "%Y-%m-%d %H:%M:%S") { + // TODO turn format into static Self { id: uuid(), description: description.into(), - due: EventDateType::AllDay(Date { - year: dt.year(), - month: dt.month(), - day: dt.day(), - }), + due: EventDateType::AllDay(Date::from(&dt)), } } else { panic!("Failed to parse the date"); @@ -102,21 +117,11 @@ impl Event { pub fn new_on_date_time(description: &str, date: &str, time: &str) -> Self { let fake_datetime = format!("{} {}:00", date, time); - if let Ok(dt) = Utc.datetime_from_str(&fake_datetime, "%Y-%m-%d %H:%M:%S") { + if let Ok(dt) = Local.datetime_from_str(&fake_datetime, "%Y-%m-%d %H:%M:%S") { Self { id: uuid(), description: description.into(), - due: EventDateType::AtTime( - Date { - year: dt.year(), - month: dt.month(), - day: dt.day(), - }, - Time { - hour: dt.hour(), - min: dt.minute(), - }, - ), + due: EventDateType::AtTime(Date::from(&dt), Time::from(&dt)), } } else { panic!("Failed to parse the date");