diff options
author | Taym Haddadi <haddadi.taym@gmail.com> | 2024-01-17 15:18:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-17 14:18:20 +0000 |
commit | 580062228bb083ccdc2144a43491bc4f916c57ad (patch) | |
tree | b2588905149c5f9c925f763c3d70b1e55271bc04 /components/hyper_serde/lib.rs | |
parent | d86e713a9cb5be2555d63bd477d47d440fa8c832 (diff) | |
download | servo-580062228bb083ccdc2144a43491bc4f916c57ad.tar.gz servo-580062228bb083ccdc2144a43491bc4f916c57ad.zip |
Replace time with std::time in components/net (#31079)
* Replace time with std::time in components/net
Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
* Fix cookie::test_sort_order test
Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
---------
Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
Diffstat (limited to 'components/hyper_serde/lib.rs')
-rw-r--r-- | components/hyper_serde/lib.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/components/hyper_serde/lib.rs b/components/hyper_serde/lib.rs index 4df1983ea7a..735f08cf44b 100644 --- a/components/hyper_serde/lib.rs +++ b/components/hyper_serde/lib.rs @@ -20,7 +20,7 @@ //! * `hyper::Method` //! * `hyper::Uri` //! * `mime::Mime` -//! * `time::Tm` +//! * `std::time::SystemTime` //! //! # How do I use a data type with a `HeaderMap` member with Serde? //! @@ -66,8 +66,10 @@ use std::ops::{Deref, DerefMut}; use std::str::FromStr; +use std::time::SystemTime; use std::{cmp, fmt, str}; +use chrono::{DateTime, SecondsFormat, Utc}; use cookie::Cookie; use headers::ContentType; use http::HeaderMap; @@ -78,7 +80,6 @@ use serde::de::{self, Error, MapAccess, SeqAccess, Visitor}; use serde::ser::{SerializeMap, SerializeSeq}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde_bytes::{ByteBuf, Bytes}; -use time::{strptime, Tm}; /// Deserialises a `T` value with a given deserializer. /// @@ -604,15 +605,15 @@ impl<'de> Visitor<'de> for StatusVisitor { } } -impl<'de> Deserialize<'de> for De<Tm> { +impl<'de> Deserialize<'de> for De<SystemTime> { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>, { - struct TmVisitor; + struct SystemTimeVisitor; - impl<'de> Visitor<'de> for TmVisitor { - type Value = De<Tm>; + impl<'de> Visitor<'de> for SystemTimeVisitor { + type Value = De<SystemTime>; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "a date and time according to RFC 3339") @@ -622,22 +623,23 @@ impl<'de> Deserialize<'de> for De<Tm> { where E: de::Error, { - strptime(v, "%Y-%m-%dT%H:%M:%SZ") - .map(De::new) + DateTime::parse_from_rfc3339(v) + .map(|t| De::new(SystemTime::from(t))) .map_err(|e| E::custom(e.to_string())) } } - deserializer.deserialize_string(TmVisitor) + deserializer.deserialize_string(SystemTimeVisitor) } } -impl<'a> Serialize for Ser<'a, Tm> { +impl<'a> Serialize for Ser<'a, SystemTime> { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { - serializer.serialize_str(&self.v.rfc3339().to_string()) + let date_time: DateTime<Utc> = self.v.clone().into(); + serializer.serialize_str(&date_time.to_rfc3339_opts(SecondsFormat::Secs, true)) } } |