From da22405c3e9d4fa93d97e3866da0e26acd8b87c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=A4=A9?= Date: Fri, 2 Feb 2024 11:04:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E6=9C=9F=E7=9A=84?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/mod.rs | 2 +- src/lib.rs | 2 ++ src/main.rs | 2 -- src/model/member.rs | 2 ++ src/util/mod.rs | 29 +++++++++++++++++++++++++++++ 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 src/util/mod.rs 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