add custom date
This commit is contained in:
@@ -9,3 +9,4 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
chrono = "0.4.10"
|
||||||
|
|||||||
@@ -3,6 +3,24 @@ extern crate serde_json;
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::{Result, Value};
|
use serde_json::{Result, Value};
|
||||||
|
use chrono::{DateTime, Utc, TimeZone};
|
||||||
|
|
||||||
|
mod my_date_format {
|
||||||
|
use chrono::{DateTime, Utc, TimeZone};
|
||||||
|
use serde::{self, Deserialize, Serializer, Deserializer};
|
||||||
|
|
||||||
|
const FORMAT: &'static str = "%Y-%m-%d %H:%M:%S";
|
||||||
|
|
||||||
|
pub fn serialize<S>(date: &DateTime<Utc>, 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<Utc>, D::Error> where D: Deserializer<'de> {
|
||||||
|
let s = String::deserialize(deserializer)?;
|
||||||
|
Utc.datetime_from_str(&s, FORMAT).map_err(serde::de::Error::custom)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// https://serde.rs/container-attrs.html
|
// https://serde.rs/container-attrs.html
|
||||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||||
@@ -18,11 +36,14 @@ enum TestEnum {
|
|||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
struct TestStruct {
|
struct TestStruct {
|
||||||
ty: TestEnum,
|
ty: TestEnum,
|
||||||
|
#[serde(with = "my_date_format")]
|
||||||
|
timestamp: DateTime<Utc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let serialized = serde_json::to_string(&TestStruct{
|
let serialized = serde_json::to_string(&TestStruct{
|
||||||
ty: TestEnum::TypeA,
|
ty: TestEnum::TypeA,
|
||||||
|
timestamp: Utc.datetime_from_str("2020-01-28 17:04:00", "%Y-%m-%d %H:%M:%S").map_err(serde::de::Error::custom)?,
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
println!("{}", serialized);
|
println!("{}", serialized);
|
||||||
|
|||||||
Reference in New Issue
Block a user