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/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 925c8e82e chore: Code cleanup to make rust 1.74 happy (#3602)
925c8e82e is described below

commit 925c8e82e2e8e4c4ed3260f3c7994c338c598947
Author: Xuanwo <[email protected]>
AuthorDate: Thu Nov 16 23:25:36 2023 +0800

    chore: Code cleanup to make rust 1.74 happy (#3602)
    
    * Make clippy happy
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Format cargo
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Format code
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Remove not needed async trait
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Cleanup comments
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Polish
    
    Signed-off-by: Xuanwo <[email protected]>
    
    ---------
    
    Signed-off-by: Xuanwo <[email protected]>
---
 bin/oay/src/services/webdav/service.rs        |  2 +-
 bindings/c/src/entry.rs                       |  3 +-
 bindings/c/src/operator_info.rs               |  3 +-
 bindings/c/src/reader.rs                      |  6 ++--
 bindings/java/Cargo.toml                      |  2 +-
 bindings/java/src/blocking_operator.rs        |  4 +--
 bindings/java/src/convert.rs                  |  7 ++--
 bindings/java/src/layer.rs                    |  5 +--
 bindings/java/src/operator.rs                 |  4 +--
 bindings/java/src/utility.rs                  |  7 ++--
 bindings/nodejs/Cargo.toml                    |  2 +-
 bindings/nodejs/index.d.ts                    |  2 +-
 bindings/nodejs/src/lib.rs                    |  2 +-
 bindings/python/Cargo.toml                    |  2 +-
 bindings/python/src/file.rs                   |  6 ++--
 bindings/python/src/lister.rs                 |  2 +-
 bindings/python/src/operator.rs               |  3 +-
 core/Cargo.toml                               |  2 +-
 core/edge/file_write_on_full_disk/src/main.rs |  3 +-
 core/fuzz/fuzz_reader.rs                      |  3 +-
 core/src/layers/immutable_index.rs            |  3 +-
 core/src/layers/prometheus_client.rs          |  3 +-
 core/src/raw/layer.rs                         |  6 +++-
 core/src/raw/oio/buf/adaptive.rs              |  4 ++-
 core/src/raw/oio/list/api.rs                  |  9 ++----
 core/src/raw/oio/list/flat_list.rs            |  7 ++--
 core/src/raw/oio/list/hierarchy_list.rs       | 11 +++----
 core/src/raw/oio/list/page_list.rs            |  7 ++--
 core/src/raw/oio/read/api.rs                  |  6 ++--
 core/src/raw/oio/read/file_read.rs            |  1 -
 core/src/raw/oio/read/futures_read.rs         | 13 +++++---
 core/src/raw/oio/read/lazy_read.rs            | 16 ++++++----
 core/src/raw/oio/read/std_read.rs             |  9 ++++--
 core/src/raw/oio/read/tokio_read.rs           | 15 ++++++---
 core/src/raw/oio/write/api.rs                 |  4 ---
 core/src/raw/oio/write/append_object_write.rs |  1 -
 core/src/raw/oio/write/exact_buf_write.rs     |  1 -
 core/src/raw/oio/write/one_shot_write.rs      | 32 ++++++++-----------
 core/src/raw/serde_util.rs                    | 12 +++++--
 core/src/raw/tests/read.rs                    | 12 ++++---
 core/src/raw/tests/utils.rs                   |  6 ++--
 core/src/raw/tests/write.rs                   |  9 ++++--
 core/src/services/alluxio/backend.rs          | 10 +++---
 core/src/services/alluxio/core.rs             | 10 +++---
 core/src/services/alluxio/error.rs            |  3 +-
 core/src/services/alluxio/writer.rs           |  4 +--
 core/src/services/azfile/backend.rs           |  7 ++--
 core/src/services/azfile/lister.rs            |  5 ++-
 core/src/services/azfile/writer.rs            |  5 ++-
 core/src/services/cloudflare_kv/error.rs      |  8 ++---
 core/src/services/d1/backend.rs               |  5 ++-
 core/src/services/d1/error.rs                 |  8 ++---
 core/src/services/d1/model.rs                 | 12 ++++---
 core/src/services/dbfs/backend.rs             |  5 ++-
 core/src/services/dbfs/core.rs                |  3 +-
 core/src/services/dbfs/lister.rs              |  3 +-
 core/src/services/dbfs/reader.rs              |  1 -
 core/src/services/dbfs/writer.rs              |  3 +-
 core/src/services/dropbox/backend.rs          |  7 ++--
 core/src/services/fs/lister.rs                |  4 ++-
 core/src/services/ftp/backend.rs              |  3 +-
 core/src/services/ftp/lister.rs               |  3 +-
 core/src/services/gridfs/backend.rs           | 11 +++++--
 core/src/services/hdfs/lister.rs              |  4 ++-
 core/src/services/http/backend.rs             |  3 +-
 core/src/services/libsql/backend.rs           | 23 +++++++++-----
 core/src/services/mongodb/backend.rs          | 10 ++++--
 core/src/services/mysql/backend.rs            |  1 -
 core/src/services/oss/core.rs                 |  9 +++---
 core/src/services/sftp/backend.rs             |  3 +-
 core/src/services/sftp/lister.rs              |  4 ++-
 core/src/services/sqlite/backend.rs           |  3 +-
 core/src/services/swift/error.rs              |  3 +-
 core/src/types/operator/operator.rs           |  3 +-
 core/src/types/scheme.rs                      |  2 +-
 core/tests/behavior/blocking_copy.rs          |  3 +-
 core/tests/behavior/blocking_rename.rs        |  3 +-
 core/tests/behavior/copy.rs                   |  3 +-
 core/tests/behavior/fuzz.rs                   | 46 ++++-----------------------
 core/tests/behavior/rename.rs                 |  3 +-
 core/tests/behavior/utils.rs                  |  3 +-
 81 files changed, 262 insertions(+), 244 deletions(-)

diff --git a/bin/oay/src/services/webdav/service.rs 
b/bin/oay/src/services/webdav/service.rs
index 71bc31499..9b5673eb9 100644
--- a/bin/oay/src/services/webdav/service.rs
+++ b/bin/oay/src/services/webdav/service.rs
@@ -23,10 +23,10 @@ use axum::http::Request;
 use axum::routing::any_service;
 use axum::Router;
 use dav_server::DavHandler;
+use dav_server_opendalfs::OpendalFs;
 use opendal::Operator;
 
 use crate::Config;
-use dav_server_opendalfs::OpendalFs;
 
 pub struct WebdavService {
     cfg: Arc<Config>,
diff --git a/bindings/c/src/entry.rs b/bindings/c/src/entry.rs
index 44e9c2f19..f71b65337 100644
--- a/bindings/c/src/entry.rs
+++ b/bindings/c/src/entry.rs
@@ -15,10 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use ::opendal as core;
 use std::ffi::CString;
 use std::os::raw::c_char;
 
+use ::opendal as core;
+
 /// \brief opendal_list_entry is the entry under a path, which is listed from 
the opendal_lister
 ///
 /// For examples, please see the comment section of opendal_operator_list()
diff --git a/bindings/c/src/operator_info.rs b/bindings/c/src/operator_info.rs
index 9785700fd..4d805e4de 100644
--- a/bindings/c/src/operator_info.rs
+++ b/bindings/c/src/operator_info.rs
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use std::ffi::{c_char, CString};
+use std::ffi::c_char;
+use std::ffi::CString;
 
 use ::opendal as core;
 
diff --git a/bindings/c/src/reader.rs b/bindings/c/src/reader.rs
index f9c52fc17..d0604aeeb 100644
--- a/bindings/c/src/reader.rs
+++ b/bindings/c/src/reader.rs
@@ -15,10 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use super::*;
-use ::opendal as core;
 use std::io::Read;
 
+use ::opendal as core;
+
+use super::*;
+
 /// \brief The result type returned by opendal's reader operation.
 ///
 /// \note The opendal_reader actually owns a pointer to
diff --git a/bindings/java/Cargo.toml b/bindings/java/Cargo.toml
index 2fcff3da7..c1b62f30b 100644
--- a/bindings/java/Cargo.toml
+++ b/bindings/java/Cargo.toml
@@ -105,6 +105,7 @@ services-webdav = ["opendal/services-webdav"]
 services-webhdfs = ["opendal/services-webhdfs"]
 
 # Optional services provided by opendal.
+services-alluxio = ["opendal/services-alluxio"]
 services-azfile = ["opendal/services-azfile"]
 services-cacache = ["opendal/services-cacache"]
 services-dashmap = ["opendal/services-dashmap"]
@@ -136,7 +137,6 @@ services-swift = ["opendal/services-swift"]
 services-tikv = ["opendal/services-tikv"]
 services-vercel-artifacts = ["opendal/services-vercel-artifacts"]
 services-wasabi = ["opendal/services-wasabi"]
-services-alluxio = ["opendal/services-alluxio"]
 
 [dependencies]
 anyhow = "1.0.71"
diff --git a/bindings/java/src/blocking_operator.rs 
b/bindings/java/src/blocking_operator.rs
index a87cd9b44..f2d77302c 100644
--- a/bindings/java/src/blocking_operator.rs
+++ b/bindings/java/src/blocking_operator.rs
@@ -19,12 +19,12 @@ use jni::objects::JByteArray;
 use jni::objects::JClass;
 use jni::objects::JObject;
 use jni::objects::JString;
+use jni::sys::jbyteArray;
+use jni::sys::jlong;
 use jni::sys::jobject;
 use jni::sys::jobjectArray;
 use jni::sys::jsize;
-use jni::sys::{jbyteArray, jlong};
 use jni::JNIEnv;
-
 use opendal::BlockingOperator;
 
 use crate::convert::jstring_to_string;
diff --git a/bindings/java/src/convert.rs b/bindings/java/src/convert.rs
index 115bc9981..e347fffc8 100644
--- a/bindings/java/src/convert.rs
+++ b/bindings/java/src/convert.rs
@@ -15,10 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use jni::objects::{JMap, JObject, JString};
+use std::collections::HashMap;
+
+use jni::objects::JMap;
+use jni::objects::JObject;
+use jni::objects::JString;
 use jni::sys::jlong;
 use jni::JNIEnv;
-use std::collections::HashMap;
 
 pub(crate) fn usize_to_jlong(n: Option<usize>) -> jlong {
     // usize is always >= 0, so we can use -1 to identify the empty value.
diff --git a/bindings/java/src/layer.rs b/bindings/java/src/layer.rs
index 3706d77f5..7e3ba35fd 100644
--- a/bindings/java/src/layer.rs
+++ b/bindings/java/src/layer.rs
@@ -18,9 +18,10 @@
 use std::time::Duration;
 
 use jni::objects::JClass;
-use jni::sys::{jboolean, jfloat, jlong};
+use jni::sys::jboolean;
+use jni::sys::jfloat;
+use jni::sys::jlong;
 use jni::JNIEnv;
-
 use opendal::layers::RetryLayer;
 use opendal::Operator;
 
diff --git a/bindings/java/src/operator.rs b/bindings/java/src/operator.rs
index e4a13430b..5d05f2102 100644
--- a/bindings/java/src/operator.rs
+++ b/bindings/java/src/operator.rs
@@ -24,10 +24,10 @@ use jni::objects::JObject;
 use jni::objects::JString;
 use jni::objects::JValue;
 use jni::objects::JValueOwned;
+use jni::sys::jlong;
+use jni::sys::jobject;
 use jni::sys::jsize;
-use jni::sys::{jlong, jobject};
 use jni::JNIEnv;
-
 use opendal::layers::BlockingLayer;
 use opendal::raw::PresignedRequest;
 use opendal::Operator;
diff --git a/bindings/java/src/utility.rs b/bindings/java/src/utility.rs
index b3190db7b..02f382ec8 100644
--- a/bindings/java/src/utility.rs
+++ b/bindings/java/src/utility.rs
@@ -15,10 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use jni::objects::{JClass, JObject};
-use jni::sys::{jobjectArray, jsize};
+use jni::objects::JClass;
+use jni::objects::JObject;
+use jni::sys::jobjectArray;
+use jni::sys::jsize;
 use jni::JNIEnv;
-
 use opendal::Scheme;
 
 use crate::convert::string_to_jstring;
diff --git a/bindings/nodejs/Cargo.toml b/bindings/nodejs/Cargo.toml
index 92d7c451c..9ad4eff0a 100644
--- a/bindings/nodejs/Cargo.toml
+++ b/bindings/nodejs/Cargo.toml
@@ -101,6 +101,7 @@ services-webdav = ["opendal/services-webdav"]
 services-webhdfs = ["opendal/services-webhdfs"]
 
 # Optional services provided by opendal.
+services-alluxio = ["opendal/services-alluxio"]
 services-azfile = ["opendal/services-azfile"]
 services-cacache = ["opendal/services-cacache"]
 services-dashmap = ["opendal/services-dashmap"]
@@ -132,7 +133,6 @@ services-swift = ["opendal/services-swift"]
 services-tikv = ["opendal/services-tikv"]
 services-vercel-artifacts = ["opendal/services-vercel-artifacts"]
 services-wasabi = ["opendal/services-wasabi"]
-services-alluxio = ["opendal/services-alluxio"]
 
 [lib]
 crate-type = ["cdylib"]
diff --git a/bindings/nodejs/index.d.ts b/bindings/nodejs/index.d.ts
index 0d0455b0b..6c6ceba31 100644
--- a/bindings/nodejs/index.d.ts
+++ b/bindings/nodejs/index.d.ts
@@ -468,7 +468,7 @@ export class Layer { }
  * retry.jitter = true;
  *
  * op.layer(retry.build());
- *```
+ * ```
  */
 export class RetryLayer {
   constructor()
diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs
index e994e1fac..3cb8b8670 100644
--- a/bindings/nodejs/src/lib.rs
+++ b/bindings/nodejs/src/lib.rs
@@ -731,7 +731,7 @@ impl NodeLayer for opendal::layers::RetryLayer {
 /// retry.jitter = true;
 ///
 /// op.layer(retry.build());
-///```
+/// ```
 #[derive(Default)]
 #[napi]
 pub struct RetryLayer {
diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml
index 553575f71..8a51cbda4 100644
--- a/bindings/python/Cargo.toml
+++ b/bindings/python/Cargo.toml
@@ -101,6 +101,7 @@ services-webdav = ["opendal/services-webdav"]
 services-webhdfs = ["opendal/services-webhdfs"]
 
 # Optional services provided by opendal.
+services-alluxio = ["opendal/services-alluxio"]
 services-azfile = ["opendal/services-azfile"]
 services-cacache = ["opendal/services-cacache"]
 services-dashmap = ["opendal/services-dashmap"]
@@ -132,7 +133,6 @@ services-swift = ["opendal/services-swift"]
 services-tikv = ["opendal/services-tikv"]
 services-vercel-artifacts = ["opendal/services-vercel-artifacts"]
 services-wasabi = ["opendal/services-wasabi"]
-services-alluxio = ["opendal/services-alluxio"]
 
 [lib]
 crate-type = ["cdylib"]
diff --git a/bindings/python/src/file.rs b/bindings/python/src/file.rs
index 8db6452b3..09cc6daeb 100644
--- a/bindings/python/src/file.rs
+++ b/bindings/python/src/file.rs
@@ -15,14 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::io::Read;
 use std::io::Seek;
 use std::io::SeekFrom;
-use std::io::{Read, Write};
+use std::io::Write;
 use std::ops::DerefMut;
 use std::sync::Arc;
 
+use futures::AsyncReadExt;
 use futures::AsyncSeekExt;
-use futures::{AsyncReadExt, AsyncWriteExt};
+use futures::AsyncWriteExt;
 use pyo3::exceptions::PyIOError;
 use pyo3::exceptions::PyValueError;
 use pyo3::prelude::*;
diff --git a/bindings/python/src/lister.rs b/bindings/python/src/lister.rs
index d2e7fe89c..e108ec2dc 100644
--- a/bindings/python/src/lister.rs
+++ b/bindings/python/src/lister.rs
@@ -15,9 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use futures::TryStreamExt;
 use std::sync::Arc;
 
+use futures::TryStreamExt;
 use pyo3::exceptions::PyStopAsyncIteration;
 use pyo3::prelude::*;
 use pyo3_asyncio::tokio::future_into_py;
diff --git a/bindings/python/src/operator.rs b/bindings/python/src/operator.rs
index d8e6763af..c8057deac 100644
--- a/bindings/python/src/operator.rs
+++ b/bindings/python/src/operator.rs
@@ -21,7 +21,8 @@ use std::time::Duration;
 
 use pyo3::exceptions::PyValueError;
 use pyo3::prelude::*;
-use pyo3::types::{PyBytes, PyDict};
+use pyo3::types::PyBytes;
+use pyo3::types::PyDict;
 use pyo3_asyncio::tokio::future_into_py;
 
 use crate::*;
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 9b74ff691..7a77484e2 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -111,6 +111,7 @@ layers-await-tree = ["dep:await-tree"]
 # Enable layers async-backtrace support.
 layers-async-backtrace = ["dep:async-backtrace"]
 
+services-alluxio = []
 services-atomicserver = ["dep:atomic_lib"]
 services-azblob = [
   "dep:sha2",
@@ -148,7 +149,6 @@ services-gdrive = []
 services-ghac = []
 services-gridfs = ["dep:mongodb"]
 services-hdfs = ["dep:hdrs"]
-services-alluxio = []
 services-http = []
 services-ipfs = ["dep:prost"]
 services-ipmfs = []
diff --git a/core/edge/file_write_on_full_disk/src/main.rs 
b/core/edge/file_write_on_full_disk/src/main.rs
index 63cfe6cf0..f232ac5ff 100644
--- a/core/edge/file_write_on_full_disk/src/main.rs
+++ b/core/edge/file_write_on_full_disk/src/main.rs
@@ -15,11 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::env;
+
 use opendal::services::Fs;
 use opendal::Operator;
 use opendal::Result;
 use rand::prelude::*;
-use std::env;
 
 #[tokio::main]
 async fn main() -> Result<()> {
diff --git a/core/fuzz/fuzz_reader.rs b/core/fuzz/fuzz_reader.rs
index bda286a18..b0f83fc03 100644
--- a/core/fuzz/fuzz_reader.rs
+++ b/core/fuzz/fuzz_reader.rs
@@ -17,7 +17,8 @@
 
 #![no_main]
 
-use std::fmt::{Debug, Formatter};
+use std::fmt::Debug;
+use std::fmt::Formatter;
 use std::io::SeekFrom;
 
 use libfuzzer_sys::arbitrary::Arbitrary;
diff --git a/core/src/layers/immutable_index.rs 
b/core/src/layers/immutable_index.rs
index 764f5ecc8..4a57f4e19 100644
--- a/core/src/layers/immutable_index.rs
+++ b/core/src/layers/immutable_index.rs
@@ -17,7 +17,8 @@
 
 use std::collections::HashSet;
 use std::fmt::Debug;
-use std::task::{Context, Poll};
+use std::task::Context;
+use std::task::Poll;
 use std::vec::IntoIter;
 
 use async_trait::async_trait;
diff --git a/core/src/layers/prometheus_client.rs 
b/core/src/layers/prometheus_client.rs
index fa9e7ec3d..a43d24f0a 100644
--- a/core/src/layers/prometheus_client.rs
+++ b/core/src/layers/prometheus_client.rs
@@ -21,7 +21,8 @@ use std::io;
 use std::sync::Arc;
 use std::task::Context;
 use std::task::Poll;
-use std::time::{Duration, Instant};
+use std::time::Duration;
+use std::time::Instant;
 
 use async_trait::async_trait;
 use bytes::Bytes;
diff --git a/core/src/raw/layer.rs b/core/src/raw/layer.rs
index 48619c9be..da21eca64 100644
--- a/core/src/raw/layer.rs
+++ b/core/src/raw/layer.rs
@@ -96,7 +96,11 @@ use crate::*;
 ///         self.inner.list(path, args).await
 ///     }
 ///
-///     fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, 
Self::BlockingLister)> {
+///     fn blocking_list(
+///         &self,
+///         path: &str,
+///         args: OpList,
+///     ) -> Result<(RpList, Self::BlockingLister)> {
 ///         self.inner.blocking_list(path, args)
 ///     }
 /// }
diff --git a/core/src/raw/oio/buf/adaptive.rs b/core/src/raw/oio/buf/adaptive.rs
index abebcb36f..3ebf361b5 100644
--- a/core/src/raw/oio/buf/adaptive.rs
+++ b/core/src/raw/oio/buf/adaptive.rs
@@ -15,8 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use bytes::{Bytes, BytesMut};
 use std::cmp;
+
+use bytes::Bytes;
+use bytes::BytesMut;
 use tokio::io::ReadBuf;
 
 /// The default minimum adaptive buffer size is 8 KiB.
diff --git a/core/src/raw/oio/list/api.rs b/core/src/raw/oio/list/api.rs
index cb6ed0fa0..920b48c56 100644
--- a/core/src/raw/oio/list/api.rs
+++ b/core/src/raw/oio/list/api.rs
@@ -17,9 +17,8 @@
 
 use std::fmt::Display;
 use std::fmt::Formatter;
-use std::task::{Context, Poll};
-
-use async_trait::async_trait;
+use std::task::Context;
+use std::task::Poll;
 
 use crate::raw::oio::Entry;
 use crate::*;
@@ -59,7 +58,6 @@ impl From<ListOperation> for &'static str {
 }
 
 /// Page trait is used by [`raw::Accessor`] to implement `list` operation.
-#[async_trait]
 pub trait List: Send + Sync + 'static {
     /// Fetch a new page of [`Entry`]
     ///
@@ -71,21 +69,18 @@ pub trait List: Send + Sync + 'static {
 /// The boxed version of [`List`]
 pub type Lister = Box<dyn List>;
 
-#[async_trait]
 impl<P: List + ?Sized> List for Box<P> {
     fn poll_next(&mut self, cx: &mut Context<'_>) -> 
Poll<Result<Option<Entry>>> {
         (**self).poll_next(cx)
     }
 }
 
-#[async_trait]
 impl List for () {
     fn poll_next(&mut self, _: &mut Context<'_>) -> 
Poll<Result<Option<Entry>>> {
         Poll::Ready(Ok(None))
     }
 }
 
-#[async_trait]
 impl<P: List> List for Option<P> {
     fn poll_next(&mut self, cx: &mut Context<'_>) -> 
Poll<Result<Option<Entry>>> {
         match self {
diff --git a/core/src/raw/oio/list/flat_list.rs 
b/core/src/raw/oio/list/flat_list.rs
index 2d40b13fd..3328c74b8 100644
--- a/core/src/raw/oio/list/flat_list.rs
+++ b/core/src/raw/oio/list/flat_list.rs
@@ -15,9 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use std::task::{ready, Context, Poll};
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
 
-use async_trait::async_trait;
 use futures::future::BoxFuture;
 use futures::FutureExt;
 
@@ -102,7 +103,6 @@ where
     }
 }
 
-#[async_trait]
 impl<A, L> oio::List for FlatLister<A, L>
 where
     A: Accessor<Lister = L>,
@@ -208,6 +208,7 @@ where
 
 #[cfg(test)]
 mod tests {
+    use async_trait::async_trait;
     use std::collections::HashMap;
     use std::vec;
     use std::vec::IntoIter;
diff --git a/core/src/raw/oio/list/hierarchy_list.rs 
b/core/src/raw/oio/list/hierarchy_list.rs
index 79d26b3ac..3c67abc11 100644
--- a/core/src/raw/oio/list/hierarchy_list.rs
+++ b/core/src/raw/oio/list/hierarchy_list.rs
@@ -16,14 +16,14 @@
 // under the License.
 
 use std::collections::HashSet;
-use std::task::{ready, Context, Poll};
-
-use async_trait::async_trait;
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
 
 use crate::raw::*;
 use crate::*;
 
-/// ToHierarchyLister will convert a flat page to hierarchy by filter
+/// ToHierarchyLister will convert a flat list to hierarchy by filter
 /// not needed entries.
 ///
 /// # Notes
@@ -32,7 +32,7 @@ use crate::*;
 /// to return an empty vec. It doesn't mean the all pages have been
 /// returned.
 ///
-/// Please keep calling next_page until we returned `Ok(None)`
+/// Please keep calling next until we returned `Ok(None)`
 pub struct HierarchyLister<P> {
     lister: P,
     path: String,
@@ -117,7 +117,6 @@ impl<P> HierarchyLister<P> {
     }
 }
 
-#[async_trait]
 impl<P: oio::List> oio::List for HierarchyLister<P> {
     fn poll_next(&mut self, cx: &mut Context<'_>) -> 
Poll<Result<Option<oio::Entry>>> {
         loop {
diff --git a/core/src/raw/oio/list/page_list.rs 
b/core/src/raw/oio/list/page_list.rs
index 196f228b0..eb98a98bd 100644
--- a/core/src/raw/oio/list/page_list.rs
+++ b/core/src/raw/oio/list/page_list.rs
@@ -15,10 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::collections::VecDeque;
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
+
 use async_trait::async_trait;
 use futures::future::BoxFuture;
-use std::collections::VecDeque;
-use std::task::{ready, Context, Poll};
 
 use crate::raw::*;
 use crate::*;
diff --git a/core/src/raw/oio/read/api.rs b/core/src/raw/oio/read/api.rs
index 098599855..2c25f9981 100644
--- a/core/src/raw/oio/read/api.rs
+++ b/core/src/raw/oio/read/api.rs
@@ -15,12 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::cmp;
 use std::fmt::Display;
 use std::fmt::Formatter;
+use std::io;
 use std::pin::Pin;
+use std::task::ready;
+use std::task::Context;
 use std::task::Poll;
-use std::task::{ready, Context};
-use std::{cmp, io};
 
 use bytes::Bytes;
 use futures::Future;
diff --git a/core/src/raw/oio/read/file_read.rs 
b/core/src/raw/oio/read/file_read.rs
index 2c403f4a6..fd8a53775 100644
--- a/core/src/raw/oio/read/file_read.rs
+++ b/core/src/raw/oio/read/file_read.rs
@@ -16,7 +16,6 @@
 // under the License.
 
 use std::cmp;
-
 use std::io::SeekFrom;
 use std::pin::Pin;
 use std::sync::Arc;
diff --git a/core/src/raw/oio/read/futures_read.rs 
b/core/src/raw/oio/read/futures_read.rs
index 03b52bbf7..8b3bd3999 100644
--- a/core/src/raw/oio/read/futures_read.rs
+++ b/core/src/raw/oio/read/futures_read.rs
@@ -15,14 +15,17 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::raw::*;
-use crate::*;
+use std::io::SeekFrom;
+use std::pin::Pin;
+use std::task::Context;
+use std::task::Poll;
+
 use bytes::Bytes;
 use futures::AsyncRead;
 use futures::AsyncSeek;
-use std::io::SeekFrom;
-use std::pin::Pin;
-use std::task::{Context, Poll};
+
+use crate::raw::*;
+use crate::*;
 
 /// FuturesReader implements [`oio::Read`] via [`AsyncRead`] + [`AsyncSeek`].
 pub struct FuturesReader<R: AsyncRead + AsyncSeek> {
diff --git a/core/src/raw/oio/read/lazy_read.rs 
b/core/src/raw/oio/read/lazy_read.rs
index 89705deff..f6237f656 100644
--- a/core/src/raw/oio/read/lazy_read.rs
+++ b/core/src/raw/oio/read/lazy_read.rs
@@ -15,15 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::raw::*;
-use crate::*;
-use bytes::Bytes;
-use futures::future::BoxFuture;
-use futures::Future;
 use std::io::SeekFrom;
 use std::pin::Pin;
 use std::sync::Arc;
-use std::task::{ready, Context, Poll};
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
+
+use bytes::Bytes;
+use futures::future::BoxFuture;
+use futures::Future;
+
+use crate::raw::*;
+use crate::*;
 
 /// LazyReader implements [`oio::Read`] in a lazy way.
 ///
diff --git a/core/src/raw/oio/read/std_read.rs 
b/core/src/raw/oio/read/std_read.rs
index 926b9abb3..d28f8d5ca 100644
--- a/core/src/raw/oio/read/std_read.rs
+++ b/core/src/raw/oio/read/std_read.rs
@@ -15,11 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::io::Read;
+use std::io::Seek;
+use std::io::SeekFrom;
+
+use bytes::Bytes;
+
 use crate::raw::*;
 use crate::*;
-use bytes::Bytes;
-use std::io::Seek;
-use std::io::{Read, SeekFrom};
 
 /// FuturesReader implements [`oio::BlockingRead`] via [`Read`] + [`Seek`].
 pub struct StdReader<R: Read + Seek> {
diff --git a/core/src/raw/oio/read/tokio_read.rs 
b/core/src/raw/oio/read/tokio_read.rs
index 966973bdc..37aabc147 100644
--- a/core/src/raw/oio/read/tokio_read.rs
+++ b/core/src/raw/oio/read/tokio_read.rs
@@ -15,14 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::raw::*;
-use crate::*;
-use bytes::Bytes;
 use std::io::SeekFrom;
 use std::pin::Pin;
-use std::task::{ready, Context, Poll};
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
+
+use bytes::Bytes;
+use tokio::io::AsyncRead;
 use tokio::io::AsyncSeek;
-use tokio::io::{AsyncRead, ReadBuf};
+use tokio::io::ReadBuf;
+
+use crate::raw::*;
+use crate::*;
 
 /// FuturesReader implements [`oio::Read`] via [`AsyncRead`] + [`AsyncSeek`].
 pub struct TokioReader<R: AsyncRead + AsyncSeek> {
diff --git a/core/src/raw/oio/write/api.rs b/core/src/raw/oio/write/api.rs
index cebaffc70..136125657 100644
--- a/core/src/raw/oio/write/api.rs
+++ b/core/src/raw/oio/write/api.rs
@@ -22,7 +22,6 @@ use std::pin::Pin;
 use std::task::Context;
 use std::task::Poll;
 
-use async_trait::async_trait;
 use pin_project::pin_project;
 
 use crate::raw::*;
@@ -75,7 +74,6 @@ impl From<WriteOperation> for &'static str {
 pub type Writer = Box<dyn Write>;
 
 /// Write is the trait that OpenDAL returns to callers.
-#[async_trait]
 pub trait Write: Unpin + Send + Sync {
     /// Write given bytes into writer.
     ///
@@ -95,7 +93,6 @@ pub trait Write: Unpin + Send + Sync {
     fn poll_abort(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>>;
 }
 
-#[async_trait]
 impl Write for () {
     fn poll_write(&mut self, _: &mut Context<'_>, _: &dyn oio::WriteBuf) -> 
Poll<Result<usize>> {
         unimplemented!("write is required to be implemented for oio::Write")
@@ -119,7 +116,6 @@ impl Write for () {
 /// `Box<dyn Write>` won't implement `Write` automatically.
 ///
 /// To make Writer work as expected, we must add this impl.
-#[async_trait]
 impl<T: Write + ?Sized> Write for Box<T> {
     fn poll_write(&mut self, cx: &mut Context<'_>, bs: &dyn oio::WriteBuf) -> 
Poll<Result<usize>> {
         (**self).poll_write(cx, bs)
diff --git a/core/src/raw/oio/write/append_object_write.rs 
b/core/src/raw/oio/write/append_object_write.rs
index d5c030f74..93d182f40 100644
--- a/core/src/raw/oio/write/append_object_write.rs
+++ b/core/src/raw/oio/write/append_object_write.rs
@@ -77,7 +77,6 @@ impl<W: AppendObjectWrite> AppendObjectWriter<W> {
     }
 }
 
-#[async_trait]
 impl<W> oio::Write for AppendObjectWriter<W>
 where
     W: AppendObjectWrite,
diff --git a/core/src/raw/oio/write/exact_buf_write.rs 
b/core/src/raw/oio/write/exact_buf_write.rs
index 02ab9d926..122e342c1 100644
--- a/core/src/raw/oio/write/exact_buf_write.rs
+++ b/core/src/raw/oio/write/exact_buf_write.rs
@@ -102,7 +102,6 @@ mod tests {
         buf: Vec<u8>,
     }
 
-    #[async_trait]
     impl Write for MockWriter {
         fn poll_write(&mut self, _: &mut Context<'_>, bs: &dyn WriteBuf) -> 
Poll<Result<usize>> {
             debug!(
diff --git a/core/src/raw/oio/write/one_shot_write.rs 
b/core/src/raw/oio/write/one_shot_write.rs
index 4efb3655b..a015b98a1 100644
--- a/core/src/raw/oio/write/one_shot_write.rs
+++ b/core/src/raw/oio/write/one_shot_write.rs
@@ -68,25 +68,21 @@ impl<W: OneShotWrite> OneShotWriter<W> {
 #[async_trait]
 impl<W: OneShotWrite> oio::Write for OneShotWriter<W> {
     fn poll_write(&mut self, _: &mut Context<'_>, bs: &dyn oio::WriteBuf) -> 
Poll<Result<usize>> {
-        loop {
-            match &mut self.state {
-                State::Idle(_) => {
-                    return match &self.buffer {
-                        Some(_) => Poll::Ready(Err(Error::new(
-                            ErrorKind::Unsupported,
-                            "OneShotWriter doesn't support multiple write",
-                        ))),
-                        None => {
-                            let size = bs.remaining();
-                            let bs = bs.vectored_bytes(size);
-                            self.buffer = 
Some(oio::ChunkedBytes::from_vec(bs));
-                            Poll::Ready(Ok(size))
-                        }
-                    }
-                }
-                State::Write(_) => {
-                    unreachable!("OneShotWriter must not go into State::Write 
during poll_write")
+        match &mut self.state {
+            State::Idle(_) => match &self.buffer {
+                Some(_) => Poll::Ready(Err(Error::new(
+                    ErrorKind::Unsupported,
+                    "OneShotWriter doesn't support multiple write",
+                ))),
+                None => {
+                    let size = bs.remaining();
+                    let bs = bs.vectored_bytes(size);
+                    self.buffer = Some(oio::ChunkedBytes::from_vec(bs));
+                    Poll::Ready(Ok(size))
                 }
+            },
+            State::Write(_) => {
+                unreachable!("OneShotWriter must not go into State::Write 
during poll_write")
             }
         }
     }
diff --git a/core/src/raw/serde_util.rs b/core/src/raw/serde_util.rs
index 5edde1dde..09ab11cb4 100644
--- a/core/src/raw/serde_util.rs
+++ b/core/src/raw/serde_util.rs
@@ -15,12 +15,17 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use serde::de::value::{MapDeserializer, SeqDeserializer};
-use serde::de::{self, Deserializer, IntoDeserializer, Visitor};
 use std::collections::hash_map::IntoIter;
 use std::collections::HashMap;
 use std::iter::empty;
 
+use serde::de::value::MapDeserializer;
+use serde::de::value::SeqDeserializer;
+use serde::de::Deserializer;
+use serde::de::IntoDeserializer;
+use serde::de::Visitor;
+use serde::de::{self};
+
 use crate::*;
 
 /// Parse xml deserialize error into opendal::Error.
@@ -303,9 +308,10 @@ impl<'de> Deserializer<'de> for Pair {
 
 #[cfg(test)]
 mod tests {
-    use super::*;
     use serde::Deserialize;
 
+    use super::*;
+
     #[derive(Debug, Default, Deserialize, Eq, PartialEq)]
     #[serde(default)]
     #[non_exhaustive]
diff --git a/core/src/raw/tests/read.rs b/core/src/raw/tests/read.rs
index 526af48e5..6c6a3b3d2 100644
--- a/core/src/raw/tests/read.rs
+++ b/core/src/raw/tests/read.rs
@@ -15,12 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::io::SeekFrom;
+
+use bytes::Bytes;
+use rand::thread_rng;
+use rand::RngCore;
+use sha2::Digest;
+use sha2::Sha256;
+
 use crate::raw::*;
 use crate::*;
-use bytes::Bytes;
-use rand::{thread_rng, RngCore};
-use sha2::{Digest, Sha256};
-use std::io::SeekFrom;
 
 /// ReadAction represents a read action.
 #[derive(Debug, Clone, Eq, PartialEq)]
diff --git a/core/src/raw/tests/utils.rs b/core/src/raw/tests/utils.rs
index 2ecda5b79..9456b966c 100644
--- a/core/src/raw/tests/utils.rs
+++ b/core/src/raw/tests/utils.rs
@@ -15,12 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::*;
-use once_cell::sync::Lazy;
 use std::collections::HashMap;
 use std::env;
 use std::str::FromStr;
 
+use once_cell::sync::Lazy;
+
+use crate::*;
+
 /// TEST_RUNTIME is the runtime used for running tests.
 pub static TEST_RUNTIME: Lazy<tokio::runtime::Runtime> = Lazy::new(|| {
     tokio::runtime::Builder::new_multi_thread()
diff --git a/core/src/raw/tests/write.rs b/core/src/raw/tests/write.rs
index 511d5f143..d41ac28a0 100644
--- a/core/src/raw/tests/write.rs
+++ b/core/src/raw/tests/write.rs
@@ -15,9 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use bytes::{Bytes, BytesMut};
-use rand::{thread_rng, RngCore};
-use sha2::{Digest, Sha256};
+use bytes::Bytes;
+use bytes::BytesMut;
+use rand::thread_rng;
+use rand::RngCore;
+use sha2::Digest;
+use sha2::Sha256;
 
 /// WriteAction represents a read action.
 #[derive(Debug, Clone, Eq, PartialEq)]
diff --git a/core/src/services/alluxio/backend.rs 
b/core/src/services/alluxio/backend.rs
index 64db4461f..8cbf902d4 100644
--- a/core/src/services/alluxio/backend.rs
+++ b/core/src/services/alluxio/backend.rs
@@ -24,12 +24,12 @@ use async_trait::async_trait;
 use log::debug;
 use serde::Deserialize;
 
-use crate::raw::*;
-use crate::*;
-
+use super::core::AlluxioCore;
+use super::lister::AlluxioLister;
 use super::writer::AlluxioWriter;
 use super::writer::AlluxioWriters;
-use super::{core::AlluxioCore, lister::AlluxioLister};
+use crate::raw::*;
+use crate::*;
 
 /// Config for alluxio services support.
 #[derive(Default, Deserialize)]
@@ -198,8 +198,6 @@ impl Accessor for AlluxioBackend {
                 read: true,
 
                 write: true,
-                /// https://github.com/Alluxio/alluxio/issues/8212
-                write_can_append: false,
                 write_can_multi: true,
 
                 create_dir: true,
diff --git a/core/src/services/alluxio/core.rs 
b/core/src/services/alluxio/core.rs
index a68e0bcdc..111f35718 100644
--- a/core/src/services/alluxio/core.rs
+++ b/core/src/services/alluxio/core.rs
@@ -18,19 +18,17 @@
 use std::fmt::Debug;
 use std::fmt::Formatter;
 
-use http::Request;
-
 use http::header::RANGE;
+use http::Request;
 use http::Response;
 use http::StatusCode;
+use serde::Deserialize;
+use serde::Serialize;
 
-use serde::{Deserialize, Serialize};
-
+use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-use super::error::parse_error;
-
 #[derive(Debug, Serialize)]
 struct CreateFileRequest {
     #[serde(skip_serializing_if = "Option::is_none")]
diff --git a/core/src/services/alluxio/error.rs 
b/core/src/services/alluxio/error.rs
index 0f19d7a29..d07fece31 100644
--- a/core/src/services/alluxio/error.rs
+++ b/core/src/services/alluxio/error.rs
@@ -62,10 +62,11 @@ pub async fn parse_error(resp: Response<IncomingAsyncBody>) 
-> Result<Error> {
 
 #[cfg(test)]
 mod tests {
-    use super::*;
     use futures::stream;
     use http::StatusCode;
 
+    use super::*;
+
     /// Error response example is from 
https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
     #[tokio::test]
     async fn test_parse_error() {
diff --git a/core/src/services/alluxio/writer.rs 
b/core/src/services/alluxio/writer.rs
index 404304d84..a45fdbdf7 100644
--- a/core/src/services/alluxio/writer.rs
+++ b/core/src/services/alluxio/writer.rs
@@ -23,13 +23,11 @@ use std::task::Poll;
 use async_trait::async_trait;
 use futures::future::BoxFuture;
 
+use super::core::AlluxioCore;
 use crate::raw::oio::WriteBuf;
 use crate::raw::*;
-
 use crate::*;
 
-use super::core::AlluxioCore;
-
 pub type AlluxioWriters = AlluxioWriter;
 
 pub struct AlluxioWriter {
diff --git a/core/src/services/azfile/backend.rs 
b/core/src/services/azfile/backend.rs
index 3b87cb1f0..e28e1acd6 100644
--- a/core/src/services/azfile/backend.rs
+++ b/core/src/services/azfile/backend.rs
@@ -27,14 +27,13 @@ use reqsign::AzureStorageConfig;
 use reqsign::AzureStorageLoader;
 use reqsign::AzureStorageSigner;
 
-use crate::raw::*;
-use crate::services::azfile::lister::AzfileLister;
-use crate::*;
-
 use super::core::AzfileCore;
 use super::error::parse_error;
 use super::writer::AzfileWriter;
 use super::writer::AzfileWriters;
+use crate::raw::*;
+use crate::services::azfile::lister::AzfileLister;
+use crate::*;
 
 /// Default endpoint of Azure File services.
 const DEFAULT_AZFILE_ENDPOINT_SUFFIX: &str = "file.core.windows.net";
diff --git a/core/src/services/azfile/lister.rs 
b/core/src/services/azfile/lister.rs
index cdd8fc980..bb9f8f73b 100644
--- a/core/src/services/azfile/lister.rs
+++ b/core/src/services/azfile/lister.rs
@@ -22,11 +22,10 @@ use http::StatusCode;
 use quick_xml::de::from_str;
 use serde::Deserialize;
 
-use crate::raw::*;
-use crate::*;
-
 use super::core::AzfileCore;
 use super::error::parse_error;
+use crate::raw::*;
+use crate::*;
 
 pub struct AzfileLister {
     core: Arc<AzfileCore>,
diff --git a/core/src/services/azfile/writer.rs 
b/core/src/services/azfile/writer.rs
index 4f903a9b2..e6e199997 100644
--- a/core/src/services/azfile/writer.rs
+++ b/core/src/services/azfile/writer.rs
@@ -20,11 +20,10 @@ use std::sync::Arc;
 use async_trait::async_trait;
 use http::StatusCode;
 
-use crate::raw::*;
-use crate::*;
-
 use super::core::AzfileCore;
 use super::error::parse_error;
+use crate::raw::*;
+use crate::*;
 
 pub type AzfileWriters =
     oio::TwoWaysWriter<oio::OneShotWriter<AzfileWriter>, 
oio::AppendObjectWriter<AzfileWriter>>;
diff --git a/core/src/services/cloudflare_kv/error.rs 
b/core/src/services/cloudflare_kv/error.rs
index 10f4c4aaa..eb323f9ed 100644
--- a/core/src/services/cloudflare_kv/error.rs
+++ b/core/src/services/cloudflare_kv/error.rs
@@ -18,17 +18,15 @@
 use bytes::Buf;
 use http::Response;
 use http::StatusCode;
+use serde_json::de;
 
+use super::backend::CfKvError;
+use super::backend::CfKvResponse;
 use crate::raw::*;
 use crate::Error;
 use crate::ErrorKind;
 use crate::Result;
 
-use serde_json::de;
-
-use super::backend::CfKvError;
-use super::backend::CfKvResponse;
-
 /// Parse error response into Error.
 pub(crate) async fn parse_error(resp: Response<IncomingAsyncBody>) -> 
Result<Error> {
     let (parts, body) = resp.into_parts();
diff --git a/core/src/services/d1/backend.rs b/core/src/services/d1/backend.rs
index 15e8d2854..5555c6bd5 100644
--- a/core/src/services/d1/backend.rs
+++ b/core/src/services/d1/backend.rs
@@ -25,14 +25,13 @@ use http::Request;
 use http::StatusCode;
 use serde_json::Value;
 
+use super::error::parse_error;
+use super::model::D1Response;
 use crate::raw::adapters::kv;
 use crate::raw::*;
 use crate::ErrorKind;
 use crate::*;
 
-use super::error::parse_error;
-use super::model::D1Response;
-
 #[doc = include_str!("docs.md")]
 #[derive(Default)]
 pub struct D1Builder {
diff --git a/core/src/services/d1/error.rs b/core/src/services/d1/error.rs
index 2a2f75de4..96ac072e0 100644
--- a/core/src/services/d1/error.rs
+++ b/core/src/services/d1/error.rs
@@ -18,17 +18,15 @@
 use bytes::Buf;
 use http::Response;
 use http::StatusCode;
+use serde_json::de;
 
+use super::model::D1Error;
+use super::model::D1Response;
 use crate::raw::*;
 use crate::Error;
 use crate::ErrorKind;
 use crate::Result;
 
-use serde_json::de;
-
-use super::model::D1Error;
-use super::model::D1Response;
-
 /// Parse error response into Error.
 pub async fn parse_error(resp: Response<IncomingAsyncBody>) -> Result<Error> {
     let (parts, body) = resp.into_parts();
diff --git a/core/src/services/d1/model.rs b/core/src/services/d1/model.rs
index c086af0d5..fee83bb13 100644
--- a/core/src/services/d1/model.rs
+++ b/core/src/services/d1/model.rs
@@ -15,12 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use crate::Error;
-use bytes::Bytes;
-use serde::{Deserialize, Serialize};
-use serde_json::{Map, Value};
 use std::fmt::Debug;
 
+use bytes::Bytes;
+use serde::Deserialize;
+use serde::Serialize;
+use serde_json::Map;
+use serde_json::Value;
+
+use crate::Error;
+
 /// response data from d1
 #[derive(Deserialize, Debug)]
 pub struct D1Response {
diff --git a/core/src/services/dbfs/backend.rs 
b/core/src/services/dbfs/backend.rs
index 8da90e2b7..4d85c3aad 100644
--- a/core/src/services/dbfs/backend.rs
+++ b/core/src/services/dbfs/backend.rs
@@ -25,14 +25,13 @@ use http::StatusCode;
 use log::debug;
 use serde::Deserialize;
 
-use crate::raw::*;
-use crate::*;
-
 use super::core::DbfsCore;
 use super::error::parse_error;
 use super::lister::DbfsLister;
 use super::reader::DbfsReader;
 use super::writer::DbfsWriter;
+use crate::raw::*;
+use crate::*;
 
 /// [Dbfs](https://docs.databricks.com/api/azure/workspace/dbfs)'s REST API 
support.
 #[doc = include_str!("docs.md")]
diff --git a/core/src/services/dbfs/core.rs b/core/src/services/dbfs/core.rs
index 44e20e571..80541d31e 100644
--- a/core/src/services/dbfs/core.rs
+++ b/core/src/services/dbfs/core.rs
@@ -26,11 +26,10 @@ use http::Response;
 use http::StatusCode;
 use serde_json::json;
 
+use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-use super::error::parse_error;
-
 pub struct DbfsCore {
     pub root: String,
     pub endpoint: String,
diff --git a/core/src/services/dbfs/lister.rs b/core/src/services/dbfs/lister.rs
index 254afdc58..e86dd3381 100644
--- a/core/src/services/dbfs/lister.rs
+++ b/core/src/services/dbfs/lister.rs
@@ -21,12 +21,11 @@ use async_trait::async_trait;
 use http::StatusCode;
 use serde::Deserialize;
 
+use super::error::parse_error;
 use crate::raw::*;
 use crate::services::dbfs::core::DbfsCore;
 use crate::*;
 
-use super::error::parse_error;
-
 pub struct DbfsLister {
     core: Arc<DbfsCore>,
     path: String,
diff --git a/core/src/services/dbfs/reader.rs b/core/src/services/dbfs/reader.rs
index a74ddf719..1cc56ea89 100644
--- a/core/src/services/dbfs/reader.rs
+++ b/core/src/services/dbfs/reader.rs
@@ -31,7 +31,6 @@ use futures::future::BoxFuture;
 use serde::Deserialize;
 
 use super::core::DbfsCore;
-
 use crate::raw::*;
 use crate::*;
 
diff --git a/core/src/services/dbfs/writer.rs b/core/src/services/dbfs/writer.rs
index 04dbe4611..f2db1124f 100644
--- a/core/src/services/dbfs/writer.rs
+++ b/core/src/services/dbfs/writer.rs
@@ -20,13 +20,12 @@ use std::sync::Arc;
 use async_trait::async_trait;
 use http::StatusCode;
 
+use super::error::parse_error;
 use crate::raw::oio::WriteBuf;
 use crate::raw::*;
 use crate::services::dbfs::core::DbfsCore;
 use crate::*;
 
-use super::error::parse_error;
-
 pub struct DbfsWriter {
     core: Arc<DbfsCore>,
     path: String,
diff --git a/core/src/services/dropbox/backend.rs 
b/core/src/services/dropbox/backend.rs
index 6aef1c9f7..78a552141 100644
--- a/core/src/services/dropbox/backend.rs
+++ b/core/src/services/dropbox/backend.rs
@@ -26,13 +26,12 @@ use http::StatusCode;
 use once_cell::sync::Lazy;
 use serde::Deserialize;
 
-use crate::raw::*;
-use crate::services::dropbox::error::DropboxErrorResponse;
-use crate::*;
-
 use super::core::DropboxCore;
 use super::error::parse_error;
 use super::writer::DropboxWriter;
+use crate::raw::*;
+use crate::services::dropbox::error::DropboxErrorResponse;
+use crate::*;
 
 static BACKOFF: Lazy<ExponentialBuilder> = Lazy::new(|| {
     ExponentialBuilder::default()
diff --git a/core/src/services/fs/lister.rs b/core/src/services/fs/lister.rs
index 0dd3dcf56..c101c08d6 100644
--- a/core/src/services/fs/lister.rs
+++ b/core/src/services/fs/lister.rs
@@ -18,7 +18,9 @@
 use std::fs::FileType;
 use std::path::Path;
 use std::path::PathBuf;
-use std::task::{ready, Context, Poll};
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
 
 use async_trait::async_trait;
 use futures::future::BoxFuture;
diff --git a/core/src/services/ftp/backend.rs b/core/src/services/ftp/backend.rs
index 23570ac46..c5ad50f05 100644
--- a/core/src/services/ftp/backend.rs
+++ b/core/src/services/ftp/backend.rs
@@ -28,6 +28,7 @@ use futures::AsyncRead;
 use futures::AsyncReadExt;
 use http::Uri;
 use log::debug;
+use serde::Deserialize;
 use suppaftp::async_native_tls::TlsConnector;
 use suppaftp::list::File;
 use suppaftp::types::FileType;
@@ -46,8 +47,6 @@ use crate::raw::*;
 use crate::services::ftp::writer::FtpWriters;
 use crate::*;
 
-use serde::Deserialize;
-
 /// Config for Ftpservices support.
 #[derive(Default, Deserialize)]
 #[serde(default)]
diff --git a/core/src/services/ftp/lister.rs b/core/src/services/ftp/lister.rs
index aa9a902bf..099fee930 100644
--- a/core/src/services/ftp/lister.rs
+++ b/core/src/services/ftp/lister.rs
@@ -17,7 +17,8 @@
 
 use std::str;
 use std::str::FromStr;
-use std::task::{Context, Poll};
+use std::task::Context;
+use std::task::Poll;
 use std::vec::IntoIter;
 
 use async_trait::async_trait;
diff --git a/core/src/services/gridfs/backend.rs 
b/core/src/services/gridfs/backend.rs
index 606b464d3..a98924214 100644
--- a/core/src/services/gridfs/backend.rs
+++ b/core/src/services/gridfs/backend.rs
@@ -15,12 +15,17 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::fmt::Debug;
+use std::fmt::Formatter;
+
 use async_trait::async_trait;
-use futures::{AsyncWriteExt, StreamExt};
+use futures::AsyncWriteExt;
+use futures::StreamExt;
 use mongodb::bson::doc;
-use mongodb::options::{ClientOptions, GridFsBucketOptions, GridFsFindOptions};
+use mongodb::options::ClientOptions;
+use mongodb::options::GridFsBucketOptions;
+use mongodb::options::GridFsFindOptions;
 use mongodb::GridFsBucket;
-use std::fmt::{Debug, Formatter};
 use tokio::sync::OnceCell;
 
 use crate::raw::adapters::kv;
diff --git a/core/src/services/hdfs/lister.rs b/core/src/services/hdfs/lister.rs
index 50ba0ba4e..404d159f5 100644
--- a/core/src/services/hdfs/lister.rs
+++ b/core/src/services/hdfs/lister.rs
@@ -15,8 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::task::Context;
+use std::task::Poll;
+
 use async_trait::async_trait;
-use std::task::{Context, Poll};
 
 use crate::raw::*;
 use crate::EntryMode;
diff --git a/core/src/services/http/backend.rs 
b/core/src/services/http/backend.rs
index b10eba4a8..7e1b8b334 100644
--- a/core/src/services/http/backend.rs
+++ b/core/src/services/http/backend.rs
@@ -27,13 +27,12 @@ use http::Request;
 use http::Response;
 use http::StatusCode;
 use log::debug;
+use serde::Deserialize;
 
 use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-use serde::Deserialize;
-
 /// Config for Http service support.
 #[derive(Default, Deserialize)]
 #[serde(default)]
diff --git a/core/src/services/libsql/backend.rs 
b/core/src/services/libsql/backend.rs
index 6c078b441..805bbce8e 100644
--- a/core/src/services/libsql/backend.rs
+++ b/core/src/services/libsql/backend.rs
@@ -21,21 +21,28 @@ use std::str;
 
 use async_trait::async_trait;
 use bytes::Bytes;
-use hrana_client_proto::pipeline::{
-    ClientMsg, Response, ServerMsg, StreamExecuteReq, StreamExecuteResult, 
StreamRequest,
-    StreamResponse, StreamResponseError, StreamResponseOk,
-};
+use hrana_client_proto::pipeline::ClientMsg;
+use hrana_client_proto::pipeline::Response;
+use hrana_client_proto::pipeline::ServerMsg;
+use hrana_client_proto::pipeline::StreamExecuteReq;
+use hrana_client_proto::pipeline::StreamExecuteResult;
+use hrana_client_proto::pipeline::StreamRequest;
+use hrana_client_proto::pipeline::StreamResponse;
+use hrana_client_proto::pipeline::StreamResponseError;
+use hrana_client_proto::pipeline::StreamResponseOk;
 use hrana_client_proto::Error as PipelineError;
-use hrana_client_proto::{Stmt, StmtResult, Value};
-use http::{Request, Uri};
+use hrana_client_proto::Stmt;
+use hrana_client_proto::StmtResult;
+use hrana_client_proto::Value;
+use http::Request;
+use http::Uri;
 use serde::Deserialize;
 
+use super::error::parse_error;
 use crate::raw::adapters::kv;
 use crate::raw::*;
 use crate::*;
 
-use super::error::parse_error;
-
 /// Config for Libsqlservices support.
 #[derive(Default, Deserialize)]
 #[serde(default)]
diff --git a/core/src/services/mongodb/backend.rs 
b/core/src/services/mongodb/backend.rs
index cafed8fb3..76bdfd011 100644
--- a/core/src/services/mongodb/backend.rs
+++ b/core/src/services/mongodb/backend.rs
@@ -15,11 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::fmt::Debug;
+use std::fmt::Formatter;
+
 use async_trait::async_trait;
+use mongodb::bson::doc;
 use mongodb::bson::Binary;
-use mongodb::bson::{doc, Document};
-use mongodb::options::{ClientOptions, UpdateOptions};
-use std::fmt::{Debug, Formatter};
+use mongodb::bson::Document;
+use mongodb::options::ClientOptions;
+use mongodb::options::UpdateOptions;
 use tokio::sync::OnceCell;
 
 use crate::raw::adapters::kv;
diff --git a/core/src/services/mysql/backend.rs 
b/core/src/services/mysql/backend.rs
index e3b5af5b6..cdc4dd959 100644
--- a/core/src/services/mysql/backend.rs
+++ b/core/src/services/mysql/backend.rs
@@ -86,7 +86,6 @@ impl MysqlBuilder {
     /// - `mysql://user:password@localhost:3306/db`
     ///
     /// For more information, please refer to [mysql 
client](https://dev.mysql.com/doc/refman/8.0/en/connecting-using-uri-or-key-value-pairs.html)
-    ///
     pub fn connection_string(&mut self, v: &str) -> &mut Self {
         if !v.is_empty() {
             self.config.connection_string = Some(v.to_string());
diff --git a/core/src/services/oss/core.rs b/core/src/services/oss/core.rs
index c90439de1..fad417c4c 100644
--- a/core/src/services/oss/core.rs
+++ b/core/src/services/oss/core.rs
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+use std::fmt::Debug;
+use std::fmt::Formatter;
+use std::fmt::Write;
+use std::time::Duration;
+
 use bytes::Bytes;
 use http::header::CACHE_CONTROL;
 use http::header::CONTENT_DISPOSITION;
@@ -32,10 +37,6 @@ use reqsign::AliyunLoader;
 use reqsign::AliyunOssSigner;
 use serde::Deserialize;
 use serde::Serialize;
-use std::fmt::Debug;
-use std::fmt::Formatter;
-use std::fmt::Write;
-use std::time::Duration;
 
 use crate::raw::*;
 use crate::*;
diff --git a/core/src/services/sftp/backend.rs 
b/core/src/services/sftp/backend.rs
index 47d680ef2..69630025c 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -30,6 +30,7 @@ use openssh::SessionBuilder;
 use openssh_sftp_client::file::TokioCompatFile;
 use openssh_sftp_client::Sftp;
 use openssh_sftp_client::SftpOptions;
+use serde::Deserialize;
 
 use super::error::is_not_found;
 use super::error::is_sftp_protocol_error;
@@ -38,8 +39,6 @@ use super::writer::SftpWriter;
 use crate::raw::*;
 use crate::*;
 
-use serde::Deserialize;
-
 /// Config for Sftpservices support.
 #[derive(Default, Deserialize)]
 #[serde(default)]
diff --git a/core/src/services/sftp/lister.rs b/core/src/services/sftp/lister.rs
index eeac58af8..14d0b4843 100644
--- a/core/src/services/sftp/lister.rs
+++ b/core/src/services/sftp/lister.rs
@@ -16,7 +16,9 @@
 // under the License.
 
 use std::pin::Pin;
-use std::task::{ready, Context, Poll};
+use std::task::ready;
+use std::task::Context;
+use std::task::Poll;
 
 use async_trait::async_trait;
 use futures::StreamExt;
diff --git a/core/src/services/sqlite/backend.rs 
b/core/src/services/sqlite/backend.rs
index 1d6a57432..6cf2df81d 100644
--- a/core/src/services/sqlite/backend.rs
+++ b/core/src/services/sqlite/backend.rs
@@ -20,7 +20,8 @@ use std::fmt::Debug;
 use std::fmt::Formatter;
 
 use async_trait::async_trait;
-use rusqlite::{params, Connection};
+use rusqlite::params;
+use rusqlite::Connection;
 use serde::Deserialize;
 use tokio::task;
 
diff --git a/core/src/services/swift/error.rs b/core/src/services/swift/error.rs
index 48c482ca5..836787ec0 100644
--- a/core/src/services/swift/error.rs
+++ b/core/src/services/swift/error.rs
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use bytes::{Buf, Bytes};
+use bytes::Buf;
+use bytes::Bytes;
 use http::Response;
 use http::StatusCode;
 use quick_xml::de;
diff --git a/core/src/types/operator/operator.rs 
b/core/src/types/operator/operator.rs
index 4461edce8..0d24728f5 100644
--- a/core/src/types/operator/operator.rs
+++ b/core/src/types/operator/operator.rs
@@ -26,7 +26,8 @@ use futures::TryStreamExt;
 
 use super::BlockingOperator;
 use crate::operator_futures::*;
-use crate::raw::oio::{ReadExt, WriteExt};
+use crate::raw::oio::ReadExt;
+use crate::raw::oio::WriteExt;
 use crate::raw::*;
 use crate::*;
 
diff --git a/core/src/types/scheme.rs b/core/src/types/scheme.rs
index f0bf62b73..54ea475f8 100644
--- a/core/src/types/scheme.rs
+++ b/core/src/types/scheme.rs
@@ -158,7 +158,7 @@ impl Scheme {
     ///
     /// let enabled_schemes = Scheme::enabled();
     /// if !enabled_schemes.contains(&Scheme::Memory) {
-    ///    panic!("s3 support is not enabled")
+    ///     panic!("s3 support is not enabled")
     /// }
     /// ```
     pub fn enabled() -> HashSet<Scheme> {
diff --git a/core/tests/behavior/blocking_copy.rs 
b/core/tests/behavior/blocking_copy.rs
index 6a6165f26..5d4a1a45a 100644
--- a/core/tests/behavior/blocking_copy.rs
+++ b/core/tests/behavior/blocking_copy.rs
@@ -16,7 +16,8 @@
 // under the License.
 
 use anyhow::Result;
-use sha2::{Digest, Sha256};
+use sha2::Digest;
+use sha2::Sha256;
 
 use crate::*;
 
diff --git a/core/tests/behavior/blocking_rename.rs 
b/core/tests/behavior/blocking_rename.rs
index f61f9401e..378299eca 100644
--- a/core/tests/behavior/blocking_rename.rs
+++ b/core/tests/behavior/blocking_rename.rs
@@ -16,7 +16,8 @@
 // under the License.
 
 use anyhow::Result;
-use sha2::{Digest, Sha256};
+use sha2::Digest;
+use sha2::Sha256;
 
 use crate::*;
 
diff --git a/core/tests/behavior/copy.rs b/core/tests/behavior/copy.rs
index f5fffd094..5a46776f7 100644
--- a/core/tests/behavior/copy.rs
+++ b/core/tests/behavior/copy.rs
@@ -16,7 +16,8 @@
 // under the License.
 
 use anyhow::Result;
-use sha2::{Digest, Sha256};
+use sha2::Digest;
+use sha2::Sha256;
 
 use crate::*;
 
diff --git a/core/tests/behavior/fuzz.rs b/core/tests/behavior/fuzz.rs
index 772a2c181..cc97c0ea4 100644
--- a/core/tests/behavior/fuzz.rs
+++ b/core/tests/behavior/fuzz.rs
@@ -19,7 +19,8 @@ use std::io::SeekFrom;
 use std::vec;
 
 use anyhow::Result;
-use opendal::raw::tests::{ReadAction, ReadChecker};
+use opendal::raw::tests::ReadAction;
+use opendal::raw::tests::ReadChecker;
 use opendal::raw::BytesRange;
 
 use crate::*;
@@ -110,25 +111,8 @@ pub async fn test_fuzz_issue_2717(op: Operator) -> 
Result<()> {
 /// FuzzInput {
 ///     path: "06ae5d93-c0e9-43f2-ae5a-225cfaaa40a0",
 ///     size: 1,
-///     range: BytesRange(
-///         Some(
-///             0,
-///         ),
-///         None,
-///     ),
-///     actions: [
-///         Seek(
-///             Current(
-///                 1,
-///             ),
-///         ),
-///         Next,
-///         Seek(
-///             End(
-///                 -1,
-///             ),
-///         ),
-///     ],
+///     range: BytesRange(Some(0), None),
+///     actions: [Seek(Current(1)), Next, Seek(End(-1))],
 /// }
 /// ```
 pub async fn test_fuzz_pr_3395_case_1(op: Operator) -> Result<()> {
@@ -148,26 +132,8 @@ pub async fn test_fuzz_pr_3395_case_1(op: Operator) -> 
Result<()> {
 /// FuzzInput {
 ///     path: "e6056989-7c7c-4075-b975-5ae380884333",
 ///     size: 1,
-///     range: BytesRange(
-///         Some(
-///             0,
-///         ),
-///         None,
-///     ),
-///     actions: [
-///         Next,
-///         Seek(
-///             Current(
-///                 1,
-///             ),
-///         ),
-///         Next,
-///         Seek(
-///             End(
-///                 0,
-///             ),
-///         ),
-///     ],
+///     range: BytesRange(Some(0), None),
+///     actions: [Next, Seek(Current(1)), Next, Seek(End(0))],
 /// }
 /// ```
 pub async fn test_fuzz_pr_3395_case_2(op: Operator) -> Result<()> {
diff --git a/core/tests/behavior/rename.rs b/core/tests/behavior/rename.rs
index 29dd3de6a..eb0a74477 100644
--- a/core/tests/behavior/rename.rs
+++ b/core/tests/behavior/rename.rs
@@ -16,7 +16,8 @@
 // under the License.
 
 use anyhow::Result;
-use sha2::{Digest, Sha256};
+use sha2::Digest;
+use sha2::Sha256;
 
 use crate::*;
 
diff --git a/core/tests/behavior/utils.rs b/core/tests/behavior/utils.rs
index 60302a91a..0bb0ed607 100644
--- a/core/tests/behavior/utils.rs
+++ b/core/tests/behavior/utils.rs
@@ -26,14 +26,13 @@ use futures::Future;
 use libtest_mimic::Failed;
 use libtest_mimic::Trial;
 use log::debug;
+use opendal::raw::tests::TEST_RUNTIME;
 use opendal::*;
 use rand::distributions::uniform::SampleRange;
 use rand::prelude::*;
 use sha2::Digest;
 use sha2::Sha256;
 
-use opendal::raw::tests::TEST_RUNTIME;
-
 pub fn gen_bytes_with_range(range: impl SampleRange<usize>) -> (Vec<u8>, 
usize) {
     let mut rng = thread_rng();
 

Reply via email to