This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new ec2790d1a refactor: use web-time types on wasm32 target (#6852)
ec2790d1a is described below

commit ec2790d1a259aa10b6f1c1ea1e0e346fd1ff3a3f
Author: tison <[email protected]>
AuthorDate: Mon Dec 1 22:24:58 2025 +0800

    refactor: use web-time types on wasm32 target (#6852)
    
    * refactor: use web-time types on wasm32 target
    
    Signed-off-by: tison <[email protected]>
    
    * fixup incomp systemtime and jiff
    
    Signed-off-by: tison <[email protected]>
    
    * bridge conversion
    
    Signed-off-by: tison <[email protected]>
    
    * fix compile
    
    Signed-off-by: tison <[email protected]>
    
    ---------
    
    Signed-off-by: tison <[email protected]>
---
 .github/workflows/ci_core.yml                      |  1 +
 core/Cargo.lock                                    |  1 +
 core/Cargo.toml                                    |  1 +
 core/src/layers/fastmetrics.rs                     |  1 -
 core/src/layers/observe/metrics.rs                 |  2 --
 core/src/layers/otelmetrics.rs                     |  2 --
 core/src/layers/prometheus.rs                      |  2 --
 core/src/layers/prometheus_client.rs               |  1 -
 core/src/layers/retry.rs                           |  1 -
 core/src/layers/tail_cut.rs                        | 10 ++----
 core/src/layers/timeout.rs                         |  4 +--
 core/src/raw/futures_util.rs                       |  5 ++-
 core/src/raw/oio/write/block_write.rs              |  1 -
 core/src/raw/oio/write/multipart_write.rs          |  2 --
 core/src/raw/oio/write/position_write.rs           |  1 -
 core/src/raw/ops.rs                                |  2 +-
 core/src/raw/time.rs                               | 42 ++++++++++++++++++----
 core/src/services/azblob/core.rs                   |  1 -
 core/src/services/b2/core.rs                       |  1 -
 core/src/services/cloudflare_kv/backend.rs         |  1 -
 core/src/services/cloudflare_kv/config.rs          |  2 +-
 core/src/services/cloudflare_kv/core.rs            |  7 +---
 core/src/services/cos/core.rs                      |  1 -
 core/src/services/dashmap/writer.rs                |  5 ++-
 core/src/services/dropbox/core.rs                  |  1 -
 core/src/services/etcd/core.rs                     |  7 ++--
 core/src/services/ftp/core.rs                      |  4 +--
 core/src/services/gcs/core.rs                      |  1 -
 core/src/services/gdrive/core.rs                   |  1 -
 core/src/services/memcached/backend.rs             |  1 -
 core/src/services/memcached/config.rs              |  2 +-
 core/src/services/memcached/core.rs                |  1 -
 core/src/services/mini_moka/backend.rs             |  1 -
 core/src/services/moka/backend.rs                  |  3 --
 core/src/services/monoiofs/core.rs                 |  3 +-
 core/src/services/obs/core.rs                      |  1 -
 core/src/services/onedrive/core.rs                 |  1 -
 core/src/services/oss/core.rs                      |  1 -
 core/src/services/redis/backend.rs                 |  1 -
 core/src/services/redis/config.rs                  |  2 +-
 core/src/services/redis/core.rs                    |  5 +--
 core/src/services/s3/core.rs                       |  1 -
 core/src/services/sftp/core.rs                     |  1 -
 core/src/types/execute/executors/tokio_executor.rs |  3 +-
 core/src/types/operator/operator.rs                |  1 -
 core/src/types/operator/operator_futures.rs        |  1 -
 46 files changed, 61 insertions(+), 79 deletions(-)

diff --git a/.github/workflows/ci_core.yml b/.github/workflows/ci_core.yml
index 4d06c999a..9d13d7867 100644
--- a/.github/workflows/ci_core.yml
+++ b/.github/workflows/ci_core.yml
@@ -235,6 +235,7 @@ jobs:
             services-gdrive
             services-opfs
             services-s3
+            layers-metrics
           )
           rustup target add wasm32-unknown-unknown
           cargo build --target wasm32-unknown-unknown --no-default-features 
--features="${FEATURES[*]}" --locked
diff --git a/core/Cargo.lock b/core/Cargo.lock
index d07ed620c..ec9f24284 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -5432,6 +5432,7 @@ dependencies = [
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "web-sys",
+ "web-time",
 ]
 
 [[package]]
diff --git a/core/Cargo.toml b/core/Cargo.toml
index a05c7a597..188b63fdf 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -418,6 +418,7 @@ getrandom = { version = "0.2", features = ["js"] }
 jiff = { version = "0.2.15", features = ["serde", "js"] }
 tokio = { version = "1.48", features = ["time"] }
 uuid = { version = "1.18", features = ["serde", "v4", "js"] }
+web-time = { version = "1.1.0" }
 
 [dev-dependencies]
 criterion = { version = "0.7", features = ["async", "async_tokio"] }
diff --git a/core/src/layers/fastmetrics.rs b/core/src/layers/fastmetrics.rs
index 9b314a97b..5a9d7dfdb 100644
--- a/core/src/layers/fastmetrics.rs
+++ b/core/src/layers/fastmetrics.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::fmt;
-use std::time::Duration;
 
 use fastmetrics::encoder::EncodeLabelSet;
 use fastmetrics::encoder::LabelSetEncoder;
diff --git a/core/src/layers/observe/metrics.rs 
b/core/src/layers/observe/metrics.rs
index 7441d82f9..82f390453 100644
--- a/core/src/layers/observe/metrics.rs
+++ b/core/src/layers/observe/metrics.rs
@@ -22,8 +22,6 @@ use std::sync::Arc;
 use std::task::Context;
 use std::task::Poll;
 use std::task::ready;
-use std::time::Duration;
-use std::time::Instant;
 
 use futures::Stream;
 use futures::StreamExt;
diff --git a/core/src/layers/otelmetrics.rs b/core/src/layers/otelmetrics.rs
index c5fac5c0d..0031b8ff1 100644
--- a/core/src/layers/otelmetrics.rs
+++ b/core/src/layers/otelmetrics.rs
@@ -15,8 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use std::time::Duration;
-
 use opentelemetry::KeyValue;
 use opentelemetry::metrics::Counter;
 use opentelemetry::metrics::Histogram;
diff --git a/core/src/layers/prometheus.rs b/core/src/layers/prometheus.rs
index 175ed330a..ae86d1410 100644
--- a/core/src/layers/prometheus.rs
+++ b/core/src/layers/prometheus.rs
@@ -15,8 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use std::time::Duration;
-
 use prometheus::HistogramVec;
 use prometheus::Registry;
 use prometheus::core::AtomicI64;
diff --git a/core/src/layers/prometheus_client.rs 
b/core/src/layers/prometheus_client.rs
index 846546f39..46eaa6dd4 100644
--- a/core/src/layers/prometheus_client.rs
+++ b/core/src/layers/prometheus_client.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::fmt;
-use std::time::Duration;
 
 use prometheus_client::encoding::EncodeLabel;
 use prometheus_client::encoding::EncodeLabelSet;
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index 5ee852d15..85e65684b 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -18,7 +18,6 @@
 use std::fmt::Debug;
 use std::fmt::Formatter;
 use std::sync::Arc;
-use std::time::Duration;
 
 use backon::ExponentialBuilder;
 use backon::Retryable;
diff --git a/core/src/layers/tail_cut.rs b/core/src/layers/tail_cut.rs
index ab89e5083..516c7134c 100644
--- a/core/src/layers/tail_cut.rs
+++ b/core/src/layers/tail_cut.rs
@@ -19,8 +19,6 @@ use std::fmt::Debug;
 use std::fmt::Formatter;
 use std::sync::Arc;
 use std::sync::atomic::{AtomicU64, AtomicUsize, Ordering};
-use std::time::Duration;
-use std::time::Instant;
 
 use crate::raw::*;
 use crate::*;
@@ -328,7 +326,7 @@ impl<A: Access> TailCutAccessor<A> {
 
     async fn with_deadline<F, T>(&self, op: Operation, size: Option<u64>, fut: 
F) -> Result<T>
     where
-        F: std::future::Future<Output = Result<T>>,
+        F: Future<Output = Result<T>>,
     {
         let start = Instant::now();
 
@@ -814,10 +812,8 @@ impl WindowedHistogram {
     }
 
     fn now_ms() -> u64 {
-        std::time::SystemTime::now()
-            .duration_since(std::time::UNIX_EPOCH)
-            .unwrap()
-            .as_millis() as u64
+        // SAFETY: Unless System clock goes backwards before UNIX_EPOCH, this 
should never fail.
+        u64::try_from(Timestamp::now().into_inner().as_millisecond()).unwrap()
     }
 }
 
diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs
index b74bd3f42..9750ac007 100644
--- a/core/src/layers/timeout.rs
+++ b/core/src/layers/timeout.rs
@@ -17,7 +17,6 @@
 
 use std::future::Future;
 use std::sync::Arc;
-use std::time::Duration;
 
 use crate::raw::*;
 use crate::*;
@@ -105,7 +104,7 @@ use crate::*;
 ///
 /// This might introduce a bit overhead for IO operations, but it's the only 
way to implement
 /// timeout correctly. We used to implement timeout layer in zero cost way 
that only stores
-/// a [`std::time::Instant`] and check the timeout by comparing the instant 
with current time.
+/// a [`Instant`] and check the timeout by comparing the instant with current 
time.
 /// However, it doesn't work for all cases.
 ///
 /// For examples, users TCP connection could be in [Busy 
ESTAB](https://blog.cloudflare.com/when-tcp-sockets-refuse-to-die) state. In 
this state, no IO event will be emitted. The runtime
@@ -356,7 +355,6 @@ mod tests {
     use std::future::Future;
     use std::future::pending;
     use std::sync::Arc;
-    use std::time::Duration;
 
     use futures::StreamExt;
     use tokio::time::sleep;
diff --git a/core/src/raw/futures_util.rs b/core/src/raw/futures_util.rs
index c34499355..17134f1e6 100644
--- a/core/src/raw/futures_util.rs
+++ b/core/src/raw/futures_util.rs
@@ -115,7 +115,7 @@ pub struct ConcurrentTasks<I, O> {
     executor: Executor,
     /// The factory to create the task.
     ///
-    /// Caller of ConcurrentTasks must provides a factory to create the task 
for executing.
+    /// Caller of ConcurrentTasks must provide a factory to create the task 
for executing.
     ///
     /// The factory must accept an input and return a future that resolves to 
a tuple of input and
     /// output result. If the given result is error, the error will be 
returned to users and the
@@ -318,13 +318,12 @@ impl<I: Send + 'static, O: Send + 'static> 
ConcurrentTasks<I, O> {
 
 #[cfg(test)]
 mod tests {
-    use std::time::Duration;
-
     use pretty_assertions::assert_eq;
     use rand::Rng;
     use tokio::time::sleep;
 
     use super::*;
+    use crate::raw::Duration;
 
     #[tokio::test]
     async fn test_concurrent_tasks() {
diff --git a/core/src/raw/oio/write/block_write.rs 
b/core/src/raw/oio/write/block_write.rs
index 91d0ee80d..793da2be7 100644
--- a/core/src/raw/oio/write/block_write.rs
+++ b/core/src/raw/oio/write/block_write.rs
@@ -245,7 +245,6 @@ where
 mod tests {
     use std::collections::HashMap;
     use std::sync::Mutex;
-    use std::time::Duration;
 
     use pretty_assertions::assert_eq;
     use rand::Rng;
diff --git a/core/src/raw/oio/write/multipart_write.rs 
b/core/src/raw/oio/write/multipart_write.rs
index 403774826..e8b174b18 100644
--- a/core/src/raw/oio/write/multipart_write.rs
+++ b/core/src/raw/oio/write/multipart_write.rs
@@ -307,8 +307,6 @@ where
 
 #[cfg(test)]
 mod tests {
-    use std::time::Duration;
-
     use mea::mutex::Mutex;
     use pretty_assertions::assert_eq;
     use rand::Rng;
diff --git a/core/src/raw/oio/write/position_write.rs 
b/core/src/raw/oio/write/position_write.rs
index 37c8ad686..c6333dbde 100644
--- a/core/src/raw/oio/write/position_write.rs
+++ b/core/src/raw/oio/write/position_write.rs
@@ -175,7 +175,6 @@ impl<W: PositionWrite> oio::Write for PositionWriter<W> {
 mod tests {
     use std::collections::HashSet;
     use std::sync::Mutex;
-    use std::time::Duration;
 
     use pretty_assertions::assert_eq;
     use rand::Rng;
diff --git a/core/src/raw/ops.rs b/core/src/raw/ops.rs
index 117cbd586..ae76a58f1 100644
--- a/core/src/raw/ops.rs
+++ b/core/src/raw/ops.rs
@@ -21,8 +21,8 @@
 
 use crate::options;
 use crate::raw::*;
+
 use std::collections::HashMap;
-use std::time::Duration;
 
 /// Args for `create` operation.
 ///
diff --git a/core/src/raw/time.rs b/core/src/raw/time.rs
index 9d67931b3..b43f61a82 100644
--- a/core/src/raw/time.rs
+++ b/core/src/raw/time.rs
@@ -22,7 +22,12 @@ use jiff::SignedDuration;
 use std::fmt;
 use std::ops::{Add, AddAssign, Sub, SubAssign};
 use std::str::FromStr;
-use std::time::{Duration, SystemTime};
+
+pub use std::time::{Duration, UNIX_EPOCH};
+#[cfg(not(target_arch = "wasm32"))]
+pub use std::time::{Instant, SystemTime};
+#[cfg(target_arch = "wasm32")]
+pub use web_time::{Instant, SystemTime};
 
 /// An instant in time represented as the number of nanoseconds since the Unix 
epoch.
 #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -166,22 +171,45 @@ impl From<Timestamp> for jiff::Timestamp {
     }
 }
 
-impl From<Timestamp> for SystemTime {
-    fn from(t: Timestamp) -> Self {
-        t.0.into()
-    }
-}
-
 impl From<jiff::Timestamp> for Timestamp {
     fn from(t: jiff::Timestamp) -> Self {
         Timestamp(t)
     }
 }
 
+impl From<Timestamp> for SystemTime {
+    fn from(ts: Timestamp) -> Self {
+        #[cfg(not(target_arch = "wasm32"))]
+        {
+            SystemTime::from(ts.0)
+        }
+
+        #[cfg(target_arch = "wasm32")]
+        {
+            use std::time::SystemTime as StdSystemTime;
+
+            let t = StdSystemTime::from(ts.0);
+            <web_time::SystemTime as web_time::web::SystemTimeExt>::from_std(t)
+        }
+    }
+}
+
 impl TryFrom<SystemTime> for Timestamp {
     type Error = Error;
 
     fn try_from(t: SystemTime) -> Result<Self> {
+        let t = {
+            #[cfg(not(target_arch = "wasm32"))]
+            {
+                t
+            }
+
+            #[cfg(target_arch = "wasm32")]
+            {
+                <web_time::SystemTime as 
web_time::web::SystemTimeExt>::to_std(t)
+            }
+        };
+
         jiff::Timestamp::try_from(t).map(Timestamp).map_err(|err| {
             Error::new(ErrorKind::Unexpected, "input timestamp 
overflow").set_source(err)
         })
diff --git a/core/src/services/azblob/core.rs b/core/src/services/azblob/core.rs
index fe533807b..b2d615ff3 100644
--- a/core/src/services/azblob/core.rs
+++ b/core/src/services/azblob/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use base64::Engine;
 use base64::prelude::BASE64_STANDARD;
diff --git a/core/src/services/b2/core.rs b/core/src/services/b2/core.rs
index b88a20598..a266d77be 100644
--- a/core/src/services/b2/core.rs
+++ b/core/src/services/b2/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Buf;
 use http::Request;
diff --git a/core/src/services/cloudflare_kv/backend.rs 
b/core/src/services/cloudflare_kv/backend.rs
index ec8a4ab13..76395829d 100644
--- a/core/src/services/cloudflare_kv/backend.rs
+++ b/core/src/services/cloudflare_kv/backend.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Buf;
 use http::StatusCode;
diff --git a/core/src/services/cloudflare_kv/config.rs 
b/core/src/services/cloudflare_kv/config.rs
index 34698f63f..27956d10a 100644
--- a/core/src/services/cloudflare_kv/config.rs
+++ b/core/src/services/cloudflare_kv/config.rs
@@ -16,13 +16,13 @@
 // under the License.
 
 use std::fmt::Debug;
-use std::time::Duration;
 
 use serde::Deserialize;
 use serde::Serialize;
 
 use super::CLOUDFLARE_KV_SCHEME;
 use super::backend::CloudflareKvBuilder;
+use crate::raw::*;
 
 /// Cloudflare KV Service Support.
 #[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/cloudflare_kv/core.rs 
b/core/src/services/cloudflare_kv/core.rs
index 13797b587..fa1069b17 100644
--- a/core/src/services/cloudflare_kv/core.rs
+++ b/core/src/services/cloudflare_kv/core.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::sync::Arc;
-use std::time::Duration;
 
 use http::Request;
 use http::Response;
@@ -24,11 +23,7 @@ use http::header;
 use http::request;
 use serde_json::json;
 
-use crate::raw::Operation;
-use crate::raw::QueryPairsWriter;
-use crate::raw::new_json_serialize_error;
-use crate::raw::percent_encode_path;
-use crate::raw::{AccessorInfo, FormDataPart, Multipart, 
new_request_build_error};
+use crate::raw::*;
 use crate::services::cloudflare_kv::model::CfKvMetadata;
 use crate::{Buffer, Result};
 
diff --git a/core/src/services/cos/core.rs b/core/src/services/cos/core.rs
index cb3c75b38..f601dc6ba 100644
--- a/core/src/services/cos/core.rs
+++ b/core/src/services/cos/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Bytes;
 use http::Request;
diff --git a/core/src/services/dashmap/writer.rs 
b/core/src/services/dashmap/writer.rs
index 54efe86cb..bb8409ba3 100644
--- a/core/src/services/dashmap/writer.rs
+++ b/core/src/services/dashmap/writer.rs
@@ -16,11 +16,10 @@
 // under the License.
 
 use std::sync::Arc;
-use std::time::SystemTime;
 
 use super::core::DashmapCore;
 use super::core::DashmapValue;
-use crate::raw::{OpWrite, Timestamp, oio};
+use crate::raw::*;
 use crate::*;
 
 pub struct DashmapWriter {
@@ -54,7 +53,7 @@ impl oio::Write for DashmapWriter {
         let entry_mode = EntryMode::from_path(&self.path);
         let mut meta = Metadata::new(entry_mode);
         meta.set_content_length(content.len() as u64);
-        meta.set_last_modified(Timestamp::try_from(SystemTime::now())?);
+        meta.set_last_modified(Timestamp::now());
 
         if let Some(v) = self.op.content_type() {
             meta.set_content_type(v);
diff --git a/core/src/services/dropbox/core.rs 
b/core/src/services/dropbox/core.rs
index 396c73fe2..13545dde0 100644
--- a/core/src/services/dropbox/core.rs
+++ b/core/src/services/dropbox/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Buf;
 use bytes::Bytes;
diff --git a/core/src/services/etcd/core.rs b/core/src/services/etcd/core.rs
index 24b6eea6e..2d458f27b 100644
--- a/core/src/services/etcd/core.rs
+++ b/core/src/services/etcd/core.rs
@@ -15,8 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::services::etcd::error::format_etcd_error;
-use crate::{Buffer, Error, ErrorKind, Result};
 use etcd_client::Client;
 use etcd_client::ConnectOptions;
 use fastpool::ManageObject;
@@ -24,7 +22,10 @@ use fastpool::ObjectStatus;
 use fastpool::bounded;
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
+
+use crate::raw::*;
+use crate::services::etcd::error::format_etcd_error;
+use crate::{Buffer, Error, ErrorKind, Result};
 
 pub mod constants {
     pub const DEFAULT_ETCD_ENDPOINTS: &str = "http://127.0.0.1:2379";;
diff --git a/core/src/services/ftp/core.rs b/core/src/services/ftp/core.rs
index afe227add..5ff027701 100644
--- a/core/src/services/ftp/core.rs
+++ b/core/src/services/ftp/core.rs
@@ -17,9 +17,7 @@
 
 use fastpool::{ManageObject, ObjectStatus, bounded};
 use futures_rustls::TlsConnector;
-use raw::Operation;
 use std::sync::Arc;
-use std::time::Duration;
 use suppaftp::AsyncRustlsConnector;
 use suppaftp::AsyncRustlsFtpStream;
 use suppaftp::FtpError;
@@ -29,7 +27,7 @@ use suppaftp::rustls::ClientConfig;
 use suppaftp::types::FileType;
 
 use super::err::format_ftp_error;
-use crate::raw::AccessorInfo;
+use crate::raw::*;
 use crate::*;
 
 pub struct FtpCore {
diff --git a/core/src/services/gcs/core.rs b/core/src/services/gcs/core.rs
index f9e88406c..35838a410 100644
--- a/core/src/services/gcs/core.rs
+++ b/core/src/services/gcs/core.rs
@@ -20,7 +20,6 @@ use std::fmt::Debug;
 use std::fmt::Write;
 use std::sync::Arc;
 use std::sync::LazyLock;
-use std::time::Duration;
 
 use backon::ExponentialBuilder;
 use backon::Retryable;
diff --git a/core/src/services/gdrive/core.rs b/core/src/services/gdrive/core.rs
index 0b89c14b3..b854969fc 100644
--- a/core/src/services/gdrive/core.rs
+++ b/core/src/services/gdrive/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Buf;
 use bytes::Bytes;
diff --git a/core/src/services/memcached/backend.rs 
b/core/src/services/memcached/backend.rs
index cbf6aa5c4..9544b0c7d 100644
--- a/core/src/services/memcached/backend.rs
+++ b/core/src/services/memcached/backend.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::sync::Arc;
-use std::time::Duration;
 
 use super::MEMCACHED_SCHEME;
 use super::config::MemcachedConfig;
diff --git a/core/src/services/memcached/config.rs 
b/core/src/services/memcached/config.rs
index ac8990a1d..943f38ce8 100644
--- a/core/src/services/memcached/config.rs
+++ b/core/src/services/memcached/config.rs
@@ -16,13 +16,13 @@
 // under the License.
 
 use std::fmt::Debug;
-use std::time::Duration;
 
 use serde::Deserialize;
 use serde::Serialize;
 
 use super::MEMCACHED_SCHEME;
 use super::backend::MemcachedBuilder;
+use crate::raw::*;
 
 /// Config for MemCached services support
 #[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/memcached/core.rs 
b/core/src/services/memcached/core.rs
index c88d7b0be..25b097314 100644
--- a/core/src/services/memcached/core.rs
+++ b/core/src/services/memcached/core.rs
@@ -17,7 +17,6 @@
 
 use fastpool::{ManageObject, ObjectStatus, bounded};
 use std::sync::Arc;
-use std::time::Duration;
 use tokio::net::TcpStream;
 
 use super::binary;
diff --git a/core/src/services/mini_moka/backend.rs 
b/core/src/services/mini_moka/backend.rs
index 24a6b08ed..55da226cb 100644
--- a/core/src/services/mini_moka/backend.rs
+++ b/core/src/services/mini_moka/backend.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::sync::Arc;
-use std::time::Duration;
 
 use log::debug;
 
diff --git a/core/src/services/moka/backend.rs 
b/core/src/services/moka/backend.rs
index ee28e15b9..dc16c82a4 100644
--- a/core/src/services/moka/backend.rs
+++ b/core/src/services/moka/backend.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use log::debug;
 
@@ -27,8 +26,6 @@ use super::core::*;
 use super::deleter::MokaDeleter;
 use super::lister::MokaLister;
 use super::writer::MokaWriter;
-use crate::raw::oio;
-use crate::raw::signed_to_duration;
 use crate::raw::*;
 use crate::*;
 
diff --git a/core/src/services/monoiofs/core.rs 
b/core/src/services/monoiofs/core.rs
index eee84568c..009fbf2da 100644
--- a/core/src/services/monoiofs/core.rs
+++ b/core/src/services/monoiofs/core.rs
@@ -19,7 +19,6 @@ use std::mem;
 use std::path::PathBuf;
 use std::sync::Arc;
 use std::sync::Mutex;
-use std::time::Duration;
 
 use flume::Receiver;
 use flume::Sender;
@@ -31,6 +30,7 @@ use monoio::RuntimeBuilder;
 use super::MONOIOFS_SCHEME;
 use crate::raw::*;
 use crate::*;
+
 pub const BUFFER_SIZE: usize = 2 * 1024 * 1024; // 2 MiB
 
 /// a boxed function that spawns task in current monoio runtime
@@ -219,7 +219,6 @@ impl MonoiofsCore {
 #[cfg(test)]
 mod tests {
     use std::sync::Arc;
-    use std::time::Duration;
 
     use futures::StreamExt;
     use futures::channel::mpsc::UnboundedSender;
diff --git a/core/src/services/obs/core.rs b/core/src/services/obs/core.rs
index 33f03f549..9ed33e905 100644
--- a/core/src/services/obs/core.rs
+++ b/core/src/services/obs/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Bytes;
 use http::Request;
diff --git a/core/src/services/onedrive/core.rs 
b/core/src/services/onedrive/core.rs
index 1867fbb65..76b334d81 100644
--- a/core/src/services/onedrive/core.rs
+++ b/core/src/services/onedrive/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Buf;
 use bytes::Bytes;
diff --git a/core/src/services/oss/core.rs b/core/src/services/oss/core.rs
index 78423dd76..7bdf5456d 100644
--- a/core/src/services/oss/core.rs
+++ b/core/src/services/oss/core.rs
@@ -17,7 +17,6 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
 use bytes::Bytes;
 use constants::X_OSS_META_PREFIX;
diff --git a/core/src/services/redis/backend.rs 
b/core/src/services/redis/backend.rs
index e9b3d58a1..1b219f44f 100644
--- a/core/src/services/redis/backend.rs
+++ b/core/src/services/redis/backend.rs
@@ -17,7 +17,6 @@
 
 use std::path::PathBuf;
 use std::sync::Arc;
-use std::time::Duration;
 
 use http::Uri;
 use redis::Client;
diff --git a/core/src/services/redis/config.rs 
b/core/src/services/redis/config.rs
index 1f07f4a04..7df08e87c 100644
--- a/core/src/services/redis/config.rs
+++ b/core/src/services/redis/config.rs
@@ -16,13 +16,13 @@
 // under the License.
 
 use std::fmt::Debug;
-use std::time::Duration;
 
 use serde::Deserialize;
 use serde::Serialize;
 
 use super::REDIS_SCHEME;
 use super::backend::RedisBuilder;
+use crate::raw::*;
 
 /// Config for Redis services support.
 #[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
diff --git a/core/src/services/redis/core.rs b/core/src/services/redis/core.rs
index f0f5de20a..08fedc5d3 100644
--- a/core/src/services/redis/core.rs
+++ b/core/src/services/redis/core.rs
@@ -17,9 +17,7 @@
 
 use std::fmt::Debug;
 use std::sync::Arc;
-use std::time::Duration;
 
-use crate::*;
 use bytes::Bytes;
 use fastpool::{ManageObject, ObjectStatus, bounded};
 use redis::AsyncCommands;
@@ -34,6 +32,9 @@ use redis::aio::ConnectionManager;
 use redis::cluster::ClusterClient;
 use redis::cluster_async::ClusterConnection;
 
+use crate::raw::*;
+use crate::*;
+
 #[derive(Clone)]
 pub enum RedisConnection {
     Normal(ConnectionManager),
diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs
index 28576e4cd..6699dd2bf 100644
--- a/core/src/services/s3/core.rs
+++ b/core/src/services/s3/core.rs
@@ -19,7 +19,6 @@ use std::fmt::Debug;
 use std::fmt::Display;
 use std::fmt::Write;
 use std::sync::Arc;
-use std::time::Duration;
 
 use base64::Engine;
 use base64::prelude::BASE64_STANDARD;
diff --git a/core/src/services/sftp/core.rs b/core/src/services/sftp/core.rs
index 2520a03d9..83ff99258 100644
--- a/core/src/services/sftp/core.rs
+++ b/core/src/services/sftp/core.rs
@@ -30,7 +30,6 @@ use std::fmt::Debug;
 use std::path::Path;
 use std::path::PathBuf;
 use std::sync::Arc;
-use std::time::Duration;
 
 pub struct SftpCore {
     pub info: Arc<AccessorInfo>,
diff --git a/core/src/types/execute/executors/tokio_executor.rs 
b/core/src/types/execute/executors/tokio_executor.rs
index 72f96b01b..afb02931c 100644
--- a/core/src/types/execute/executors/tokio_executor.rs
+++ b/core/src/types/execute/executors/tokio_executor.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::raw::BoxedStaticFuture;
+use crate::raw::*;
 use crate::*;
 
 /// Executor that uses the [`tokio::task::spawn`] to execute futures.
@@ -34,7 +34,6 @@ mod tests {
     use std::sync::Arc;
     use std::sync::atomic::AtomicBool;
     use std::sync::atomic::Ordering;
-    use std::time::Duration;
 
     use tokio::time::sleep;
 
diff --git a/core/src/types/operator/operator.rs 
b/core/src/types/operator/operator.rs
index c033e34c0..e81dd2475 100644
--- a/core/src/types/operator/operator.rs
+++ b/core/src/types/operator/operator.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::future::Future;
-use std::time::Duration;
 
 use futures::Stream;
 use futures::StreamExt;
diff --git a/core/src/types/operator/operator_futures.rs 
b/core/src/types/operator/operator_futures.rs
index 4c67b6a5f..6726707fc 100644
--- a/core/src/types/operator/operator_futures.rs
+++ b/core/src/types/operator/operator_futures.rs
@@ -22,7 +22,6 @@
 use std::collections::HashMap;
 use std::future::IntoFuture;
 use std::ops::RangeBounds;
-use std::time::Duration;
 
 use crate::raw::*;
 use crate::*;

Reply via email to