change serialization of date to match specs

This commit is contained in:
CodeSteak 2019-05-08 15:03:18 +02:00
parent d9d4f16c01
commit 0090628452

View File

@ -1,4 +1,3 @@
use serde::de::Error;
use serde::Serialize; use serde::Serialize;
use serde::{Deserialize, Deserializer, Serializer}; use serde::{Deserialize, Deserializer, Serializer};
use std::str::FromStr; use std::str::FromStr;
@ -66,10 +65,9 @@ impl Serialize for Date {
where where
S: Serializer, S: Serializer,
{ {
serializer.serialize_str(&format!( let data = (self.year, self.month, self.day);
"{:04}-{:02}-{:02}",
self.year, self.month, self.day data.serialize(serializer)
))
} }
} }
@ -78,14 +76,13 @@ impl<'de> Deserialize<'de> for Date {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
let data = String::deserialize(deserializer)?; let data = <(u16, u8, u8)>::deserialize(deserializer)?;
match Date::from_str(&data) { Ok(Date {
Ok(date) => Ok(date), year: data.0,
Err(_) => Err(D::Error::custom( month: data.1,
"Expected a String in this format: YYYY-MM-DD.", day: data.2,
)), })
}
} }
} }