增加日期的格式化定义

This commit is contained in:
胡天 2024-02-02 11:04:14 +08:00
parent de82c83a2a
commit da22405c3e
5 changed files with 34 additions and 3 deletions

View File

@ -4,7 +4,7 @@ pub mod member;
const DEFAULT_PAGE_SIZE: u32 = 30; const DEFAULT_PAGE_SIZE: u32 = 30;
#[derive(Serialize)] #[derive(Serialize, Debug)]
pub struct Paginate<T: Serialize> { pub struct Paginate<T: Serialize> {
pub total: u32, pub total: u32,
pub total_page: u32, pub total_page: u32,

View File

@ -5,4 +5,6 @@ pub mod handler;
pub mod model; pub mod model;
pub mod view; pub mod view;
pub mod form; pub mod form;
pub mod util;
pub type Result<T> = std::result::Result<T, crate::err::Error>; pub type Result<T> = std::result::Result<T, crate::err::Error>;

View File

@ -1,5 +1,3 @@
#![allow(unused, dead_code)]
use std::sync::Arc; use std::sync::Arc;
use axum::Router; use axum::Router;

View File

@ -1,3 +1,4 @@
use crate::util::default_datetime_format;
use std::fmt::{Display, Formatter}; use std::fmt::{Display, Formatter};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -34,6 +35,7 @@ impl Display for MemberTypes {
pub struct Member { pub struct Member {
pub id: u32, pub id: u32,
pub name: String, pub name: String,
#[serde(with = "default_datetime_format")]
pub dateline: chrono::DateTime<chrono::Local>, pub dateline: chrono::DateTime<chrono::Local>,
pub balance: u32, pub balance: u32,
pub types: MemberTypes, pub types: MemberTypes,

29
src/util/mod.rs Normal file
View File

@ -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<S>(
date: &DateTime<Local>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let s = format!("{}", date.format(FORMAT));
serializer.serialize_str(&s)
}
pub fn deserialize<'de, D>(
deserializer: D,
) -> Result<DateTime<Local>, 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())
}
}