From 12b8d00de746e14d5977119fc53f9369bdebc4d7 Mon Sep 17 00:00:00 2001 From: el7cosmos Date: Thu, 17 Sep 2020 14:21:09 +0700 Subject: [PATCH] Date time module --- src/date.rs | 47 +++++++++++++++++++++++++++++++++++++++++++ src/time.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/date.rs create mode 100644 src/time.rs diff --git a/src/date.rs b/src/date.rs new file mode 100644 index 0000000..3b014a5 --- /dev/null +++ b/src/date.rs @@ -0,0 +1,47 @@ +use chrono::{Local, NaiveDate, ParseError, ParseResult}; +use serde::export::Formatter; + +#[derive(Copy, Clone, Debug)] +pub(super) struct Date(NaiveDate); + +impl Default for Date { + fn default() -> Self { + Date { + 0: Local::now().date().naive_local(), + } + } +} + +impl std::fmt::Display for Date { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + self.0.fmt(f) + } +} + +impl std::str::FromStr for Date { + type Err = ParseError; + + fn from_str(s: &str) -> ParseResult { + match NaiveDate::from_str(s) { + Ok(naive) => Ok(Date { 0: naive }), + Err(err) => Err(err), + } + } +} + +impl Into for Date { + fn into(self) -> NaiveDate { + self.0 + } +} + +#[cfg(test)] +mod tests { + use crate::date::Date; + use chrono::Local; + + #[test] + fn default() { + assert_eq!(Date::default().0, Local::now().date().naive_local()) + } +} diff --git a/src/time.rs b/src/time.rs new file mode 100644 index 0000000..f935d9d --- /dev/null +++ b/src/time.rs @@ -0,0 +1,58 @@ +use chrono::{Local, NaiveTime, ParseError, ParseResult}; + +#[derive(Copy, Clone, Debug)] +pub(super) struct Time(NaiveTime); + +impl Default for Time { + fn default() -> Self { + Time { + 0: Local::now().time(), + } + } +} + +impl std::fmt::Display for Time { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + self.0.fmt(f) + } +} + +impl std::str::FromStr for Time { + type Err = ParseError; + + fn from_str(s: &str) -> ParseResult