diff --git a/src/db/mod.rs b/src/db/mod.rs index 6a84de3..21ad569 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -4,7 +4,7 @@ pub mod member; const DEFAULT_PAGE_SIZE: u32 = 30; -#[derive(Serialize)] +#[derive(Serialize, Debug)] pub struct Paginate { pub total: u32, pub total_page: u32, diff --git a/src/lib.rs b/src/lib.rs index 913ee71..9ef3a09 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,4 +5,6 @@ pub mod handler; pub mod model; pub mod view; pub mod form; +pub mod util; + pub type Result = std::result::Result; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 6ae74fe..6a871cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,3 @@ -#![allow(unused, dead_code)] - use std::sync::Arc; use axum::Router; diff --git a/src/model/member.rs b/src/model/member.rs index 7b6e9f6..6720bee 100644 --- a/src/model/member.rs +++ b/src/model/member.rs @@ -1,3 +1,4 @@ +use crate::util::default_datetime_format; use std::fmt::{Display, Formatter}; use serde::{Deserialize, Serialize}; @@ -34,6 +35,7 @@ impl Display for MemberTypes { pub struct Member { pub id: u32, pub name: String, + #[serde(with = "default_datetime_format")] pub dateline: chrono::DateTime, pub balance: u32, pub types: MemberTypes, diff --git a/src/util/mod.rs b/src/util/mod.rs new file mode 100644 index 0000000..d9dd568 --- /dev/null +++ b/src/util/mod.rs @@ -0,0 +1,29 @@ + + +pub mod default_datetime_format { + use chrono::{DateTime, Local, NaiveDateTime}; + use serde::{self, Deserialize, Serializer, Deserializer}; + + const FORMAT: &'static str = "%Y-%m-%d %H:%M:%S"; + + pub fn serialize( + date: &DateTime, + serializer: S, + ) -> Result + where + S: Serializer, + { + let s = format!("{}", date.format(FORMAT)); + serializer.serialize_str(&s) + } + pub fn deserialize<'de, D>( + deserializer: D, + ) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let datetime_str = String::deserialize(deserializer)?; + let dt = NaiveDateTime::parse_from_str(&datetime_str, FORMAT).map_err(serde::de::Error::custom)?; + Ok(dt.and_local_timezone(Local).unwrap()) + } +} \ No newline at end of file