aboutsummaryrefslogtreecommitdiffstats
path: root/components/hyper_serde
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2024-01-18 16:10:48 +0100
committerGitHub <noreply@github.com>2024-01-18 15:10:48 +0000
commit8e5f28839cde6b9ee5cd7cb4f8c27ff0ae10a86c (patch)
treed6cb4615b9fcbde1258d7746039cd9b97c7aafc4 /components/hyper_serde
parentc3fd27c225e66fc00611bcd35f462077dfcf21d1 (diff)
downloadservo-8e5f28839cde6b9ee5cd7cb4f8c27ff0ae10a86c.tar.gz
servo-8e5f28839cde6b9ee5cd7cb4f8c27ff0ae10a86c.zip
Revert "Replace time with std::time in components/net (#31079)" (#31120)
This reverts commit 580062228bb083ccdc2144a43491bc4f916c57ad.
Diffstat (limited to 'components/hyper_serde')
-rw-r--r--components/hyper_serde/Cargo.toml3
-rw-r--r--components/hyper_serde/lib.rs24
-rw-r--r--components/hyper_serde/tests/supported.rs5
-rw-r--r--components/hyper_serde/tests/tokens.rs17
4 files changed, 21 insertions, 28 deletions
diff --git a/components/hyper_serde/Cargo.toml b/components/hyper_serde/Cargo.toml
index 736eca035f5..566027fc279 100644
--- a/components/hyper_serde/Cargo.toml
+++ b/components/hyper_serde/Cargo.toml
@@ -16,7 +16,6 @@ doctest = false
test = false
[dependencies]
-chrono = "0.4"
cookie = { workspace = true }
headers = { workspace = true }
http = { workspace = true }
@@ -24,7 +23,7 @@ hyper = { workspace = true }
mime = { workspace = true }
serde = { workspace = true }
serde_bytes = { workspace = true }
+time = { workspace = true }
[dev-dependencies]
serde_test = "1.0"
-time = { workspace = true }
diff --git a/components/hyper_serde/lib.rs b/components/hyper_serde/lib.rs
index 735f08cf44b..4df1983ea7a 100644
--- a/components/hyper_serde/lib.rs
+++ b/components/hyper_serde/lib.rs
@@ -20,7 +20,7 @@
//! * `hyper::Method`
//! * `hyper::Uri`
//! * `mime::Mime`
-//! * `std::time::SystemTime`
+//! * `time::Tm`
//!
//! # How do I use a data type with a `HeaderMap` member with Serde?
//!
@@ -66,10 +66,8 @@
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;
@@ -80,6 +78,7 @@ 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.
///
@@ -605,15 +604,15 @@ impl<'de> Visitor<'de> for StatusVisitor {
}
}
-impl<'de> Deserialize<'de> for De<SystemTime> {
+impl<'de> Deserialize<'de> for De<Tm> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
- struct SystemTimeVisitor;
+ struct TmVisitor;
- impl<'de> Visitor<'de> for SystemTimeVisitor {
- type Value = De<SystemTime>;
+ impl<'de> Visitor<'de> for TmVisitor {
+ type Value = De<Tm>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "a date and time according to RFC 3339")
@@ -623,23 +622,22 @@ impl<'de> Deserialize<'de> for De<SystemTime> {
where
E: de::Error,
{
- DateTime::parse_from_rfc3339(v)
- .map(|t| De::new(SystemTime::from(t)))
+ strptime(v, "%Y-%m-%dT%H:%M:%SZ")
+ .map(De::new)
.map_err(|e| E::custom(e.to_string()))
}
}
- deserializer.deserialize_string(SystemTimeVisitor)
+ deserializer.deserialize_string(TmVisitor)
}
}
-impl<'a> Serialize for Ser<'a, SystemTime> {
+impl<'a> Serialize for Ser<'a, Tm> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
- let date_time: DateTime<Utc> = self.v.clone().into();
- serializer.serialize_str(&date_time.to_rfc3339_opts(SecondsFormat::Secs, true))
+ serializer.serialize_str(&self.v.rfc3339().to_string())
}
}
diff --git a/components/hyper_serde/tests/supported.rs b/components/hyper_serde/tests/supported.rs
index 4eddd69adef..54480903c7e 100644
--- a/components/hyper_serde/tests/supported.rs
+++ b/components/hyper_serde/tests/supported.rs
@@ -8,8 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use std::time::SystemTime;
-
use cookie::Cookie;
use headers::ContentType;
use http::header::HeaderMap;
@@ -17,6 +15,7 @@ use hyper::{Method, StatusCode, Uri};
use hyper_serde::{De, Ser, Serde};
use mime::Mime;
use serde::{Deserialize, Serialize};
+use time::Tm;
fn is_supported<T>()
where
@@ -34,6 +33,6 @@ fn supported() {
is_supported::<Method>();
is_supported::<Mime>();
is_supported::<StatusCode>();
- is_supported::<SystemTime>();
+ is_supported::<Tm>();
is_supported::<Uri>();
}
diff --git a/components/hyper_serde/tests/tokens.rs b/components/hyper_serde/tests/tokens.rs
index 2ba79ce3bb6..d7ad09f4e9c 100644
--- a/components/hyper_serde/tests/tokens.rs
+++ b/components/hyper_serde/tests/tokens.rs
@@ -15,6 +15,7 @@ use http::StatusCode;
use hyper::{Method, Uri};
use hyper_serde::{De, Ser};
use serde_test::{assert_de_tokens, assert_ser_tokens, Token};
+use time::Duration;
#[test]
fn test_content_type() {
@@ -31,7 +32,7 @@ fn test_cookie() {
// string with a bunch of indices in it which apparently is different from the exact same
// cookie but parsed as a bunch of strings.
let cookie: Cookie = Cookie::build("Hello", "World!")
- .max_age(time::Duration::seconds(42))
+ .max_age(Duration::seconds(42))
.domain("servo.org")
.path("/")
.secure(true)
@@ -111,18 +112,14 @@ fn test_raw_status() {
}
#[test]
-fn test_system_time_serialization() {
- use std::time::SystemTime;
+fn test_tm() {
+ use time::strptime;
- use chrono::{NaiveDateTime, TimeZone, Utc};
+ let time = strptime("2017-02-22T12:03:31Z", "%Y-%m-%dT%H:%M:%SZ").unwrap();
+ let tokens = &[Token::Str("2017-02-22T12:03:31Z")];
- let time = SystemTime::from(Utc.from_utc_datetime(
- &NaiveDateTime::parse_from_str("2023-01-15T12:53:31Z", "%Y-%m-%dT%H:%M:%SZ").unwrap(),
- ));
- let tokens = &[Token::Str("2023-01-15T12:53:31Z")];
-
- assert_de_tokens(&De::new(time), tokens);
assert_ser_tokens(&Ser::new(&time), tokens);
+ assert_de_tokens(&De::new(time), tokens);
}
#[test]