aboutsummaryrefslogtreecommitdiffstats
path: root/components/hyper_serde/lib.rs
diff options
context:
space:
mode:
authorTaym Haddadi <haddadi.taym@gmail.com>2024-01-17 15:18:20 +0100
committerGitHub <noreply@github.com>2024-01-17 14:18:20 +0000
commit580062228bb083ccdc2144a43491bc4f916c57ad (patch)
treeb2588905149c5f9c925f763c3d70b1e55271bc04 /components/hyper_serde/lib.rs
parentd86e713a9cb5be2555d63bd477d47d440fa8c832 (diff)
downloadservo-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.rs24
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))
}
}