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 dd666ba380 ci: Fix foundationdb not setup for unit test (#4370)
dd666ba380 is described below

commit dd666ba380aaa878229bdef1c18b5e54b78b3606
Author: Xuanwo <[email protected]>
AuthorDate: Fri Mar 15 19:00:01 2024 +0800

    ci: Fix foundationdb not setup for unit test (#4370)
    
    * fix ci ocre
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix icloud test
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix all unit tests
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix doc tests
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix ci
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix ci
    
    Signed-off-by: Xuanwo <[email protected]>
    
    ---------
    
    Signed-off-by: Xuanwo <[email protected]>
---
 .github/actions/setup/action.yaml            |   2 +-
 .github/workflows/ci_core.yml                |  11 ++-
 bin/ofs/Cargo.lock                           |  58 ++---------
 bin/oli/Cargo.lock                           |  10 +-
 bindings/c/include/opendal.h                 |   6 +-
 core/Cargo.lock                              |   4 +
 core/src/layers/async_backtrace.rs           |   4 +-
 core/src/layers/await_tree.rs                |   2 +-
 core/src/layers/blocking.rs                  |   6 +-
 core/src/layers/chaos.rs                     |   2 +-
 core/src/layers/concurrent_limit.rs          |   2 +-
 core/src/layers/dtrace.rs                    |   3 +-
 core/src/layers/logging.rs                   |   2 +-
 core/src/layers/madsim.rs                    |   2 +-
 core/src/layers/metrics.rs                   |   2 +-
 core/src/layers/minitrace.rs                 |   6 +-
 core/src/layers/oteltrace.rs                 |   2 +-
 core/src/layers/prometheus.rs                |   2 +-
 core/src/layers/prometheus_client.rs         |   2 +-
 core/src/layers/retry.rs                     |   8 +-
 core/src/layers/throttle.rs                  |   3 +-
 core/src/layers/timeout.rs                   |   2 +-
 core/src/layers/tracing.rs                   |   6 +-
 core/src/services/alluxio/docs.md            |   2 +-
 core/src/services/atomicserver/docs.md       |   2 +-
 core/src/services/azblob/docs.md             |   2 +-
 core/src/services/azdls/docs.md              |   2 +-
 core/src/services/azfile/docs.md             |   2 +-
 core/src/services/b2/docs.md                 |   6 +-
 core/src/services/cacache/docs.md            |   2 +-
 core/src/services/chainsafe/docs.md          |   2 +-
 core/src/services/cos/docs.md                |   2 +-
 core/src/services/d1/docs.md                 |   2 +-
 core/src/services/dbfs/docs.md               |   2 +-
 core/src/services/dropbox/docs.md            |   2 +-
 core/src/services/etcd/docs.md               |   2 +-
 core/src/services/foundationdb/docs.md       |   2 +-
 core/src/services/fs/docs.md                 |   2 +-
 core/src/services/ftp/docs.md                |   2 +-
 core/src/services/gcs/docs.md                |   4 +-
 core/src/services/gdrive/docs.md             |   2 +-
 core/src/services/github/docs.md             |   4 +-
 core/src/services/gridfs/docs.md             |   2 +-
 core/src/services/hdfs/backend.rs            |   2 +-
 core/src/services/hdfs/docs.md               |   4 +-
 core/src/services/http/docs.md               |   2 +-
 core/src/services/huggingface/docs.md        |   2 +-
 core/src/services/icloud/core.rs             |   7 +-
 core/src/services/icloud/docs.md             |   6 +-
 core/src/services/ipfs/docs.md               |   2 +-
 core/src/services/ipfs/ipld.rs               |   2 +-
 core/src/services/koofr/docs.md              |   2 +-
 core/src/services/libsql/docs.md             |   2 +-
 core/src/services/memcached/docs.md          |   4 +-
 core/src/services/memory/docs.md             |   2 +-
 core/src/services/moka/docs.md               |   2 +-
 core/src/services/mongodb/docs.md            |   2 +-
 core/src/services/mysql/docs.md              |   2 +-
 core/src/services/obs/docs.md                |   4 +-
 core/src/services/onedrive/docs.md           |   2 +-
 core/src/services/onedrive/graph_model.rs    |   2 +-
 core/src/services/oss/docs.md                |   4 +-
 core/src/services/pcloud/docs.md             |   2 +-
 core/src/services/persy/docs.md              |   2 +-
 core/src/services/postgresql/docs.md         |   2 +-
 core/src/services/redb/docs.md               |   2 +-
 core/src/services/redis/docs.md              |   2 +-
 core/src/services/rocksdb/docs.md            |   2 +-
 core/src/services/s3/docs.md                 |  10 +-
 core/src/services/seafile/docs.md            |   2 +-
 core/src/services/sftp/docs.md               |   2 +-
 core/src/services/sled/docs.md               |   2 +-
 core/src/services/sqlite/docs.md             |   2 +-
 core/src/services/supabase/docs.md           |   4 +-
 core/src/services/swift/docs.md              |   2 +-
 core/src/services/tikv/docs.md               |   4 +-
 core/src/services/upyun/docs.md              |   2 +-
 core/src/services/vercel_blob/docs.md        |   2 +-
 core/src/services/vercel_blob/error.rs       |   4 +-
 core/src/services/webdav/docs.md             |   4 +-
 core/src/services/webhdfs/docs.md            |   2 +-
 core/src/services/yandex_disk/docs.md        |   2 +-
 core/src/types/entry.rs                      |   3 -
 core/src/types/error.rs                      |   1 -
 core/src/types/operator/blocking_operator.rs |  19 ++--
 core/src/types/operator/builder.rs           |  18 ++--
 core/src/types/operator/operator.rs          | 143 ++++++++-------------------
 core/src/types/scheme.rs                     |   2 +-
 core/src/types/writer.rs                     |   6 +-
 89 files changed, 198 insertions(+), 300 deletions(-)

diff --git a/.github/actions/setup/action.yaml 
b/.github/actions/setup/action.yaml
index 33d6ff1af5..181e65f8b1 100644
--- a/.github/actions/setup/action.yaml
+++ b/.github/actions/setup/action.yaml
@@ -31,7 +31,7 @@ inputs:
   github-token:
     description: "Github Token"
     default: ""
-
+  
 runs:
   using: "composite"
   steps:
diff --git a/.github/workflows/ci_core.yml b/.github/workflows/ci_core.yml
index 55535b5d19..6ae06d1ad1 100644
--- a/.github/workflows/ci_core.yml
+++ b/.github/workflows/ci_core.yml
@@ -26,7 +26,7 @@ on:
       - main
     paths:
       - "core/**"
-      - ".github/workflows/core.yml"
+      - ".github/workflows/ci_core.yml"
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
@@ -255,10 +255,15 @@ jobs:
         with:
           need-protoc: true
           need-rocksdb: true
+          need-foundationdb: true
+          need-nextest: true
           github-token: ${{ secrets.GITHUB_TOKEN }}
 
       - name: Test
         working-directory: core
-        run: cargo test --no-fail-fast --all-features
+        run: |
+          cargo nextest run --no-fail-fast --all-features
+          cargo test --doc --all-features   
         env:
-          LD_LIBRARY_PATH: ${{ env.JAVA_HOME }}/lib/server:${{ 
env.LD_LIBRARY_PATH }}
+          # Add rocksdb and java lib path to LD_LIBRARY_PATH
+          LD_LIBRARY_PATH: /tmp/rocksdb/lib:${{ env.JAVA_HOME 
}}/lib/server:${{ env.LD_LIBRARY_PATH }}
diff --git a/bin/ofs/Cargo.lock b/bin/ofs/Cargo.lock
index aefd3cfc1d..fe9aa95626 100644
--- a/bin/ofs/Cargo.lock
+++ b/bin/ofs/Cargo.lock
@@ -950,12 +950,6 @@ dependencies = [
  "uuid",
 ]
 
-[[package]]
-name = "openssl-probe"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
-
 [[package]]
 name = "ordered-multimap"
 version = "0.7.1"
@@ -1149,7 +1143,6 @@ dependencies = [
  "percent-encoding",
  "pin-project-lite",
  "rustls",
- "rustls-native-certs",
  "rustls-pemfile",
  "serde",
  "serde_json",
@@ -1165,6 +1158,7 @@ dependencies = [
  "wasm-bindgen-futures",
  "wasm-streams",
  "web-sys",
+ "webpki-roots",
  "winreg",
 ]
 
@@ -1223,18 +1217,6 @@ dependencies = [
  "sct",
 ]
 
-[[package]]
-name = "rustls-native-certs"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
-dependencies = [
- "openssl-probe",
- "rustls-pemfile",
- "schannel",
- "security-framework",
-]
-
 [[package]]
 name = "rustls-pemfile"
 version = "1.0.4"
@@ -1260,15 +1242,6 @@ version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
 
-[[package]]
-name = "schannel"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
-dependencies = [
- "windows-sys 0.52.0",
-]
-
 [[package]]
 name = "sct"
 version = "0.7.1"
@@ -1279,29 +1252,6 @@ dependencies = [
  "untrusted",
 ]
 
-[[package]]
-name = "security-framework"
-version = "2.9.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation",
- "core-foundation-sys",
- "libc",
- "security-framework-sys",
-]
-
-[[package]]
-name = "security-framework-sys"
-version = "2.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
-dependencies = [
- "core-foundation-sys",
- "libc",
-]
-
 [[package]]
 name = "serde"
 version = "1.0.196"
@@ -1740,6 +1690,12 @@ dependencies = [
  "wasm-bindgen",
 ]
 
+[[package]]
+name = "webpki-roots"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
+
 [[package]]
 name = "which"
 version = "4.4.2"
diff --git a/bin/oli/Cargo.lock b/bin/oli/Cargo.lock
index f28a894261..843d9d7050 100644
--- a/bin/oli/Cargo.lock
+++ b/bin/oli/Cargo.lock
@@ -303,7 +303,7 @@ dependencies = [
  "futures-io",
  "rustls",
  "rustls-pemfile",
- "webpki-roots",
+ "webpki-roots 0.22.6",
 ]
 
 [[package]]
@@ -2575,7 +2575,6 @@ dependencies = [
  "percent-encoding",
  "pin-project-lite",
  "rustls",
- "rustls-native-certs",
  "rustls-pemfile",
  "serde",
  "serde_json",
@@ -2591,6 +2590,7 @@ dependencies = [
  "wasm-bindgen-futures",
  "wasm-streams",
  "web-sys",
+ "webpki-roots 0.25.4",
  "winreg",
 ]
 
@@ -3683,6 +3683,12 @@ dependencies = [
  "webpki",
 ]
 
+[[package]]
+name = "webpki-roots"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
+
 [[package]]
 name = "which"
 version = "4.4.2"
diff --git a/bindings/c/include/opendal.h b/bindings/c/include/opendal.h
index 8d76a5ceab..a7298caed5 100644
--- a/bindings/c/include/opendal.h
+++ b/bindings/c/include/opendal.h
@@ -95,7 +95,7 @@ typedef struct BlockingLister BlockingLister;
  *
  * Read more backend init examples in [`services`]
  *
- * ```rust
+ * ```rust,no_run
  * # use anyhow::Result;
  * use opendal::services::Fs;
  * use opendal::BlockingOperator;
@@ -126,8 +126,7 @@ typedef struct BlockingLister BlockingLister;
  * use opendal::BlockingOperator;
  * use opendal::Operator;
  *
- * #[tokio::main]
- * async fn main() -> Result<()> {
+ * async fn test() -> Result<()> {
  *     // Create fs backend builder.
  *     let mut builder = S3::default();
  *     builder.bucket("test");
@@ -167,7 +166,6 @@ typedef struct BlockingReader BlockingReader;
  * use opendal::EntryMode;
  * use opendal::Metakey;
  * use opendal::Operator;
- * # #[tokio::main]
  * # async fn test(op: Operator) -> Result<()> {
  * let mut entries = op
  *     .list_with("dir/")
diff --git a/core/Cargo.lock b/core/Cargo.lock
index 91a83648fb..dc0c364c59 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -5333,6 +5333,7 @@ dependencies = [
  "http 0.2.11",
  "http-body",
  "hyper",
+ "hyper-rustls",
  "ipnet",
  "js-sys",
  "log",
@@ -5341,12 +5342,14 @@ dependencies = [
  "percent-encoding",
  "pin-project-lite",
  "rustls",
+ "rustls-pemfile",
  "serde",
  "serde_json",
  "serde_urlencoded",
  "sync_wrapper",
  "system-configuration",
  "tokio",
+ "tokio-rustls",
  "tokio-util",
  "tower-service",
  "url",
@@ -5354,6 +5357,7 @@ dependencies = [
  "wasm-bindgen-futures",
  "wasm-streams",
  "web-sys",
+ "webpki-roots 0.25.4",
  "winreg",
 ]
 
diff --git a/core/src/layers/async_backtrace.rs 
b/core/src/layers/async_backtrace.rs
index 46bc3afa4b..4cda1e0d83 100644
--- a/core/src/layers/async_backtrace.rs
+++ b/core/src/layers/async_backtrace.rs
@@ -29,7 +29,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::AsyncBacktraceLayer;
 /// use opendal::services;
@@ -38,7 +38,7 @@ use crate::*;
 ///
 /// let _ = Operator::new(services::Memory::default())
 ///     .expect("must init")
-///     .layer(AsyncBacktraceLayer::new())
+///     .layer(AsyncBacktraceLayer::default())
 ///     .finish();
 /// ```
 
diff --git a/core/src/layers/await_tree.rs b/core/src/layers/await_tree.rs
index bd82bf2363..eb7651f88f 100644
--- a/core/src/layers/await_tree.rs
+++ b/core/src/layers/await_tree.rs
@@ -31,7 +31,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::AwaitTreeLayer;
 /// use opendal::services;
diff --git a/core/src/layers/blocking.rs b/core/src/layers/blocking.rs
index e44eda903b..bc6ff05482 100644
--- a/core/src/layers/blocking.rs
+++ b/core/src/layers/blocking.rs
@@ -36,7 +36,7 @@ use crate::*;
 ///
 /// BlockingLayer will use current async context's runtime to handle the async 
calls.
 ///
-/// ```rust
+/// ```rust,no_run
 /// # use anyhow::Result;
 /// use opendal::layers::BlockingLayer;
 /// use opendal::services::S3;
@@ -66,7 +66,7 @@ use crate::*;
 /// first. You can use [`Handle::try_current`] first to get the handle and 
than call [`Handle::enter`].
 /// This often happens in the case that async function calls blocking function.
 ///
-/// ```rust
+/// ```rust,no_run
 /// use opendal::layers::BlockingLayer;
 /// use opendal::services::S3;
 /// use opendal::BlockingOperator;
@@ -103,7 +103,7 @@ use crate::*;
 /// > The following code uses a global statically created runtime as an 
example, please manage the
 /// runtime on demand.
 ///
-/// ```rust
+/// ```rust,no_run
 /// use once_cell::sync::Lazy;
 /// use opendal::layers::BlockingLayer;
 /// use opendal::services::S3;
diff --git a/core/src/layers/chaos.rs b/core/src/layers/chaos.rs
index 55a28a554a..69c16e8adf 100644
--- a/core/src/layers/chaos.rs
+++ b/core/src/layers/chaos.rs
@@ -45,7 +45,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::ChaosLayer;
 /// use opendal::services;
diff --git a/core/src/layers/concurrent_limit.rs 
b/core/src/layers/concurrent_limit.rs
index 5fd6dd87ba..992042ef0a 100644
--- a/core/src/layers/concurrent_limit.rs
+++ b/core/src/layers/concurrent_limit.rs
@@ -37,7 +37,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::ConcurrentLimitLayer;
 /// use opendal::services;
diff --git a/core/src/layers/dtrace.rs b/core/src/layers/dtrace.rs
index 11b62dc1c4..295443cd49 100644
--- a/core/src/layers/dtrace.rs
+++ b/core/src/layers/dtrace.rs
@@ -113,7 +113,8 @@ use crate::*;
 /// 6. blocking_writer_close_error, arguments: path
 ///
 /// Example:
-/// ```
+///
+/// ```no_build
 /// use anyhow::Result;
 /// use opendal::layers::DTraceLayer;
 /// use opendal::services::Fs;
diff --git a/core/src/layers/logging.rs b/core/src/layers/logging.rs
index 516dd9ab7e..2f9265dbae 100644
--- a/core/src/layers/logging.rs
+++ b/core/src/layers/logging.rs
@@ -54,7 +54,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::LoggingLayer;
 /// use opendal::services;
diff --git a/core/src/layers/madsim.rs b/core/src/layers/madsim.rs
index 7573fd27e6..4af7c1d84d 100644
--- a/core/src/layers/madsim.rs
+++ b/core/src/layers/madsim.rs
@@ -53,7 +53,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_build
 /// use std::time::Duration;
 ///
 /// use madsim::net::NetSim;
diff --git a/core/src/layers/metrics.rs b/core/src/layers/metrics.rs
index dc531cb10d..a4abc41bdf 100644
--- a/core/src/layers/metrics.rs
+++ b/core/src/layers/metrics.rs
@@ -86,7 +86,7 @@ static LABEL_ERROR: &str = "error";
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::MetricsLayer;
 /// use opendal::services;
diff --git a/core/src/layers/minitrace.rs b/core/src/layers/minitrace.rs
index 60ee95f327..8dc720fe57 100644
--- a/core/src/layers/minitrace.rs
+++ b/core/src/layers/minitrace.rs
@@ -37,7 +37,7 @@ use crate::*;
 ///
 /// ## Basic Setup
 ///
-/// ```
+/// ```no_build
 /// use anyhow::Result;
 /// use opendal::layers::MinitraceLayer;
 /// use opendal::services;
@@ -51,7 +51,7 @@ use crate::*;
 ///
 /// ## Real usage
 ///
-/// ```no_run
+/// ```no_build
 /// use std::error::Error;
 ///
 /// use anyhow::Result;
@@ -102,7 +102,7 @@ use crate::*;
 ///
 /// For example:
 ///
-/// ```no_run
+/// ```no_build
 /// extern crate minitrace_jaeger;
 ///
 /// use minitrace::collector::Config;
diff --git a/core/src/layers/oteltrace.rs b/core/src/layers/oteltrace.rs
index 727a0bc645..138811bb6f 100644
--- a/core/src/layers/oteltrace.rs
+++ b/core/src/layers/oteltrace.rs
@@ -39,7 +39,7 @@ use crate::*;
 ///
 /// ## Basic Setup
 ///
-/// ```
+/// ```no_build
 /// use anyhow::Result;
 /// use opendal::layers::OtelTraceLayer;
 /// use opendal::services;
diff --git a/core/src/layers/prometheus.rs b/core/src/layers/prometheus.rs
index 6b85844a2d..b04f8ddb63 100644
--- a/core/src/layers/prometheus.rs
+++ b/core/src/layers/prometheus.rs
@@ -60,7 +60,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_build
 /// use log::debug;
 /// use log::info;
 /// use opendal::layers::PrometheusLayer;
diff --git a/core/src/layers/prometheus_client.rs 
b/core/src/layers/prometheus_client.rs
index 1276f5c695..e29050571c 100644
--- a/core/src/layers/prometheus_client.rs
+++ b/core/src/layers/prometheus_client.rs
@@ -42,7 +42,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_build
 /// use log::debug;
 /// use log::info;
 /// use opendal::layers::PrometheusClientLayer;
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index c73b11696a..d8bfbbb26d 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -51,7 +51,7 @@ use crate::*;
 ///
 /// # Examples
 ///
-/// ```
+/// ```no_run
 /// use anyhow::Result;
 /// use opendal::layers::RetryLayer;
 /// use opendal::services;
@@ -69,7 +69,7 @@ use crate::*;
 /// RetryLayer accepts [`RetryInterceptor`] to allow users to customize
 /// their own retry interceptor logic.
 ///
-/// ```
+/// ```no_run
 /// use std::time::Duration;
 ///
 /// use anyhow::Result;
@@ -120,7 +120,7 @@ impl RetryLayer {
     /// Create a new retry layer.
     /// # Examples
     ///
-    /// ```
+    /// ```no_run
     /// use anyhow::Result;
     /// use opendal::layers::RetryLayer;
     /// use opendal::services;
@@ -137,7 +137,7 @@ impl RetryLayer {
 
     /// Set the retry interceptor as new notify.
     ///
-    /// ```
+    /// ```no_run
     /// use std::time::Duration;
     ///
     /// use anyhow::Result;
diff --git a/core/src/layers/throttle.rs b/core/src/layers/throttle.rs
index 05a67f8ab9..11f7e9913f 100644
--- a/core/src/layers/throttle.rs
+++ b/core/src/layers/throttle.rs
@@ -53,7 +53,8 @@ use crate::*;
 /// # Examples
 ///
 /// This example limits bandwidth to 10 KiB/s and burst size to 10 MiB.
-/// ```
+///
+/// ```no_build
 /// use anyhow::Result;
 /// use opendal::layers::ThrottleLayer;
 /// use opendal::services;
diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs
index 34ba69df0a..1679361564 100644
--- a/core/src/layers/timeout.rs
+++ b/core/src/layers/timeout.rs
@@ -54,7 +54,7 @@ use crate::*;
 /// The following examples will create a timeout layer with 10 seconds timeout 
for all non-io
 /// operations, 3 seconds timeout for all io operations.
 ///
-/// ```
+/// ```no_run
 /// use std::time::Duration;
 ///
 /// use anyhow::Result;
diff --git a/core/src/layers/tracing.rs b/core/src/layers/tracing.rs
index 6d9a8b2447..dcc0a79f4c 100644
--- a/core/src/layers/tracing.rs
+++ b/core/src/layers/tracing.rs
@@ -34,7 +34,7 @@ use crate::*;
 ///
 /// ## Basic Setup
 ///
-/// ```
+/// ```no_build
 /// use anyhow::Result;
 /// use opendal::layers::TracingLayer;
 /// use opendal::services;
@@ -48,7 +48,7 @@ use crate::*;
 ///
 /// ## Real usage
 ///
-/// ```no_run
+/// ```no_build
 /// use std::error::Error;
 ///
 /// use anyhow::Result;
@@ -106,7 +106,7 @@ use crate::*;
 ///
 /// For example:
 ///
-/// ```ignore
+/// ```no_build
 /// extern crate tracing;
 ///
 /// let my_subscriber = FooSubscriber::new();
diff --git a/core/src/services/alluxio/docs.md 
b/core/src/services/alluxio/docs.md
index 33775c2264..47a31a4870 100644
--- a/core/src/services/alluxio/docs.md
+++ b/core/src/services/alluxio/docs.md
@@ -25,7 +25,7 @@ You can refer to [`AlluxioBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Alluxio;
 use opendal::Operator;
diff --git a/core/src/services/atomicserver/docs.md 
b/core/src/services/atomicserver/docs.md
index 9ef3ece816..9c4511910c 100644
--- a/core/src/services/atomicserver/docs.md
+++ b/core/src/services/atomicserver/docs.md
@@ -29,7 +29,7 @@ You can refer to [`AtomicserverBuilder`]'s docs for more 
information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Atomicserver;
 use opendal::Operator;
diff --git a/core/src/services/azblob/docs.md b/core/src/services/azblob/docs.md
index e02eeabe7f..19578b290f 100644
--- a/core/src/services/azblob/docs.md
+++ b/core/src/services/azblob/docs.md
@@ -40,7 +40,7 @@ az storage container create --name test --connection-string 
"DefaultEndpointsPro
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/azdls/docs.md b/core/src/services/azdls/docs.md
index 57a289d1c5..9cd4acc8fe 100644
--- a/core/src/services/azdls/docs.md
+++ b/core/src/services/azdls/docs.md
@@ -36,7 +36,7 @@ Refer to public API docs for more information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/azfile/docs.md b/core/src/services/azfile/docs.md
index 8bb7c4d76d..fe596ae870 100644
--- a/core/src/services/azfile/docs.md
+++ b/core/src/services/azfile/docs.md
@@ -28,7 +28,7 @@ Refer to public API docs for more information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/b2/docs.md b/core/src/services/b2/docs.md
index 577bc82ffa..9741f29751 100644
--- a/core/src/services/b2/docs.md
+++ b/core/src/services/b2/docs.md
@@ -28,7 +28,7 @@ You can refer to [`B2Builder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::B2;
 use opendal::Operator;
@@ -41,10 +41,10 @@ async fn main() -> Result<()> {
     // set the storage bucket for OpenDAL
     builder.root("/");
     // set the key_id for OpenDAL
-    builder.key_id("xxxxxxxxxx");
+    builder.application_key_id("xxxxxxxxxx");
     // set the key_id for OpenDAL
     builder.application_key("xxxxxxxxxx");
-    // set the bucket name for OpenDAL
+    // set the     bucket name for OpenDAL
     builder.bucket("opendal");
     // set the bucket_id for OpenDAL
     builder.bucket_id("xxxxxxxxxxxxx");
diff --git a/core/src/services/cacache/docs.md 
b/core/src/services/cacache/docs.md
index b8d3e4df17..10024f1c48 100644
--- a/core/src/services/cacache/docs.md
+++ b/core/src/services/cacache/docs.md
@@ -24,7 +24,7 @@ You can refer to [`CacacheBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Cacache;
 use opendal::Operator;
diff --git a/core/src/services/chainsafe/docs.md 
b/core/src/services/chainsafe/docs.md
index c9c5157c38..c5c68590f3 100644
--- a/core/src/services/chainsafe/docs.md
+++ b/core/src/services/chainsafe/docs.md
@@ -26,7 +26,7 @@ You can refer to [`ChainsafeBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Chainsafe;
 use opendal::Operator;
diff --git a/core/src/services/cos/docs.md b/core/src/services/cos/docs.md
index 6d5ee73b15..bd365274b7 100644
--- a/core/src/services/cos/docs.md
+++ b/core/src/services/cos/docs.md
@@ -28,7 +28,7 @@ You can refer to [`CosBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Cos;
 use opendal::Operator;
diff --git a/core/src/services/d1/docs.md b/core/src/services/d1/docs.md
index 12b79d2aae..112cc19d9d 100644
--- a/core/src/services/d1/docs.md
+++ b/core/src/services/d1/docs.md
@@ -28,7 +28,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::D1;
 use opendal::Operator;
diff --git a/core/src/services/dbfs/docs.md b/core/src/services/dbfs/docs.md
index 0853e6584f..82ef74d96f 100644
--- a/core/src/services/dbfs/docs.md
+++ b/core/src/services/dbfs/docs.md
@@ -28,7 +28,7 @@ Refer to [`DbfsBuilder`]'s public API docs for more 
information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/dropbox/docs.md 
b/core/src/services/dropbox/docs.md
index c84ac4615b..8a6bb9b65b 100644
--- a/core/src/services/dropbox/docs.md
+++ b/core/src/services/dropbox/docs.md
@@ -46,7 +46,7 @@ You can refer to [`DropboxBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::raw::OpWrite;
 use opendal::services::Dropbox;
diff --git a/core/src/services/etcd/docs.md b/core/src/services/etcd/docs.md
index 5a798998fa..208c17cbe1 100644
--- a/core/src/services/etcd/docs.md
+++ b/core/src/services/etcd/docs.md
@@ -30,7 +30,7 @@ You can refer to [`EtcdBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Etcd;
 use opendal::Operator;
diff --git a/core/src/services/foundationdb/docs.md 
b/core/src/services/foundationdb/docs.md
index f05488396d..e41eb715ca 100644
--- a/core/src/services/foundationdb/docs.md
+++ b/core/src/services/foundationdb/docs.md
@@ -27,7 +27,7 @@ You can refer to [`FoundationdbBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Foundationdb;
 use opendal::Operator;
diff --git a/core/src/services/fs/docs.md b/core/src/services/fs/docs.md
index 5547a17af2..c32283b5df 100644
--- a/core/src/services/fs/docs.md
+++ b/core/src/services/fs/docs.md
@@ -26,7 +26,7 @@ You can refer to [`FsBuilder`]'s docs for more information
 ### Via Builder
 
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/ftp/docs.md b/core/src/services/ftp/docs.md
index 4a69edb903..76d33c6e00 100644
--- a/core/src/services/ftp/docs.md
+++ b/core/src/services/ftp/docs.md
@@ -27,7 +27,7 @@ You can refer to [`FtpBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Ftp;
 use opendal::Operator;
diff --git a/core/src/services/gcs/docs.md b/core/src/services/gcs/docs.md
index 3f6a1fbe6f..d18dc117e1 100644
--- a/core/src/services/gcs/docs.md
+++ b/core/src/services/gcs/docs.md
@@ -30,7 +30,7 @@ Refer to public API docs for more information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Gcs;
 use opendal::Operator;
@@ -55,4 +55,4 @@ async fn main() -> Result<()> {
     let op: Operator = Operator::new(builder)?.finish();
     Ok(())
 }
-```
\ No newline at end of file
+```
diff --git a/core/src/services/gdrive/docs.md b/core/src/services/gdrive/docs.md
index 9f56dc4d3b..851440b63b 100644
--- a/core/src/services/gdrive/docs.md
+++ b/core/src/services/gdrive/docs.md
@@ -49,7 +49,7 @@ You can refer to [`GdriveBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Gdrive;
 use opendal::Operator;
diff --git a/core/src/services/github/docs.md b/core/src/services/github/docs.md
index c16245cfeb..e9840e6858 100644
--- a/core/src/services/github/docs.md
+++ b/core/src/services/github/docs.md
@@ -27,7 +27,7 @@ You can refer to [`GithubBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Github;
 use opendal::Operator;
@@ -42,7 +42,7 @@ async fn main() -> Result<()> {
     // set the access token for Github API
     builder.token("your_access_token");
     // set the owner for Github
-    builder.owner("your_owner")
+    builder.owner("your_owner");
     // set the repository for Github
     builder.repo("your_repo");
 
diff --git a/core/src/services/gridfs/docs.md b/core/src/services/gridfs/docs.md
index b69a3392b1..043d5d5a8a 100644
--- a/core/src/services/gridfs/docs.md
+++ b/core/src/services/gridfs/docs.md
@@ -26,7 +26,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Gridfs;
 use opendal::Operator;
diff --git a/core/src/services/hdfs/backend.rs 
b/core/src/services/hdfs/backend.rs
index a03aa6a3de..b1eb2e57a5 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -34,7 +34,7 @@ use crate::raw::*;
 use crate::*;
 
 /// [Hadoop Distributed File System (HDFS™)](https://hadoop.apache.org/) 
support.
-
+///
 /// Config for Hdfs services support.
 #[derive(Default, Deserialize, Clone)]
 #[serde(default)]
diff --git a/core/src/services/hdfs/docs.md b/core/src/services/hdfs/docs.md
index 7e4d882112..cb9f5b5b47 100644
--- a/core/src/services/hdfs/docs.md
+++ b/core/src/services/hdfs/docs.md
@@ -83,7 +83,7 @@ export CLASSPATH=$HADOOP_CONF_DIR:$HADOOP_CLASSPATH:$CLASSPATH
 ```
 4. Use the `cluster_name` specified in the `core-site.xml` file (located in 
the HADOOP_CONF_DIR folder) to replace namenode:port.
 
-```rust
+```ignore
 builder.name_node("hdfs://cluster_name");
 ```
 
@@ -109,7 +109,7 @@ Enabling the vendored feature ensures that hdrs includes 
the necessary libhdfs.s
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/http/docs.md b/core/src/services/http/docs.md
index 0d173bb750..482b29c9d2 100644
--- a/core/src/services/http/docs.md
+++ b/core/src/services/http/docs.md
@@ -30,7 +30,7 @@ You can refer to [`HttpBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Http;
 use opendal::Operator;
diff --git a/core/src/services/huggingface/docs.md 
b/core/src/services/huggingface/docs.md
index e60b26d579..6ac2806928 100644
--- a/core/src/services/huggingface/docs.md
+++ b/core/src/services/huggingface/docs.md
@@ -33,7 +33,7 @@ Refer to [`HuggingfaceBuilder`]'s public API docs for more 
information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/icloud/core.rs b/core/src/services/icloud/core.rs
index 77f747a1bf..f980065631 100644
--- a/core/src/services/icloud/core.rs
+++ b/core/src/services/icloud/core.rs
@@ -601,6 +601,7 @@ struct IcloudError {
 }
 
 #[derive(Default, Deserialize, Clone)]
+#[serde(rename_all = "camelCase")]
 pub struct IcloudWebservicesResponse {
     #[serde(default)]
     pub hsa_challenge_required: bool,
@@ -616,16 +617,16 @@ pub struct Webservices {
 }
 
 #[derive(Deserialize, Default, Clone, Debug)]
+#[serde(rename_all = "camelCase")]
 pub struct Drivews {
-    #[serde(rename = "pcsRequired")]
     pub pcs_required: bool,
     pub status: String,
     pub url: Option<String>,
 }
 
 #[derive(Deserialize, Default, Clone, Debug)]
+#[serde(rename_all = "camelCase")]
 pub struct Docws {
-    #[serde(rename = "pcsRequired")]
     pub pcs_required: bool,
     pub status: String,
     pub url: Option<String>,
@@ -712,6 +713,7 @@ pub struct IcloudCreateFolder {
 mod tests {
     use super::IcloudRoot;
     use super::IcloudWebservicesResponse;
+    use pretty_assertions::assert_eq;
 
     #[test]
     fn test_parse_icloud_drive_root_json() {
@@ -799,7 +801,6 @@ mod tests {
           "etag": "w9",
           "fileCount": 22,
           "items": [
-            {
             {
               "dateChanged": "2021-02-18T14:10:46Z",
               "dateCreated": "2021-02-10T07:01:34Z",
diff --git a/core/src/services/icloud/docs.md b/core/src/services/icloud/docs.md
index ddf572f326..d3789f7ad2 100644
--- a/core/src/services/icloud/docs.md
+++ b/core/src/services/icloud/docs.md
@@ -46,7 +46,7 @@ You can refer to [`IcloudBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Icloud;
 use opendal::Operator;
@@ -59,7 +59,7 @@ async fn main() -> Result<()> {
     builder.password("<password>");
     builder.trust_token("<trust_token>");
     builder.ds_web_auth_token("<ds_web_auth_token>");
-    builder.is_china_mainland("<is_china_mainland>");
+    builder.is_china_mainland(true);
 
     Ok(())
-}
\ No newline at end of file
+}
diff --git a/core/src/services/ipfs/docs.md b/core/src/services/ipfs/docs.md
index 2e00d282c0..3c0ee925eb 100644
--- a/core/src/services/ipfs/docs.md
+++ b/core/src/services/ipfs/docs.md
@@ -25,7 +25,7 @@ You can refer to [`IpfsBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Ipfs;
 use opendal::Operator;
diff --git a/core/src/services/ipfs/ipld.rs b/core/src/services/ipfs/ipld.rs
index a66213d9ce..f51a758a32 100644
--- a/core/src/services/ipfs/ipld.rs
+++ b/core/src/services/ipfs/ipld.rs
@@ -156,7 +156,7 @@ mod tests {
         assert_eq!(data.links[0].name.as_ref().unwrap(), "normal_dir");
         assert_eq!(data.links[0].tsize.unwrap(), 60);
 
-        assert_eq!(data.links[1].name.as_ref().unwrap(), "normal_file.txt");
+        assert_eq!(data.links[1].name.as_ref().unwrap(), "normal_file");
         assert_eq!(data.links[1].tsize.unwrap(), 262158);
     }
 }
diff --git a/core/src/services/koofr/docs.md b/core/src/services/koofr/docs.md
index e7bea550bf..dff9abbc1b 100644
--- a/core/src/services/koofr/docs.md
+++ b/core/src/services/koofr/docs.md
@@ -27,7 +27,7 @@ You can refer to [`KoofrBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Koofr;
 use opendal::Operator;
diff --git a/core/src/services/libsql/docs.md b/core/src/services/libsql/docs.md
index 00d0408c12..a72ae79099 100644
--- a/core/src/services/libsql/docs.md
+++ b/core/src/services/libsql/docs.md
@@ -27,7 +27,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Libsql;
 use opendal::Operator;
diff --git a/core/src/services/memcached/docs.md 
b/core/src/services/memcached/docs.md
index 844c7ee49b..9abaf97a51 100644
--- a/core/src/services/memcached/docs.md
+++ b/core/src/services/memcached/docs.md
@@ -28,7 +28,7 @@ You can refer to [`MemcachedBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Memcached;
 use opendal::Operator;
@@ -46,4 +46,4 @@ async fn main() -> Result<()> {
     let op: Operator = Operator::new(builder)?.finish();
     Ok(())
 }
-```
\ No newline at end of file
+```
diff --git a/core/src/services/memory/docs.md b/core/src/services/memory/docs.md
index 326fea1797..328bf823a3 100644
--- a/core/src/services/memory/docs.md
+++ b/core/src/services/memory/docs.md
@@ -19,7 +19,7 @@ This service can be used to:
 ### Via Builder
 
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/moka/docs.md b/core/src/services/moka/docs.md
index 9756938056..a2a24db030 100644
--- a/core/src/services/moka/docs.md
+++ b/core/src/services/moka/docs.md
@@ -28,7 +28,7 @@ You can refer to [`MokaBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Moka;
 use opendal::Operator;
diff --git a/core/src/services/mongodb/docs.md 
b/core/src/services/mongodb/docs.md
index 7ceda3c3a3..614cb5b1ae 100644
--- a/core/src/services/mongodb/docs.md
+++ b/core/src/services/mongodb/docs.md
@@ -27,7 +27,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Mongodb;
 use opendal::Operator;
diff --git a/core/src/services/mysql/docs.md b/core/src/services/mysql/docs.md
index 5b6c1d626e..e80054ce8e 100644
--- a/core/src/services/mysql/docs.md
+++ b/core/src/services/mysql/docs.md
@@ -26,7 +26,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Mysql;
 use opendal::Operator;
diff --git a/core/src/services/obs/docs.md b/core/src/services/obs/docs.md
index 89b06dcbee..157ecb8ebf 100644
--- a/core/src/services/obs/docs.md
+++ b/core/src/services/obs/docs.md
@@ -28,7 +28,7 @@ You can refer to [`ObsBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Obs;
 use opendal::Operator;
@@ -53,4 +53,4 @@ async fn main() -> Result<()> {
 
     Ok(())
 }
-```
\ No newline at end of file
+```
diff --git a/core/src/services/onedrive/docs.md 
b/core/src/services/onedrive/docs.md
index 0ee24a3202..7da9dda544 100644
--- a/core/src/services/onedrive/docs.md
+++ b/core/src/services/onedrive/docs.md
@@ -26,7 +26,7 @@ You can refer to [`OnedriveBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Onedrive;
 use opendal::Operator;
diff --git a/core/src/services/onedrive/graph_model.rs 
b/core/src/services/onedrive/graph_model.rs
index e51c690106..1d45db6b94 100644
--- a/core/src/services/onedrive/graph_model.rs
+++ b/core/src/services/onedrive/graph_model.rs
@@ -209,7 +209,7 @@ fn test_parse_one_drive_json() {
                     "path": "/drive/root:"
                 },
                 "file": {
-                    "mimeType": "application/pdf",
+                    "mimeType": "application/pdf"
                 },
                 "fileSystemInfo": {
                     "createdDateTime": "2018-12-30T05:32:55.46Z",
diff --git a/core/src/services/oss/docs.md b/core/src/services/oss/docs.md
index 131afaa3f7..4ce3a54d80 100644
--- a/core/src/services/oss/docs.md
+++ b/core/src/services/oss/docs.md
@@ -35,7 +35,7 @@ Refer to [`OssBuilder`]'s public API docs for more 
information.
 
 ## Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
@@ -70,4 +70,4 @@ async fn main() -> Result<()> {
 
     Ok(())
 }
-```
\ No newline at end of file
+```
diff --git a/core/src/services/pcloud/docs.md b/core/src/services/pcloud/docs.md
index d2876f4c5b..d1c95638ec 100644
--- a/core/src/services/pcloud/docs.md
+++ b/core/src/services/pcloud/docs.md
@@ -27,7 +27,7 @@ You can refer to [`PcloudBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Pcloud;
 use opendal::Operator;
diff --git a/core/src/services/persy/docs.md b/core/src/services/persy/docs.md
index d6c2cd4c33..dbebdc58ba 100644
--- a/core/src/services/persy/docs.md
+++ b/core/src/services/persy/docs.md
@@ -26,7 +26,7 @@ You can refer to [`PersyBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Persy;
 use opendal::Operator;
diff --git a/core/src/services/postgresql/docs.md 
b/core/src/services/postgresql/docs.md
index e3f044b830..831d1a6c7c 100644
--- a/core/src/services/postgresql/docs.md
+++ b/core/src/services/postgresql/docs.md
@@ -26,7 +26,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Postgresql;
 use opendal::Operator;
diff --git a/core/src/services/redb/docs.md b/core/src/services/redb/docs.md
index 767390a918..ac0701a958 100644
--- a/core/src/services/redb/docs.md
+++ b/core/src/services/redb/docs.md
@@ -24,7 +24,7 @@ You can refer to [`RedbBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Redb;
 use opendal::Operator;
diff --git a/core/src/services/redis/docs.md b/core/src/services/redis/docs.md
index 631538f7e1..5c9ef6a494 100644
--- a/core/src/services/redis/docs.md
+++ b/core/src/services/redis/docs.md
@@ -29,7 +29,7 @@ You can refer to [`RedisBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Redis;
 use opendal::Operator;
diff --git a/core/src/services/rocksdb/docs.md 
b/core/src/services/rocksdb/docs.md
index 6043f5478f..440ce26434 100644
--- a/core/src/services/rocksdb/docs.md
+++ b/core/src/services/rocksdb/docs.md
@@ -39,7 +39,7 @@ You can refer to [`RocksdbBuilder`]'s docs for more 
information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Rocksdb;
 use opendal::Operator;
diff --git a/core/src/services/s3/docs.md b/core/src/services/s3/docs.md
index 065563b436..17b857105e 100644
--- a/core/src/services/s3/docs.md
+++ b/core/src/services/s3/docs.md
@@ -77,7 +77,7 @@ Reference: [Protecting data using server-side 
encryption](https://docs.aws.amazo
 
 ### Basic Setup
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
@@ -123,7 +123,7 @@ async fn main() -> Result<()> {
 
 ### S3 with SSE-C
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use log::info;
 use opendal::services::S3;
@@ -155,7 +155,7 @@ async fn main() -> Result<()> {
 
 ### S3 with SSE-KMS and aws managed kms key
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use log::info;
 use opendal::services::S3;
@@ -187,7 +187,7 @@ async fn main() -> Result<()> {
 
 ### S3 with SSE-KMS and customer managed kms key
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use log::info;
 use opendal::services::S3;
@@ -219,7 +219,7 @@ async fn main() -> Result<()> {
 
 ### S3 with SSE-S3
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use log::info;
 use opendal::services::S3;
diff --git a/core/src/services/seafile/docs.md 
b/core/src/services/seafile/docs.md
index 4690405359..7a245b5ecc 100644
--- a/core/src/services/seafile/docs.md
+++ b/core/src/services/seafile/docs.md
@@ -28,7 +28,7 @@ You can refer to [`SeafileBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Seafile;
 use opendal::Operator;
diff --git a/core/src/services/sftp/docs.md b/core/src/services/sftp/docs.md
index d80bb0679f..2d50a0274a 100644
--- a/core/src/services/sftp/docs.md
+++ b/core/src/services/sftp/docs.md
@@ -32,7 +32,7 @@ You can refer to [`SftpBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Sftp;
 use opendal::Operator;
diff --git a/core/src/services/sled/docs.md b/core/src/services/sled/docs.md
index 5f7bcff53c..466a87c0c2 100644
--- a/core/src/services/sled/docs.md
+++ b/core/src/services/sled/docs.md
@@ -24,7 +24,7 @@ You can refer to [`SledBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Sled;
 use opendal::Operator;
diff --git a/core/src/services/sqlite/docs.md b/core/src/services/sqlite/docs.md
index e8dad81853..0d1ad2a78b 100644
--- a/core/src/services/sqlite/docs.md
+++ b/core/src/services/sqlite/docs.md
@@ -24,7 +24,7 @@ This service can be used to:
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Sqlite;
 use opendal::Operator;
diff --git a/core/src/services/supabase/docs.md 
b/core/src/services/supabase/docs.md
index 331ae7fd6b..1f3ddf86a5 100644
--- a/core/src/services/supabase/docs.md
+++ b/core/src/services/supabase/docs.md
@@ -29,7 +29,7 @@ can access all resources. Note that if you want to read 
public resources, do not
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Supabase;
 use opendal::Operator;
@@ -50,4 +50,4 @@ async fn main() -> Result<()> {
 }
 ```
 
- 
\ No newline at end of file
+ 
diff --git a/core/src/services/swift/docs.md b/core/src/services/swift/docs.md
index 2b1793a700..8f75b31dd4 100644
--- a/core/src/services/swift/docs.md
+++ b/core/src/services/swift/docs.md
@@ -26,7 +26,7 @@ Refer to [`SwiftBuilder`]'s public API docs for more 
information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/tikv/docs.md b/core/src/services/tikv/docs.md
index 8de3dbeff4..2667428d72 100644
--- a/core/src/services/tikv/docs.md
+++ b/core/src/services/tikv/docs.md
@@ -28,7 +28,7 @@ You can refer to [`TiKVBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Tikv;
 use opendal::Operator;
@@ -36,7 +36,7 @@ use opendal::Operator;
 #[tokio::main]
 async fn main() -> Result<()> {
     let mut builder = Tikv::default();
-    builder.endpoints("127.0.0.1:2379");
+    builder.endpoints(vec!["127.0.0.1:2379".to_string()]);
 
     let op: Operator = Operator::new(builder)?.finish();
     Ok(())
diff --git a/core/src/services/upyun/docs.md b/core/src/services/upyun/docs.md
index 72dd8478ea..b7b93b3cbb 100644
--- a/core/src/services/upyun/docs.md
+++ b/core/src/services/upyun/docs.md
@@ -27,7 +27,7 @@ You can refer to [`UpyunBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Upyun;
 use opendal::Operator;
diff --git a/core/src/services/vercel_blob/docs.md 
b/core/src/services/vercel_blob/docs.md
index f640e89187..9971fe32c5 100644
--- a/core/src/services/vercel_blob/docs.md
+++ b/core/src/services/vercel_blob/docs.md
@@ -25,7 +25,7 @@ You can refer to [`VercelBlobBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::VercelBlob;
 use opendal::Operator;
diff --git a/core/src/services/vercel_blob/error.rs 
b/core/src/services/vercel_blob/error.rs
index 2d689983d5..2f8f5ef600 100644
--- a/core/src/services/vercel_blob/error.rs
+++ b/core/src/services/vercel_blob/error.rs
@@ -27,13 +27,13 @@ use crate::Result;
 
 /// VercelBlobError is the error returned by VercelBlob service.
 #[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = "PascalCase")]
+#[serde(default)]
 struct VercelBlobError {
     error: VercelBlobErrorDetail,
 }
 
 #[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = "PascalCase")]
+#[serde(default)]
 struct VercelBlobErrorDetail {
     code: String,
     message: Option<String>,
diff --git a/core/src/services/webdav/docs.md b/core/src/services/webdav/docs.md
index ee84e9c14e..4523d11855 100644
--- a/core/src/services/webdav/docs.md
+++ b/core/src/services/webdav/docs.md
@@ -30,7 +30,7 @@ You can refer to [`WebdavBuilder`]'s docs for more information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::Webdav;
 use opendal::Operator;
@@ -48,4 +48,4 @@ async fn main() -> Result<()> {
 
     Ok(())
 }
-```
\ No newline at end of file
+```
diff --git a/core/src/services/webhdfs/docs.md 
b/core/src/services/webhdfs/docs.md
index c9e1610e07..e54324e110 100644
--- a/core/src/services/webhdfs/docs.md
+++ b/core/src/services/webhdfs/docs.md
@@ -58,7 +58,7 @@ Refer to [`Builder`]'s public API docs for more information.
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use std::sync::Arc;
 
 use anyhow::Result;
diff --git a/core/src/services/yandex_disk/docs.md 
b/core/src/services/yandex_disk/docs.md
index 5a55119714..d3ba328971 100644
--- a/core/src/services/yandex_disk/docs.md
+++ b/core/src/services/yandex_disk/docs.md
@@ -25,7 +25,7 @@ You can refer to [`YandexDiskBuilder`]'s docs for more 
information
 
 ### Via Builder
 
-```rust
+```rust,no_run
 use anyhow::Result;
 use opendal::services::YandexDisk;
 use opendal::Operator;
diff --git a/core/src/types/entry.rs b/core/src/types/entry.rs
index 86121293c0..5e699deaf2 100644
--- a/core/src/types/entry.rs
+++ b/core/src/types/entry.rs
@@ -33,7 +33,6 @@ use crate::*;
 /// use opendal::EntryMode;
 /// use opendal::Metakey;
 /// use opendal::Operator;
-/// # #[tokio::main]
 /// # async fn test(op: Operator) -> Result<()> {
 /// let mut entries = op
 ///     .list_with("dir/")
@@ -116,7 +115,6 @@ impl Entry {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op
     ///     .list_with("dir/")
@@ -165,7 +163,6 @@ impl Entry {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op
     ///     .list_with("dir/")
diff --git a/core/src/types/error.rs b/core/src/types/error.rs
index cd1def506c..d505b4dbfd 100644
--- a/core/src/types/error.rs
+++ b/core/src/types/error.rs
@@ -24,7 +24,6 @@
 //! # use opendal::EntryMode;
 //! # use opendal::Operator;
 //! use opendal::ErrorKind;
-//! # #[tokio::main]
 //! # async fn test(op: Operator) -> Result<()> {
 //! if let Err(e) = op.stat("test_file").await {
 //!     if e.kind() == ErrorKind::NotFound {
diff --git a/core/src/types/operator/blocking_operator.rs 
b/core/src/types/operator/blocking_operator.rs
index c9b2ee7586..06576986d3 100644
--- a/core/src/types/operator/blocking_operator.rs
+++ b/core/src/types/operator/blocking_operator.rs
@@ -31,7 +31,7 @@ use crate::*;
 ///
 /// Read more backend init examples in [`services`]
 ///
-/// ```rust
+/// ```rust,no_run
 /// # use anyhow::Result;
 /// use opendal::services::Fs;
 /// use opendal::BlockingOperator;
@@ -64,8 +64,7 @@ use crate::*;
 /// use opendal::BlockingOperator;
 /// use opendal::Operator;
 ///
-/// #[tokio::main]
-/// async fn main() -> Result<()> {
+/// async fn test() -> Result<()> {
 ///     // Create fs backend builder.
 ///     let mut builder = S3::default();
 ///     builder.bucket("test");
@@ -315,7 +314,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     /// # use futures::TryStreamExt;
     /// # fn test(op: BlockingOperator) -> Result<()> {
@@ -350,7 +349,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     /// #
     /// # fn test(op: BlockingOperator) -> Result<()> {
@@ -423,7 +422,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     /// # use futures::TryStreamExt;
     /// # fn test(op: BlockingOperator) -> Result<()> {
@@ -480,7 +479,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
@@ -507,7 +506,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     ///
     /// # fn test(op: BlockingOperator) -> Result<()> {
@@ -564,7 +563,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     ///
     /// # fn test(op: BlockingOperator) -> Result<()> {
@@ -672,7 +671,7 @@ impl BlockingOperator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::BlockingOperator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
diff --git a/core/src/types/operator/builder.rs 
b/core/src/types/operator/builder.rs
index 40f265ff88..390c9e4d47 100644
--- a/core/src/types/operator/builder.rs
+++ b/core/src/types/operator/builder.rs
@@ -30,8 +30,7 @@ use crate::*;
 /// # use anyhow::Result;
 /// use opendal::services::Fs;
 /// use opendal::Operator;
-/// #[tokio::main]
-/// async fn main() -> Result<()> {
+/// async fn test() -> Result<()> {
 ///     // Create fs backend builder.
 ///     let mut builder = Fs::default();
 ///     // Set the root for fs, all operations will happen under this root.
@@ -59,8 +58,7 @@ impl Operator {
     /// # use anyhow::Result;
     /// use opendal::services::Fs;
     /// use opendal::Operator;
-    /// #[tokio::main]
-    /// async fn main() -> Result<()> {
+    /// async fn test() -> Result<()> {
     ///     // Create fs backend builder.
     ///     let mut builder = Fs::default();
     ///     // Set the root for fs, all operations will happen under this root.
@@ -97,8 +95,7 @@ impl Operator {
     ///
     /// use opendal::services::Fs;
     /// use opendal::Operator;
-    /// #[tokio::main]
-    /// async fn main() -> Result<()> {
+    /// async fn test() -> Result<()> {
     ///     let map = HashMap::from([
     ///         // Set the root for fs, all operations will happen under this 
root.
     ///         //
@@ -136,8 +133,7 @@ impl Operator {
     ///
     /// use opendal::Operator;
     /// use opendal::Scheme;
-    /// #[tokio::main]
-    /// async fn main() -> Result<()> {
+    /// async fn test() -> Result<()> {
     ///     let map = HashMap::from([
     ///         // Set the root for fs, all operations will happen under this 
root.
     ///         //
@@ -304,8 +300,7 @@ impl Operator {
     /// use opendal::services::Fs;
     /// use opendal::Operator;
     ///
-    /// # #[tokio::main]
-    /// # async fn main() -> Result<()> {
+    /// # async fn test() -> Result<()> {
     /// let op = Operator::new(Fs::default())?.finish();
     /// let op = op.layer(LoggingLayer::default());
     /// // All operations will go through the new_layer
@@ -399,8 +394,7 @@ impl<A: Accessor> OperatorBuilder<A> {
     /// use opendal::services::Fs;
     /// use opendal::Operator;
     ///
-    /// # #[tokio::main]
-    /// # async fn main() -> Result<()> {
+    /// # async fn test() -> Result<()> {
     /// let op = Operator::new(Fs::default())?
     ///     .layer(LoggingLayer::default())
     ///     .finish();
diff --git a/core/src/types/operator/operator.rs 
b/core/src/types/operator/operator.rs
index a11d6b6d77..aa12f8e740 100644
--- a/core/src/types/operator/operator.rs
+++ b/core/src/types/operator/operator.rs
@@ -46,8 +46,7 @@ use crate::*;
 /// # use anyhow::Result;
 /// use opendal::services::Fs;
 /// use opendal::Operator;
-/// #[tokio::main]
-/// async fn main() -> Result<()> {
+/// async fn test() -> Result<()> {
 ///     // Create fs backend builder.
 ///     let mut builder = Fs::default();
 ///     // Set the root for fs, all operations will happen under this root.
@@ -113,7 +112,6 @@ impl Operator {
     /// # use anyhow::Result;
     /// use opendal::Operator;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let info = op.info();
     /// # Ok(())
@@ -142,7 +140,6 @@ impl Operator {
     /// # use anyhow::Result;
     /// use opendal::Operator;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.check().await?;
     /// # Ok(())
@@ -182,7 +179,6 @@ impl Operator {
     /// # use opendal::Operator;
     /// use opendal::ErrorKind;
     /// #
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// if let Err(e) = op.stat("test").await {
     ///     if e.kind() == ErrorKind::NotFound {
@@ -220,7 +216,7 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
+    ///
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = op.stat_with("path/to/file").if_match(etag).await?;
     /// # Ok(())
@@ -239,7 +235,7 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
+    ///
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = 
op.stat_with("path/to/file").if_none_match(etag).await?;
     /// # Ok(())
@@ -263,7 +259,6 @@ impl Operator {
     /// # use opendal::Operator;
     /// use opendal::ErrorKind;
     /// #
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// if let Err(e) = op.stat_with("test").if_match("<etag>").await {
     ///     if e.kind() == ErrorKind::ConditionNotMatch {
@@ -327,7 +322,6 @@ impl Operator {
     /// use futures::io;
     /// use opendal::Operator;
     ///
-    /// #[tokio::main]
     /// async fn test(op: Operator) -> Result<()> {
     ///     let _ = op.is_exist("test").await?;
     ///
@@ -361,10 +355,8 @@ impl Operator {
     /// # Examples
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
-    /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.create_dir("path/to/dir/").await?;
     /// # Ok(())
@@ -404,11 +396,10 @@ impl Operator {
     ///
     /// # Examples
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = op.read("path/to/file").await?;
     /// # Ok(())
@@ -443,11 +434,10 @@ impl Operator {
     /// - `1024..` means read bytes in range `[1024, n)` of file
     /// - `..1024` means read bytes in range `(n - 1024, n)` of file
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = op.read_with("path/to/file").range(0..1024).await?;
     /// # Ok(())
@@ -466,7 +456,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = op.read_with("path/to/file").if_match(etag).await?;
     /// # Ok(())
@@ -485,7 +474,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = 
op.read_with("path/to/file").if_none_match(etag).await?;
     /// # Ok(())
@@ -496,11 +484,10 @@ impl Operator {
     ///
     /// Read the whole path into a bytes.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = op.read_with("path/to/file").await?;
     /// let bs = op.read_with("path/to/file").range(0..10).await?;
@@ -559,11 +546,10 @@ impl Operator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
     /// # use opendal::Scheme;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let r = op.reader("path/to/file").await?;
     /// # Ok(())
@@ -595,11 +581,10 @@ impl Operator {
     /// - `1024..` means read bytes in range `[1024, n)` of file
     /// - `..1024` means read bytes in range `(n - 1024, n)` of file
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = op.reader_with("path/to/file").range(0..1024).await?;
     /// # Ok(())
@@ -616,11 +601,10 @@ impl Operator {
     /// The following example will create a reader with 4 MiB buffer 
internally. All seek operations
     /// happened in buffered data will be zero cost.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::TryStreamExt;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = op
     ///     .reader_with("path/to/file")
@@ -642,7 +626,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = 
op.reader_with("path/to/file").if_match(etag).await?;
     /// # Ok(())
@@ -661,7 +644,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator, etag: &str) -> Result<()> {
     /// let mut metadata = 
op.reader_with("path/to/file").if_none_match(etag).await?;
     /// # Ok(())
@@ -671,11 +653,9 @@ impl Operator {
     /// # Examples
     ///
     /// ```no_run
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
-    /// # use futures::TryStreamExt;
     /// # use opendal::Scheme;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let r = op.reader_with("path/to/file").range(0..10).await?;
     /// # Ok(())
@@ -726,14 +706,13 @@ impl Operator {
     ///
     /// # Examples
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.write("path/to/file", vec![0; 4096]).await?;
     /// # Ok(())
@@ -755,11 +734,10 @@ impl Operator {
     ///
     /// # Examples
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.copy("path/to/file", "path/to/file2").await?;
     /// # Ok(())
@@ -813,11 +791,10 @@ impl Operator {
     ///
     /// # Examples
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.rename("path/to/file", "path/to/file2").await?;
     /// # Ok(())
@@ -884,14 +861,11 @@ impl Operator {
     ///
     /// # Examples
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
-    /// # use futures::StreamExt;
-    /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op.writer("path/to/file").await?;
     /// w.write(vec![0; 4096]).await?;
@@ -917,14 +891,13 @@ impl Operator {
     ///
     /// The following example will append data to existing file instead.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op.writer_with("path/to/file").append(true).await?;
     /// w.write(vec![0; 4096]).await?;
@@ -950,14 +923,13 @@ impl Operator {
     /// The following example will set the writer buffer to 8MiB. Only one API 
call will be sent at
     /// `close` instead.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op
     ///     .writer_with("path/to/file")
@@ -984,14 +956,13 @@ impl Operator {
     /// - The second write will start and return immediately.
     /// - The close will make sure all writes are done in order and return 
result.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op.writer_with("path/to/file").concurrent(8).await?;
     /// w.write(vec![0; 4096]).await?; // Start the first write
@@ -1007,14 +978,13 @@ impl Operator {
     ///
     /// Some storage services support setting `cache_control` as system 
metadata.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op
     ///     .writer_with("path/to/file")
@@ -1033,14 +1003,11 @@ impl Operator {
     ///
     /// Some storage services support setting `content_type` as system 
metadata.
     ///
-    /// ```
-    /// # use std::io::Result;
+    /// ```no_run
+    /// # use opendal::Result;
     /// # use opendal::Operator;
-    /// # use futures::StreamExt;
-    /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op
     ///     .writer_with("path/to/file")
@@ -1060,13 +1027,12 @@ impl Operator {
     /// Some storage services support setting `content_disposition` as system 
metadata.
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op
     ///     .writer_with("path/to/file")
@@ -1082,13 +1048,12 @@ impl Operator {
     /// # Examples
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// # use futures::StreamExt;
     /// # use futures::SinkExt;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut w = op
     ///     .writer_with("path/to/file")
@@ -1149,11 +1114,10 @@ impl Operator {
     /// The following example will append data to existing file instead.
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = b"hello, world!".to_vec();
     /// let _ = op.write_with("path/to/file", bs).append(true).await?;
@@ -1168,11 +1132,10 @@ impl Operator {
     /// Some storage services support setting `cache_control` as system 
metadata.
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = b"hello, world!".to_vec();
     /// let _ = op
@@ -1190,11 +1153,10 @@ impl Operator {
     /// Some storage services support setting `content_type` as system 
metadata.
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = b"hello, world!".to_vec();
     /// let _ = op
@@ -1212,11 +1174,10 @@ impl Operator {
     /// Some storage services support setting `content_disposition` as system 
metadata.
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = b"hello, world!".to_vec();
     /// let _ = op
@@ -1230,11 +1191,10 @@ impl Operator {
     /// # Examples
     ///
     /// ```
-    /// # use std::io::Result;
+    /// # use opendal::Result;
     /// # use opendal::Operator;
     /// use bytes::Bytes;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let bs = b"hello, world!".to_vec();
     /// let _ = op
@@ -1288,7 +1248,6 @@ impl Operator {
     /// # use anyhow::Result;
     /// # use futures::io;
     /// # use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.delete("test").await?;
     /// # Ok(())
@@ -1311,7 +1270,6 @@ impl Operator {
     /// # use futures::io;
     /// # use opendal::Operator;
     ///
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.delete_with("test").await?;
     /// # Ok(())
@@ -1344,7 +1302,6 @@ impl Operator {
     /// # use futures::io;
     /// # use opendal::Operator;
     /// #
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.remove(vec!["abc".to_string(), "def".to_string()])
     ///     .await?;
@@ -1374,7 +1331,6 @@ impl Operator {
     /// # use opendal::Operator;
     /// use futures::stream;
     /// #
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let stream = stream::iter(vec!["abc".to_string(), "def".to_string()]);
     /// op.remove_via(stream).await?;
@@ -1428,7 +1384,6 @@ impl Operator {
     /// # use futures::io;
     /// # use opendal::Operator;
     /// #
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// op.remove_all("path/to/dir").await?;
     /// # Ok(())
@@ -1519,7 +1474,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op.list("path/to/dir/").await?;
     /// for entry in entries {
@@ -1550,7 +1504,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op.list("path/to/prefix").await?;
     /// for entry in entries {
@@ -1597,7 +1550,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op
     ///     .list_with("path/to/dir/")
@@ -1617,7 +1569,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op.list_with("path/to/dir/").recursive(true).await?;
     /// # Ok(())
@@ -1643,7 +1594,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op
     ///     .list_with("dir/")
@@ -1681,7 +1631,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = op.list_with("path/to/dir/").recursive(true).await?;
     /// for entry in entries {
@@ -1708,7 +1657,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut entries = 
op.list_with("path/to/prefix").recursive(true).await?;
     /// for entry in entries {
@@ -1767,7 +1715,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut ds = op.lister("path/to/dir/").await?;
     /// while let Some(mut de) = ds.try_next().await? {
@@ -1806,7 +1753,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut lister = op
     ///     .lister_with("path/to/dir/")
@@ -1826,7 +1772,6 @@ impl Operator {
     /// ```no_run
     /// # use opendal::Result;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut lister = op.lister_with("path/to/dir/").recursive(true).await?;
     /// # Ok(())
@@ -1853,7 +1798,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut lister = op
     ///     .lister_with("dir/")
@@ -1890,7 +1834,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut lister = op.lister_with("path/to/dir/").recursive(true).await?;
     /// while let Some(mut entry) = lister.try_next().await? {
@@ -1917,7 +1860,6 @@ impl Operator {
     /// use opendal::EntryMode;
     /// use opendal::Metakey;
     /// use opendal::Operator;
-    /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut ds = op
     ///     .lister_with("path/to/dir/")
@@ -1966,7 +1908,6 @@ impl Operator {
     /// use opendal::Operator;
     /// use std::time::Duration;
     ///
-    /// #[tokio::main]
     /// async fn test(op: Operator) -> Result<()> {
     ///     let signed_req = 
op.presign_stat("test",Duration::from_secs(3600)).await?;
     ///     let req = http::Request::builder()
@@ -1996,7 +1937,6 @@ impl Operator {
     /// use opendal::Operator;
     /// use std::time::Duration;
     ///
-    /// #[tokio::main]
     /// async fn test(op: Operator) -> Result<()> {
     ///     let signed_req = 
op.presign_stat_with("test",Duration::from_secs(3600)).override_content_disposition("attachment;
 filename=\"othertext.txt\"").await?;
     /// #    Ok(())
@@ -2039,7 +1979,6 @@ impl Operator {
     /// use opendal::Operator;
     /// use std::time::Duration;
     ///
-    /// #[tokio::main]
     /// async fn test(op: Operator) -> Result<()> {
     ///     let signed_req = op.presign_read("test.txt", 
Duration::from_secs(3600)).await?;
     /// #    Ok(())
diff --git a/core/src/types/scheme.rs b/core/src/types/scheme.rs
index 7ae406bc6b..1e7918729c 100644
--- a/core/src/types/scheme.rs
+++ b/core/src/types/scheme.rs
@@ -177,7 +177,7 @@ impl Scheme {
     ///
     /// # Examples
     ///
-    /// ```rust
+    /// ```rust,no_run
     /// use opendal::Scheme;
     ///
     /// let enabled_schemes = Scheme::enabled();
diff --git a/core/src/types/writer.rs b/core/src/types/writer.rs
index 0048a1f862..9a235c0a0d 100644
--- a/core/src/types/writer.rs
+++ b/core/src/types/writer.rs
@@ -126,14 +126,13 @@ impl Writer {
     /// # Examples
     ///
     /// ```no_run
-    /// use std::io::Result;
+    /// use opendal::Result;
     ///
     /// use bytes::Bytes;
     /// use futures::stream;
     /// use futures::StreamExt;
     /// use opendal::Operator;
     ///
-    /// #[tokio::main]
     /// async fn sink_example(op: Operator) -> Result<()> {
     ///     let mut w = op.writer_with("path/to/file").await?;
     ///     let stream = stream::iter(vec![vec![0; 4096], vec![1; 
4096]]).map(Ok);
@@ -177,7 +176,7 @@ impl Writer {
     /// # Examples
     ///
     /// ```no_run
-    /// use std::io::Result;
+    /// use opendal::Result;
     ///
     /// use bytes::Bytes;
     /// use futures::io::Cursor;
@@ -185,7 +184,6 @@ impl Writer {
     /// use futures::StreamExt;
     /// use opendal::Operator;
     ///
-    /// #[tokio::main]
     /// async fn copy_example(op: Operator) -> Result<()> {
     ///     let mut w = op.writer_with("path/to/file").await?;
     ///     let reader = Cursor::new(vec![0; 4096]);

Reply via email to