You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by ti...@apache.org on 2025/09/22 15:09:54 UTC
(opendal-reqsign) 01/01: refactor: chrono to jiff
This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch jiff
in repository https://gitbox.apache.org/repos/asf/opendal-reqsign.git
commit 873ad858992d555879e47131d525a447d705e0b7
Author: tison <wa...@gmail.com>
AuthorDate: Mon Sep 22 23:09:39 2025 +0800
refactor: chrono to jiff
Signed-off-by: tison <wa...@gmail.com>
---
Cargo.toml | 3 +-
core/Cargo.toml | 2 +-
core/src/time.rs | 68 ++++++-------------------------------
services/aliyun-oss/Cargo.toml | 2 +-
services/aws-v4/Cargo.toml | 2 +-
services/azure-storage/Cargo.toml | 2 +-
services/google/Cargo.toml | 2 +-
services/huaweicloud-obs/Cargo.toml | 2 +-
services/oracle/Cargo.toml | 4 +--
services/tencent-cos/Cargo.toml | 2 +-
10 files changed, 20 insertions(+), 69 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 0feb155..90c7dbd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -32,15 +32,14 @@ anyhow = "1"
async-trait = "0.1"
base64 = "0.22"
bytes = "1"
-chrono = "0.4.35"
criterion = { version = "0.7.0", features = ["async_tokio", "html_reports"] }
dotenv = "0.15"
env_logger = "0.11"
form_urlencoded = "1"
hex = "0.4"
hmac = "0.12"
-home = "0.5"
http = "1"
+jiff = "0.2"
log = "0.4"
macro_rules_attribute = "0.2.0"
once_cell = "1"
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 124566c..e0f5037 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -32,11 +32,11 @@ anyhow.workspace = true
async-trait.workspace = true
base64.workspace = true
bytes.workspace = true
-chrono.workspace = true
form_urlencoded.workspace = true
hex.workspace = true
hmac.workspace = true
http.workspace = true
+jiff.workspace = true
log.workspace = true
percent-encoding.workspace = true
sha1.workspace = true
diff --git a/core/src/time.rs b/core/src/time.rs
index b8cb500..c987010 100644
--- a/core/src/time.rs
+++ b/core/src/time.rs
@@ -18,68 +18,26 @@
//! Time related utils.
use crate::Error;
-use chrono::format::Fixed;
-use chrono::format::Item;
-use chrono::format::Numeric;
-use chrono::format::Pad;
-use chrono::SecondsFormat;
-use chrono::Utc;
+use std::str::FromStr;
/// DateTime is the alias for chrono::DateTime<Utc>.
-pub type DateTime = chrono::DateTime<Utc>;
+pub type DateTime = jiff::Timestamp;
/// Create datetime of now.
pub fn now() -> DateTime {
- Utc::now()
+ jiff::Timestamp::now()
}
-/// DATE is a time format like `20220301`
-const DATE: &[Item<'static>] = &[
- Item::Numeric(Numeric::Year, Pad::Zero),
- Item::Numeric(Numeric::Month, Pad::Zero),
- Item::Numeric(Numeric::Day, Pad::Zero),
-];
-
/// Format time into date: `20220301`
pub fn format_date(t: DateTime) -> String {
- t.format_with_items(DATE.iter()).to_string()
+ t.strftime("%Y%m%d").to_string()
}
-/// ISO8601 is a time format like `20220313T072004Z`.
-const ISO8601: &[Item<'static>] = &[
- Item::Numeric(Numeric::Year, Pad::Zero),
- Item::Numeric(Numeric::Month, Pad::Zero),
- Item::Numeric(Numeric::Day, Pad::Zero),
- Item::Literal("T"),
- Item::Numeric(Numeric::Hour, Pad::Zero),
- Item::Numeric(Numeric::Minute, Pad::Zero),
- Item::Numeric(Numeric::Second, Pad::Zero),
- Item::Literal("Z"),
-];
-
/// Format time into ISO8601: `20220313T072004Z`
pub fn format_iso8601(t: DateTime) -> String {
- t.format_with_items(ISO8601.iter()).to_string()
+ t.strftime("%Y%m%dT%H%M%SZ").to_string()
}
-/// HTTP_DATE is a time format like `Sun, 06 Nov 1994 08:49:37 GMT`.
-const HTTP_DATE: &[Item<'static>] = &[
- Item::Fixed(Fixed::ShortWeekdayName),
- Item::Literal(", "),
- Item::Numeric(Numeric::Day, Pad::Zero),
- Item::Literal(" "),
- Item::Fixed(Fixed::ShortMonthName),
- Item::Literal(" "),
- Item::Numeric(Numeric::Year, Pad::Zero),
- Item::Literal(" "),
- Item::Numeric(Numeric::Hour, Pad::Zero),
- Item::Literal(":"),
- Item::Numeric(Numeric::Minute, Pad::Zero),
- Item::Literal(":"),
- Item::Numeric(Numeric::Second, Pad::Zero),
- Item::Literal(" GMT"),
-];
-
/// Format time into http date: `Sun, 06 Nov 1994 08:49:37 GMT`
///
/// ## Note
@@ -89,12 +47,12 @@ const HTTP_DATE: &[Item<'static>] = &[
/// - Timezone is fixed to GMT.
/// - Day must be 2 digit.
pub fn format_http_date(t: DateTime) -> String {
- t.format_with_items(HTTP_DATE.iter()).to_string()
+ t.strftime("%a, %d %b %Y %T GMT").to_string()
}
/// Format time into RFC3339: `2022-03-13T07:20:04Z`
pub fn format_rfc3339(t: DateTime) -> String {
- t.to_rfc3339_opts(SecondsFormat::Secs, true)
+ t.strftime("%FT%TZ").to_string()
}
/// Parse time from RFC3339.
@@ -105,21 +63,17 @@ pub fn format_rfc3339(t: DateTime) -> String {
/// - `2022-03-01T08:12:34+00:00`
/// - `2022-03-01T08:12:34.00+00:00`
pub fn parse_rfc3339(s: &str) -> crate::Result<DateTime> {
- Ok(chrono::DateTime::parse_from_rfc3339(s)
- .map_err(|err| {
- Error::unexpected(format!("parse '{s}' into rfc3339 failed")).with_source(err)
- })?
- .with_timezone(&Utc))
+ FromStr::from_str(s).map_err(|err| {
+ Error::unexpected(format!("parse '{s}' into rfc3339 failed")).with_source(err)
+ })
}
#[cfg(test)]
mod tests {
- use chrono::TimeZone;
-
use super::*;
fn test_time() -> DateTime {
- Utc.with_ymd_and_hms(2022, 3, 1, 8, 12, 34).unwrap()
+ "2022-03-01T08:12:34Z".parse().unwrap()
}
#[test]
diff --git a/services/aliyun-oss/Cargo.toml b/services/aliyun-oss/Cargo.toml
index 5521684..62150ed 100644
--- a/services/aliyun-oss/Cargo.toml
+++ b/services/aliyun-oss/Cargo.toml
@@ -29,7 +29,7 @@ repository.workspace = true
[dependencies]
anyhow.workspace = true
async-trait.workspace = true
-chrono.workspace = true
+jiff.workspace = true
http.workspace = true
log.workspace = true
once_cell.workspace = true
diff --git a/services/aws-v4/Cargo.toml b/services/aws-v4/Cargo.toml
index 80df230..3746d01 100644
--- a/services/aws-v4/Cargo.toml
+++ b/services/aws-v4/Cargo.toml
@@ -34,7 +34,7 @@ name = "aws"
anyhow.workspace = true
async-trait.workspace = true
bytes = "1.7.2"
-chrono.workspace = true
+jiff.workspace = true
form_urlencoded.workspace = true
http.workspace = true
log.workspace = true
diff --git a/services/azure-storage/Cargo.toml b/services/azure-storage/Cargo.toml
index 788cb83..3701dce 100644
--- a/services/azure-storage/Cargo.toml
+++ b/services/azure-storage/Cargo.toml
@@ -31,7 +31,7 @@ anyhow.workspace = true
async-trait.workspace = true
base64.workspace = true
bytes.workspace = true
-chrono.workspace = true
+jiff.workspace = true
form_urlencoded.workspace = true
http.workspace = true
log.workspace = true
diff --git a/services/google/Cargo.toml b/services/google/Cargo.toml
index cfb86d2..eac5b43 100644
--- a/services/google/Cargo.toml
+++ b/services/google/Cargo.toml
@@ -28,7 +28,7 @@ repository.workspace = true
[dependencies]
async-trait.workspace = true
-chrono.workspace = true
+jiff.workspace = true
http.workspace = true
jsonwebtoken = "9.2"
log.workspace = true
diff --git a/services/huaweicloud-obs/Cargo.toml b/services/huaweicloud-obs/Cargo.toml
index 6842eb2..4d24274 100644
--- a/services/huaweicloud-obs/Cargo.toml
+++ b/services/huaweicloud-obs/Cargo.toml
@@ -29,7 +29,7 @@ repository.workspace = true
[dependencies]
anyhow.workspace = true
async-trait.workspace = true
-chrono.workspace = true
+jiff.workspace = true
http.workspace = true
log.workspace = true
once_cell.workspace = true
diff --git a/services/oracle/Cargo.toml b/services/oracle/Cargo.toml
index 651bb28..67eb438 100644
--- a/services/oracle/Cargo.toml
+++ b/services/oracle/Cargo.toml
@@ -30,14 +30,12 @@ repository.workspace = true
anyhow.workspace = true
async-trait.workspace = true
base64.workspace = true
-chrono.workspace = true
+jiff.workspace = true
http.workspace = true
log.workspace = true
reqsign-core.workspace = true
rsa.workspace = true
rust-ini.workspace = true
-serde.workspace = true
-
[dev-dependencies]
env_logger = "0.11"
diff --git a/services/tencent-cos/Cargo.toml b/services/tencent-cos/Cargo.toml
index 298fd38..4d23568 100644
--- a/services/tencent-cos/Cargo.toml
+++ b/services/tencent-cos/Cargo.toml
@@ -30,7 +30,7 @@ repository.workspace = true
[dependencies]
anyhow.workspace = true
async-trait.workspace = true
-chrono.workspace = true
+jiff.workspace = true
http.workspace = true
log.workspace = true
percent-encoding.workspace = true