You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by gi...@apache.org on 2023/05/08 18:03:22 UTC

[incubator-opendal] branch gh-pages updated: deploy: 4246bfdf2dcd1791564570eced04de80d0484d35

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

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 7f0a4e83 deploy: 4246bfdf2dcd1791564570eced04de80d0484d35
7f0a4e83 is described below

commit 7f0a4e83b44feff98a032b9791883c11757fc088
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Mon May 8 18:03:15 2023 +0000

    deploy: 4246bfdf2dcd1791564570eced04de80d0484d35
---
 404.html                                           |   4 +-
 assets/js/ae4554eb.5a053722.js                     |   1 -
 assets/js/ae4554eb.9595f2ed.js                     |   1 +
 assets/js/c377a04b.232123b7.js                     |   1 +
 assets/js/c377a04b.5e6913f8.js                     |   1 -
 ...e~main.818cbf68.js => runtime~main.ca1a7582.js} |   2 +-
 blog/archive/index.html                            |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 docs/index.html                                    |   6 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  56 +++---
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/python/opendal.html                           |  50 +++---
 docs/python/search.js                              |   2 +-
 docs/rust/implementors/core/clone/trait.Clone.js   |   2 +-
 docs/rust/implementors/core/convert/trait.From.js  |   2 +-
 .../implementors/core/default/trait.Default.js     |   2 +-
 docs/rust/implementors/core/fmt/trait.Debug.js     |   2 +-
 docs/rust/implementors/core/marker/trait.Freeze.js |   2 +-
 docs/rust/implementors/core/marker/trait.Send.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Sync.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Unpin.js  |   2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |   2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |   2 +-
 docs/rust/opendal/all.html                         |   2 +-
 docs/rust/opendal/layers/struct.MadsimServer.html  |   6 +-
 docs/rust/opendal/ops/enum.BatchOperation.html     |   6 +-
 docs/rust/opendal/ops/enum.PresignOperation.html   |   4 +-
 docs/rust/opendal/ops/index.html                   |   4 +-
 docs/rust/opendal/ops/sidebar-items.js             |   2 +-
 docs/rust/opendal/ops/struct.OpBatch.html          |  10 +-
 docs/rust/opendal/ops/struct.OpCopy.html           |   6 +-
 docs/rust/opendal/ops/struct.OpCreate.html         |  23 ---
 docs/rust/opendal/ops/struct.OpCreateDir.html      |  23 +++
 docs/rust/opendal/ops/struct.OpDelete.html         |   2 +-
 docs/rust/opendal/ops/struct.OpPresign.html        |  10 +-
 docs/rust/opendal/ops/struct.OpRead.html           |  26 +--
 docs/rust/opendal/ops/struct.OpRename.html         |   6 +-
 docs/rust/opendal/ops/struct.OpScan.html           |  24 ---
 docs/rust/opendal/ops/struct.OpStat.html           |  14 +-
 docs/rust/opendal/ops/struct.OpWrite.html          |  22 +--
 .../opendal/raw/adapters/kv/struct.Backend.html    |  51 +++---
 .../raw/adapters/typed_kv/struct.Backend.html      |  51 +++---
 docs/rust/opendal/raw/enum.BatchedReply.html       |   4 +-
 docs/rust/opendal/raw/enum.Operation.html          |   4 +-
 docs/rust/opendal/raw/index.html                   |   2 +-
 docs/rust/opendal/raw/oio/fn.to_flat_pager.html    |   2 +-
 docs/rust/opendal/raw/oio/struct.ToFlatPager.html  |   8 +-
 docs/rust/opendal/raw/oio/trait.BlockingPage.html  |   2 +-
 docs/rust/opendal/raw/oio/trait.Page.html          |   2 +-
 ...truct.RpCreate.html => struct.RpCreateDir.html} |   6 +-
 docs/rust/opendal/raw/rps/struct.RpScan.html       |  11 --
 docs/rust/opendal/raw/sidebar-items.js             |   2 +-
 docs/rust/opendal/raw/struct.AccessorInfo.html     |  22 +--
 docs/rust/opendal/raw/struct.PresignedRequest.html |  12 +-
 docs/rust/opendal/raw/struct.RpBatch.html          |   8 +-
 docs/rust/opendal/raw/struct.RpCopy.html           |   6 +-
 docs/rust/opendal/raw/struct.RpCreate.html         |  21 ---
 docs/rust/opendal/raw/struct.RpCreateDir.html      |  21 +++
 docs/rust/opendal/raw/struct.RpDelete.html         |   2 +-
 docs/rust/opendal/raw/struct.RpPresign.html        |   8 +-
 docs/rust/opendal/raw/struct.RpRead.html           |  12 +-
 docs/rust/opendal/raw/struct.RpRename.html         |   6 +-
 docs/rust/opendal/raw/struct.RpScan.html           |  21 ---
 docs/rust/opendal/raw/struct.RpStat.html           |  10 +-
 docs/rust/opendal/raw/struct.RpWrite.html          |   6 +-
 docs/rust/opendal/raw/trait.Accessor.html          | 125 ++++++--------
 docs/rust/opendal/raw/trait.Layer.html             |  14 +-
 docs/rust/opendal/raw/trait.LayeredAccessor.html   |  74 ++++----
 docs/rust/opendal/raw/type.FusedAccessor.html      |   2 +-
 docs/rust/opendal/struct.BlockingOperator.html     |  29 ++--
 docs/rust/opendal/struct.Capability.html           |   8 +-
 docs/rust/opendal/struct.Error.html                |   2 +-
 docs/rust/opendal/struct.Operator.html             |  43 +++--
 docs/rust/opendal/struct.OperatorInfo.html         |  11 +-
 ...truct.OpCreate.html => struct.OpCreateDir.html} |   6 +-
 docs/rust/opendal/types/ops/struct.OpScan.html     |  11 --
 docs/rust/search-index.js                          |   2 +-
 docs/rust/src/opendal/layers/chaos.rs.html         |  16 --
 docs/rust/src/opendal/layers/complete.rs.html      | 152 ++++++++---------
 .../src/opendal/layers/concurrent_limit.rs.html    |  56 +-----
 docs/rust/src/opendal/layers/error_context.rs.html |  86 +---------
 .../src/opendal/layers/immutable_index.rs.html     |  70 +++-----
 docs/rust/src/opendal/layers/logging.rs.html       | 190 +--------------------
 docs/rust/src/opendal/layers/madsim.rs.html        |  36 ----
 docs/rust/src/opendal/layers/metrics.rs.html       | 134 +--------------
 docs/rust/src/opendal/layers/minitrace.rs.html     |  40 +----
 docs/rust/src/opendal/layers/oteltrace.rs.html     |  46 +----
 docs/rust/src/opendal/layers/prometheus.rs.html    |  84 +--------
 docs/rust/src/opendal/layers/retry.rs.html         |  80 +--------
 docs/rust/src/opendal/layers/tracing.rs.html       |  34 +---
 docs/rust/src/opendal/layers/type_eraser.rs.html   |  26 ---
 docs/rust/src/opendal/raw/accessor.rs.html         |  82 +--------
 .../src/opendal/raw/adapters/kv/backend.rs.html    |  52 +++++-
 .../opendal/raw/adapters/typed_kv/backend.rs.html  |  48 +++++-
 docs/rust/src/opendal/raw/layer.rs.html            |  48 +-----
 .../rust/src/opendal/raw/oio/to_flat_pager.rs.html |  10 +-
 docs/rust/src/opendal/raw/rps.rs.html              |  12 +-
 .../src/opendal/services/azblob/backend.rs.html    |   6 +-
 .../src/opendal/services/azdfs/backend.rs.html     |   4 +-
 docs/rust/src/opendal/services/fs/backend.rs.html  |   8 +-
 docs/rust/src/opendal/services/ftp/backend.rs.html |   4 +-
 docs/rust/src/opendal/services/gcs/backend.rs.html |   6 +-
 .../rust/src/opendal/services/ghac/backend.rs.html |   8 +-
 .../rust/src/opendal/services/hdfs/backend.rs.html |   8 +-
 .../src/opendal/services/ipmfs/backend.rs.html     |   4 +-
 docs/rust/src/opendal/services/obs/backend.rs.html |   6 +-
 docs/rust/src/opendal/services/oss/backend.rs.html |   6 +-
 docs/rust/src/opendal/services/s3/backend.rs.html  |   6 +-
 .../rust/src/opendal/services/sftp/backend.rs.html |   6 +-
 .../rust/src/opendal/services/sled/backend.rs.html |   2 +-
 .../src/opendal/services/supabase/backend.rs.html  |   6 +-
 .../src/opendal/services/wasabi/backend.rs.html    |   6 +-
 .../src/opendal/services/webdav/backend.rs.html    |  22 ++-
 .../src/opendal/services/webhdfs/backend.rs.html   |  22 ++-
 docs/rust/src/opendal/types/capability.rs.html     |  14 --
 .../types/operator/blocking_operator.rs.html       |  14 +-
 .../src/opendal/types/operator/metadata.rs.html    |  10 --
 .../src/opendal/types/operator/operator.rs.html    |  82 ++++++++-
 docs/rust/src/opendal/types/ops.rs.html            |  58 +------
 docs/vision/index.html                             |   6 +-
 index.html                                         |   4 +-
 128 files changed, 837 insertions(+), 1802 deletions(-)

diff --git a/404.html b/404.html
index 9d38e6d2..0a5b8def 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/ae4554eb.5a053722.js b/assets/js/ae4554eb.5a053722.js
deleted file mode 100644
index 908d3518..00000000
--- a/assets/js/ae4554eb.5a053722.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.9595f2ed.js b/assets/js/ae4554eb.9595f2ed.js
new file mode 100644
index 00000000..11f3ddc7
--- /dev/null
+++ b/assets/js/ae4554eb.9595f2ed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/c377a04b.232123b7.js b/assets/js/c377a04b.232123b7.js
new file mode 100644
index 00000000..db6d0b90
--- /dev/null
+++ b/assets/js/c377a04b.232123b7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
diff --git a/assets/js/c377a04b.5e6913f8.js b/assets/js/c377a04b.5e6913f8.js
deleted file mode 100644
index 98bf6508..00000000
--- a/assets/js/c377a04b.5e6913f8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.818cbf68.js b/assets/js/runtime~main.ca1a7582.js
similarity index 95%
rename from assets/js/runtime~main.818cbf68.js
rename to assets/js/runtime~main.ca1a7582.js
index e6b8bd35..6f3994a3 100644
--- a/assets/js/runtime~main.818cbf68.js
+++ b/assets/js/runtime~main.ca1a7582.js
@@ -1 +1 @@
-(()=>{"use strict";var e,t,r,a,o,f={},n={};function c(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return f[e].call(r.exports,r,r.exports,c),r.exports}c.m=f,e=[],c.O=(t,r,a,o)=>{if(!r){var f=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var n=!0,i=0;i<r.length;i++)(!1&o||f>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(n=!1,o<f&&(f=o));if(n){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
+(()=>{"use strict";var e,t,r,a,o,f={},n={};function c(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return f[e].call(r.exports,r,r.exports,c),r.exports}c.m=f,e=[],c.O=(t,r,a,o)=>{if(!r){var f=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var n=!0,i=0;i<r.length;i++)(!1&o||f>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(n=!1,o<f&&(f=o));if(n){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index fc2d337b..15536ea3 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 98faa50c..f9b87415 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index 92be8dc8..e264c5ea 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 7137d618..6cc4fa18 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">One post tagged with &quot;announcement&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index e913ecc8..3204a22e 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 5f77b5a4..b197ccd4 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 1b11baed..8c906d9b 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index b26ad79a..e29ce2d2 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index de1630b3..e1c4a03e 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -61,7 +61,7 @@ thing internally.</p>
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index bf263e6d..92ccd194 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -73,7 +73,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -83,7 +83,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -93,7 +93,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -103,7 +103,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -114,7 +114,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -136,7 +136,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index da08da7a..4d01acea 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -75,7 +75,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> options: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type" data-tsd-kind="Class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="check" class="tsd-anchor"></a>
@@ -94,7 +94,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -117,7 +117,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -140,7 +140,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -161,7 +161,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -182,7 +182,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -208,7 +208,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -229,7 +229,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -250,7 +250,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L86">index.d.ts:86</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L86">index.d.ts:86</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -271,7 +271,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -294,7 +294,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -317,7 +317,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -341,7 +341,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -365,7 +365,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -389,7 +389,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -410,7 +410,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -431,7 +431,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Buffer</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -457,7 +457,7 @@
 <h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -483,7 +483,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -507,7 +507,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -531,7 +531,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -554,7 +554,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -577,7 +577,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -608,7 +608,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -629,7 +629,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -652,7 +652,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -675,7 +675,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 5b249e24..bea360bf 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -40,21 +40,21 @@
 <div class="tsd-comment tsd-typography"><p>HTTP headers of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">method<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">url<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>URL of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/60bcbf7/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/4246bfd/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 1bcb0376..123ce1e6 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -156,19 +156,19 @@
                     <a class="class" href="#Metadata">Metadata</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_type">content_type</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                 </ul>
 
@@ -852,67 +852,67 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="Metadata.content_length" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_length</span><span class="annotation">: int</span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_length"></a>
+    <a class="headerlink" href="#Metadata.etag"></a>
     
-            <div class="docstring"><p>Content length of this entry.</p>
+            <div class="docstring"><p>ETag of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_type" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_type"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>Content Type of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.etag" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.etag"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>Content Type of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.content_length" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+            <span class="name">content_length</span><span class="annotation">: int</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.content_length"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>Content length of this entry.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index 2007c061..73fd026c 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/rust/implementors/core/clone/trait.Clone.js b/docs/rust/implementors/core/clone/trait.Clone.js
index 9a8f3a5d..fe92f9a2 100644
--- a/docs/rust/implementors/core/clone/trait.Clone.js
+++ b/docs/rust/implementors/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpRead.html\" title=\"struct opendal::raw::RpRead\">RpRead</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.Operator.html\" title=\"struct opendal [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/struct.Operator.html\" title=\"struct opendal::Operator\">Operator</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/layers/struct.PrometheusLayer.html\" title=\"str [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/convert/trait.From.js b/docs/rust/implementors/core/convert/trait.From.js
index d86d5f1a..4ad9d9b4 100644
--- a/docs/rust/implementors/core/convert/trait.From.js
+++ b/docs/rust/implementors/core/convert/trait.From.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"opendal/raw/struct.RpDelete.html\" title=\"struct opendal::raw::RpDelete\">RpDelete</a>&gt; for <a class=\"enum\" href=\"opendal/raw/enum.BatchedReply.html\" title=\"enum opendal::raw::BatchedReply\">BatchedReply</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From. [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"opendal/raw/struct.RpDelete.html\" title=\"struct opendal::raw::RpDelete\">RpDelete</a>&gt; for <a class=\"enum\" href=\"opendal/raw/enum.BatchedReply.html\" title=\"enum opendal::raw::BatchedReply\">BatchedReply</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From. [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/default/trait.Default.js b/docs/rust/implementors/core/default/trait.Default.js
index aa4739dc..415bd158 100644
--- a/docs/rust/implementors/core/default/trait.Default.js
+++ b/docs/rust/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Fs.html\" title=\"struct opendal::services::Fs\">FsBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpRename. [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Fs.html\" title=\"struct opendal::services::Fs\">FsBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/ops/struct.OpCreateD [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/fmt/trait.Debug.js b/docs/rust/implementors/core/fmt/trait.Debug.js
index f7376e70..97d795e8 100644
--- a/docs/rust/implementors/core/fmt/trait.Debug.js
+++ b/docs/rust/implementors/core/fmt/trait.Debug.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/struct.Operator.html\" title=\"struct opendal::Operator\">Operato [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpWrite.html\" title=\"struct opendal::raw::RpWrite\">RpWrite</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\ [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Freeze.js b/docs/rust/implementors/core/marker/trait.Freeze.js
index f54186ca..7ab638ef 100644
--- a/docs/rust/implementors/core/marker/trait.Freeze.js
+++ b/docs/rust/implementors/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Send.js b/docs/rust/implementors/core/marker/trait.Send.js
index 59acc9b0..27581c0d 100644
--- a/docs/rust/implementors/core/marker/trait.Send.js
+++ b/docs/rust/implementors/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Sync.js b/docs/rust/implementors/core/marker/trait.Sync.js
index d22d5ce8..c522378b 100644
--- a/docs/rust/implementors/core/marker/trait.Sync.js
+++ b/docs/rust/implementors/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Unpin.js b/docs/rust/implementors/core/marker/trait.Unpin.js
index 3d0b05be..dd890f0a 100644
--- a/docs/rust/implementors/core/marker/trait.Unpin.js
+++ b/docs/rust/implementors/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 1c97356d..087d1fae 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 7399c0f1..e4f555d5 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 552001ca..3791d30c 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/layers/struct.MadsimServer.html b/docs/rust/opendal/layers/struct.MadsimServer.html
index 46010548..1e03c291 100644
--- a/docs/rust/opendal/layers/struct.MadsimServer.html
+++ b/docs/rust/opendal/layers/struct.MadsimServer.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A simulated server.This an experimental feature, docs are not ready yet."><title>MadsimServer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MadsimServer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/madsim.rs.html#374-408">source</a><a href="#impl-MadsimServer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MadsimServer.html" [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-MadsimServer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/madsim.rs.html#371">source</a><a href="#impl-Clone-for-MadsimServer" class="anchor">§</a><h3 class="code- [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A simulated server.This an experimental feature, docs are not ready yet."><title>MadsimServer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MadsimServer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/madsim.rs.html#356-390">source</a><a href="#impl-MadsimServer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MadsimServer.html" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-MadsimServer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/madsim.rs.html#353">source</a><a href="#impl-Clone-for-MadsimServer" class="anchor">§</a><h3 class="code- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/enum.BatchOperation.html b/docs/rust/opendal/ops/enum.BatchOperation.html
index be060871..9dae777b 100644
--- a/docs/rust/opendal/ops/enum.BatchOperation.html
+++ b/docs/rust/opendal/ops/enum.BatchOperation.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Batch operation used for batch."><title>BatchOperation in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../ [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Batch operation used for batch."><title>BatchOperation in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../ [...]
 pub enum BatchOperation {
     Delete(<a class="struct" href="struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>),
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Batch operation used for batch.</p>
 </div></details><h2 id="variants" class="variants small-section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variant [...]
-</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BatchOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#240-248">source</a><a href="#impl-BatchOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.BatchOperation.html" title [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BatchOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#227">source</a><a href="#impl-Clone-for-BatchOperation" class="anchor">§</a><h3 class="code- [...]
+</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BatchOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#214-222">source</a><a href="#impl-BatchOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.BatchOperation.html" title [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BatchOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#201">source</a><a href="#impl-Clone-for-BatchOperation" class="anchor">§</a><h3 class="code- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/enum.PresignOperation.html b/docs/rust/opendal/ops/enum.PresignOperation.html
index dd42a336..be28926f 100644
--- a/docs/rust/opendal/ops/enum.PresignOperation.html
+++ b/docs/rust/opendal/ops/enum.PresignOperation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Presign operation used for presign."><title>PresignOperation in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin hre [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Presign operation used for presign."><title>PresignOperation in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin hre [...]
 pub enum PresignOperation {
     Stat(<a class="struct" href="struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>),
     Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>),
@@ -7,7 +7,7 @@ pub enum PresignOperation {
 </div></details><h2 id="variants" class="variants small-section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variant [...]
 </div><section id="variant.Read" class="variant"><a href="#variant.Read" class="anchor">§</a><h3 class="code-header">Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>)</h3></section><div class="docblock"><p>Presign a read operation.</p>
 </div><section id="variant.Write" class="variant"><a href="#variant.Write" class="anchor">§</a><h3 class="code-header">Write(<a class="struct" href="struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>)</h3></section><div class="docblock"><p>Presign a write operation.</p>
-</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#174">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class= [...]
+</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#148">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class= [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/index.html b/docs/rust/opendal/ops/index.html
index 4fe7f20f..d25bb49a 100644
--- a/docs/rust/opendal/ops/index.html
+++ b/docs/rust/opendal/ops/index.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Ops provides the operation args struct like `OpRead` for user."><title>opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossori [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Ops provides the operation args struct like `OpRead` for user."><title>opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossori [...]
 <p>By using ops, users can add more context for operation.</p>
-</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a></div><div class="desc docblock-short">Args for <code>batch</code> operation.</div></li><li><div class="item-name"><a class="struct" href="struct.OpCopy.html" title="struct opendal::ops::OpCopy">OpCopy</a></div><div class="desc docblock-short">Args for [...]
\ No newline at end of file
+</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a></div><div class="desc docblock-short">Args for <code>batch</code> operation.</div></li><li><div class="item-name"><a class="struct" href="struct.OpCopy.html" title="struct opendal::ops::OpCopy">OpCopy</a></div><div class="desc docblock-short">Args for [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/ops/sidebar-items.js b/docs/rust/opendal/ops/sidebar-items.js
index ada62bbe..03e8800a 100644
--- a/docs/rust/opendal/ops/sidebar-items.js
+++ b/docs/rust/opendal/ops/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["BatchOperation","PresignOperation"],"struct":["OpBatch","OpCopy","OpCreate","OpDelete","OpList","OpPresign","OpRead","OpRename","OpScan","OpStat","OpWrite"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["BatchOperation","PresignOperation"],"struct":["OpBatch","OpCopy","OpCreateDir","OpDelete","OpList","OpPresign","OpRead","OpRename","OpStat","OpWrite"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/ops/struct.OpBatch.html b/docs/rust/opendal/ops/struct.OpBatch.html
index 2dacdeaf..2c1a0325 100644
--- a/docs/rust/opendal/ops/struct.OpBatch.html
+++ b/docs/rust/opendal/ops/struct.OpBatch.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `batch` operation."><title>OpBatch in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.f [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#209-224">source</a><a href="#impl-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpBatch.html" title="struct open [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#216-218">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="enum" href="enum.BatchOperation [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#221-223">source</a><h4 class="code-header">pub fn <a href="#method.into_operation" class="fn">into_operation</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/ [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#204">source</a><a href="#impl-Clone-for-OpBatch" class="anchor">§</a><h3 class="code-header">impl < [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `batch` operation."><title>OpBatch in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.f [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#183-198">source</a><a href="#impl-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpBatch.html" title="struct open [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#190-192">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="enum" href="enum.BatchOperation [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#195-197">source</a><h4 class="code-header">pub fn <a href="#method.into_operation" class="fn">into_operation</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#178">source</a><a href="#impl-Clone-for-OpBatch" class="anchor">§</a><h3 class="code-header">impl < [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpCopy.html b/docs/rust/opendal/ops/struct.OpCopy.html
index 2002f8e5..307669a1 100644
--- a/docs/rust/opendal/ops/struct.OpCopy.html
+++ b/docs/rust/opendal/ops/struct.OpCopy.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `copy` operation."><title>OpCopy in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#430-435">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#427">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `copy` operation."><title>OpCopy in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#404-409">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#401">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpCreate.html b/docs/rust/opendal/ops/struct.OpCreate.html
deleted file mode 100644
index 33551ef1..00000000
--- a/docs/rust/opendal/ops/struct.OpCreate.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `create` operation."><title>OpCreate in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
-<p>The path must be normalized.</p>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCreate" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#32-37">source</a><a href="#impl-OpCreate" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCreate.html" title="struct ope [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCreate" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#29">source</a><a href="#impl-Clone-for-OpCreate" class="anchor">§</a><h3 class="code-header">impl  [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-OpCreate" class="impl"><a href="#impl-FutureExt-for-OpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn < [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-OpCreate" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-OpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tracing [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-OpCreate" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-OpCreate" class="anchor">§</a><h3 class="code-header"> [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-OpCreate" class="impl"><a href="#impl-Pointable-for-OpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-head [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
-    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-OpCreate" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">source [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-OpCreate" class="impl"><a href="#impl-Erased-for-OpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased for  [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/ops/struct.OpCreateDir.html b/docs/rust/opendal/ops/struct.OpCreateDir.html
new file mode 100644
index 00000000..d76451b3
--- /dev/null
+++ b/docs/rust/opendal/ops/struct.OpCreateDir.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `create` operation."><title>OpCreateDir in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../sta [...]
+<p>The path must be normalized.</p>
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCreateDir" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#32-37">source</a><a href="#impl-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCreateDir.html" title="s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCreateDir" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#29">source</a><a href="#impl-Clone-for-OpCreateDir" class="anchor">§</a><h3 class="code-header" [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-OpCreateDir" class="impl"><a href="#impl-FutureExt-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header [...]
+wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-OpCreateDir" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait t [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-OpCreateDir" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-OpCreateDir" class="anchor">§</a><h3 class="code-he [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-OpCreateDir" class="impl"><a href="#impl-Pointable-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="cod [...]
+    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-OpCreateDir" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">sou [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-OpCreateDir" class="impl"><a href="#impl-Erased-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erase [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/ops/struct.OpDelete.html b/docs/rust/opendal/ops/struct.OpDelete.html
index c4c34635..7ce8a532 100644
--- a/docs/rust/opendal/ops/struct.OpDelete.html
+++ b/docs/rust/opendal/ops/struct.OpDelete.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `delete` operation."><title>OpDelete in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
 <p>The path must be normalized.</p>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#45-50">source</a><a href="#impl-OpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpDelete.html" title="struct ope [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#42">source</a><a href="#impl-Clone-for-OpDelete" class="anchor">§</a><h3 class="code-header">impl  [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#42">source</a><a href="#impl-Clone-for-OpDelete" class="anchor">§</a><h3 class="code-header">impl  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpPresign.html b/docs/rust/opendal/ops/struct.OpPresign.html
index 95dbc0c8..205ddfae 100644
--- a/docs/rust/opendal/ops/struct.OpPresign.html
+++ b/docs/rust/opendal/ops/struct.OpPresign.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `presign` operation."><title>OpPresign in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../stat [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `presign` operation."><title>OpPresign in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../stat [...]
 <p>The path must be normalized.</p>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#153-171">source</a><a href="#impl-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpPresign.html" title="struc [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#163-165">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PresignOperation.html" title="enum opendal::ops::PresignOperation">PresignOperation</a></h4></section></summary><div class="docblock"><p>Get operation from [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.expire" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#168-170">source</a><h4 class="code-header">pub fn <a href="#method.expire" class="fn">expire</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a></h4></section></summary><div class="docblock"><p>Get expir [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#146">source</a><a href="#impl-Clone-for-OpPresign" class="anchor">§</a><h3 class="code-header">im [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#127-145">source</a><a href="#impl-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpPresign.html" title="struc [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#137-139">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PresignOperation.html" title="enum opendal::ops::PresignOperation">PresignOperation</a></h4></section></summary><div class="docblock"><p>Get operation from [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.expire" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#142-144">source</a><h4 class="code-header">pub fn <a href="#method.expire" class="fn">expire</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a></h4></section></summary><div class="docblock"><p>Get expir [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#120">source</a><a href="#impl-Clone-for-OpPresign" class="anchor">§</a><h3 class="code-header">im [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpRead.html b/docs/rust/opendal/ops/struct.OpRead.html
index fcac1920..96451183 100644
--- a/docs/rust/opendal/ops/struct.OpRead.html
+++ b/docs/rust/opendal/ops/struct.OpRead.html
@@ -1,17 +1,17 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `read` operation."><title>OpRead in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#260-321">source</a><a href="#impl-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRead.html" title="struct opendal [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_range" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#267-270">source</a><h4 class="code-header">pub fn <a href="#method.with_range" class="fn">with_range</a>(self, range: <a class="struct" href="../raw/struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new OpRe [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#273-275">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(&amp;self) -&gt; <a class="struct" href="../raw/struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a></h4></section></summary><div class="docblock"><p>Get range from OpRead.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#278-281">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; S [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#285-287">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>& [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `read` operation."><title>OpRead in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#234-295">source</a><a href="#impl-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRead.html" title="struct opendal [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_range" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#241-244">source</a><h4 class="code-header">pub fn <a href="#method.with_range" class="fn">with_range</a>(self, range: <a class="struct" href="../raw/struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new OpRe [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#247-249">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(&amp;self) -&gt; <a class="struct" href="../raw/struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a></h4></section></summary><div class="docblock"><p>Get range from OpRead.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#252-255">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; S [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#259-261">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>& [...]
 operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#290-293">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#296-298">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class=" [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#301-304">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match o [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#307-309">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#312-315">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#318-320">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#251">source</a><a href="#impl-Clone-for-OpRead" class="anchor">§</a><h3 class="code-header">impl <a  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#264-267">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#270-272">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class=" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#275-278">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#281-283">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#286-289">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#292-294">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#225">source</a><a href="#impl-Clone-for-OpRead" class="anchor">§</a><h3 class="code-header">impl <a  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpRename.html b/docs/rust/opendal/ops/struct.OpRename.html
index 1af40159..27787d51 100644
--- a/docs/rust/opendal/ops/struct.OpRename.html
+++ b/docs/rust/opendal/ops/struct.OpRename.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `rename` operation."><title>OpRename in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#441-446">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct o [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#438">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `rename` operation."><title>OpRename in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#415-420">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct o [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#412">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpScan.html b/docs/rust/opendal/ops/struct.OpScan.html
deleted file mode 100644
index 71e4e7a0..00000000
--- a/docs/rust/opendal/ops/struct.OpScan.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `scan` operation."><title>OpScan in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpScan" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#125-141">source</a><a href="#impl-OpScan" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpScan.html" title="struct opendal [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_limit" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#132-135">source</a><h4 class="code-header">pub fn <a href="#method.with_limit" class="fn">with_limit</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the limit of this list o [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.limit" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#138-140">source</a><h4 class="code-header">pub fn <a href="#method.limit" class="fn">limit</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/pr [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpScan" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#118">source</a><a href="#impl-Clone-for-OpScan" class="anchor">§</a><h3 class="code-header">impl <a  [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-OpScan" class="impl"><a href="#impl-FutureExt-for-OpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn <a cl [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-OpScan" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-OpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tracing::in [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-OpScan" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-OpScan" class="anchor">§</a><h3 class="code-header">impl [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-OpScan" class="impl"><a href="#impl-Pointable-for-OpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-header"> [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
-    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-OpScan" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">source</ [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-OpScan" class="impl"><a href="#impl-Erased-for-OpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased for T</h [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/ops/struct.OpStat.html b/docs/rust/opendal/ops/struct.OpStat.html
index f1edeb94..b85abeb7 100644
--- a/docs/rust/opendal/ops/struct.OpStat.html
+++ b/docs/rust/opendal/ops/struct.OpStat.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `stat` operation."><title>OpStat in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#330-357">source</a><a href="#impl-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpStat.html" title="struct opendal [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#337-340">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match o [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#343-345">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#348-351">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#354-356">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#324">source</a><a href="#impl-Clone-for-OpStat" class="anchor">§</a><h3 class="code-header">impl <a  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `stat` operation."><title>OpStat in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fil [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#304-331">source</a><a href="#impl-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpStat.html" title="struct opendal [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#311-314">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#317-319">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#322-325">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#328-330">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#298">source</a><a href="#impl-Clone-for-OpStat" class="anchor">§</a><h3 class="code-header">impl <a  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/ops/struct.OpWrite.html b/docs/rust/opendal/ops/struct.OpWrite.html
index 2c19dbe6..3ec6cce0 100644
--- a/docs/rust/opendal/ops/struct.OpWrite.html
+++ b/docs/rust/opendal/ops/struct.OpWrite.html
@@ -1,18 +1,18 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `write` operation."><title>OpWrite in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.f [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#368-424">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct open [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `write` operation."><title>OpWrite in opendal::ops - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.f [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#342-398">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct open [...]
 <p>If input path is not a file path, an error will be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_length" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#379-381">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_length" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#353-355">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc. [...]
 <p>The content length is the total length of the data to be written.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_length" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#387-390">source</a><h4 class="code-header">pub fn <a href="#method.with_content_length" class="fn">with_content_length</a>(self, content_length: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_length" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#361-364">source</a><h4 class="code-header">pub fn <a href="#method.with_content_length" class="fn">with_content_length</a>(self, content_length: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p [...]
 <p>If the content length is not set, the content length will be
 calculated automatically by buffering part of data.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#393-395">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.r [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#398-401">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#404-406">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#409-412">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#415-417">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#420-423">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#360">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl < [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#367-369">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.r [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#372-375">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#378-380">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#383-386">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#389-391">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://do [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#394-397">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock">< [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/ops.rs.html#334">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl < [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/adapters/kv/struct.Backend.html b/docs/rust/opendal/raw/adapters/kv/struct.Backend.html
index 8afb367f..d3d930df 100644
--- a/docs/rust/opendal/raw/adapters/kv/struct.Backend.html
+++ b/docs/rust/opendal/raw/adapters/kv/struct.Backend.html
@@ -6,17 +6,17 @@ a series of basic operation for this service.</p>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#41-58">source</a><a href="#impl-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="struct" href [...]
     S: <a class="trait" href="trait.Adapter.html" title="trait opendal::raw::adapters::kv::Adapter">Adapter</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#46-51">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(kv: S) -&gt; Self</h4></section></summary><div class [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.with_root" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#54-57">source</a><h4 class="code-header">pub fn <a href="#method.with_root" class="fn">with_root</a>(self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Configure root w [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#61-215">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" class=" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#61-233">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" class=" [...]
 <code>blocking_read</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Writer" class="associatedtype trait-impl"><a href="#associatedtype.Writer" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Writer" class="associatedtype">Writer</a> = KvWriter&lt;S&gt;</h4></section></summary><div class='docblock'>Writer is the associated writer the could return in <code>write</code> operation.</div></de [...]
-<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = KvPager</h4></section></summary><div class='docblock'>Pager is the associated page that return in <code>list</code> or <code>scan</code> operation.</div></det [...]
-<code>blocking_list</code> or <code>scan</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#69-87">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.AccessorInfo [...]
+<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = KvPager</h4></section></summary><div class='docblock'>Pager is the associated page that return in <code>list</code> operation.</div></details><details class=" [...]
+<code>blocking_list</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#69-91">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.AccessorInfo.html" title="struct  [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    __arg2: <a class="struct" href="../../../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    __arg2: <a class="struct" href="../../../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#95-100">source</a><a href="#method.blocking_create_dir" c [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#99-104">source</a><a href="#method.blocking_create_dir" c [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
@@ -24,11 +24,11 @@ a series of basic operation for this service.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>read</code> operation on the specified path, returns a
-<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#116-126">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-header"> [...]
+<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#120-130">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-header"> [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
@@ -36,36 +36,36 @@ a series of basic operation for this service.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>write</code> operation on the specified path, returns a
-written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#141-152">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn">block [...]
+written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#145-156">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn">block [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#170-184">source</a><a href="#method.blocking_stat" class="anchor">§</a [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#174-188">source</a><a href="#method.blocking_stat" class="anchor">§</a [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#193-198">source</a><a href="#method.blocking_delete" class="anch [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#197-202">source</a><a href="#method.blocking_delete" class="anch [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    __arg2: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>scan</code> operation on the specified path. <a href="../../trait.Accessor.html#method.scan">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_scan" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#208-214">source</a><a href="#method.blocking_scan" class="anchor">§</a [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#219-232">source</a><a href="#method.blocking_list" class="anchor">§</a [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    _: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_scan</code> operation on the specified path. <a href= [...]
+    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -83,30 +83,19 @@ written size if operate successful. <a href="../../trait.Accessor.html#method.wr
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>rename</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.rename">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#213-220">source</a><a href="#method.list" c [...]
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#245-252">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header [...]
+    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>rename</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.rename">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#229-236">source</a><a href="#method.pres [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>presign</code> operation on the specified path. <a href="../../trait.Accessor.html#method.presign">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#257-264">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>presign</code> operation on the specified path. <a href="../../trait.Accessor.html#method.presign">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#241-248">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
     &amp;'life0 self,
     args: <a class="struct" href="../../../ops/struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>batch</code> operations. <a href="../../trait.Accessor.html#method.batch">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#313-320">source</a><a href="#method.blocking_copy" class="anchor">§</a><h4 class="code-header">fn <a [...]
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
+    'life0: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>batch</code> operations. <a href="../../trait.Accessor.html#method.batch">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#297-304">source</a><a href="#method.blocking_copy" class="anchor">§</a><h4 class="code-header">fn <a [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-Backend%3CS%3E" class="impl"><a href="#impl-Send-for-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for < [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-Backend%3CS%3E" c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html b/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
index 975d61af..39de4d26 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
+++ b/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
@@ -2,17 +2,17 @@
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#37-54">source</a><a href="#impl-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="struct [...]
     S: <a class="trait" href="trait.Adapter.html" title="trait opendal::raw::adapters::typed_kv::Adapter">Adapter</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#42-47">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(kv: S) -&gt; Self</h4></section></summar [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.with_root" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#50-53">source</a><h4 class="code-header">pub fn <a href="#method.with_root" class="fn">with_root</a>(self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Configure  [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#57-207">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" c [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#57-222">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" c [...]
 <code>blocking_read</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Writer" class="associatedtype trait-impl"><a href="#associatedtype.Writer" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Writer" class="associatedtype">Writer</a> = KvWriter&lt;S&gt;</h4></section></summary><div class='docblock'>Writer is the associated writer the could return in <code>write</code> operation.</div></de [...]
-<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = KvPager</h4></section></summary><div class='docblock'>Pager is the associated page that return in <code>list</code> or <code>scan</code> operation.</div></det [...]
-<code>blocking_list</code> or <code>scan</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#65-95">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.Access [...]
+<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = KvPager</h4></section></summary><div class='docblock'>Pager is the associated page that return in <code>list</code> operation.</div></details><details class=" [...]
+<code>blocking_list</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#65-96">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.AccessorInfo.html" title="s [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    __arg2: <a class="struct" href="../../../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    __arg2: <a class="struct" href="../../../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#103-108">source</a><a href="#method.blocking_create [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#104-109">source</a><a href="#method.blocking_create [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
@@ -20,11 +20,11 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>read</code> operation on the specified path, returns a
-<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#125-136">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-he [...]
+<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#126-137">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-he [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
@@ -32,36 +32,36 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>write</code> operation on the specified path, returns a
-written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#144-148">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn" [...]
+written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#145-149">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn" [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#164-176">source</a><a href="#method.blocking_stat" class="anchor [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#165-177">source</a><a href="#method.blocking_stat" class="anchor [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#185-190">source</a><a href="#method.blocking_delete" class [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#186-191">source</a><a href="#method.blocking_delete" class [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    __arg2: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>scan</code> operation on the specified path. <a href="../../trait.Accessor.html#method.scan">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_scan" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#200-206">source</a><a href="#method.blocking_scan" class="anchor [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#208-221">source</a><a href="#method.blocking_list" class="anchor [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    _: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_scan</code> operation on the specified path. <a href= [...]
+    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -79,30 +79,19 @@ written size if operate successful. <a href="../../trait.Accessor.html#method.wr
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>rename</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.rename">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#213-220">source</a><a href="#method.list" c [...]
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#245-252">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header [...]
+    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>rename</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.rename">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#229-236">source</a><a href="#method.pres [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>presign</code> operation on the specified path. <a href="../../trait.Accessor.html#method.presign">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#257-264">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>presign</code> operation on the specified path. <a href="../../trait.Accessor.html#method.presign">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#241-248">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
     &amp;'life0 self,
     args: <a class="struct" href="../../../ops/struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>batch</code> operations. <a href="../../trait.Accessor.html#method.batch">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#313-320">source</a><a href="#method.blocking_copy" class="anchor">§</a><h4 class="code-header">fn <a [...]
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
+    'life0: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>batch</code> operations. <a href="../../trait.Accessor.html#method.batch">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#297-304">source</a><a href="#method.blocking_copy" class="anchor">§</a><h4 class="code-header">fn <a [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-Backend%3CS%3E" class="impl"><a href="#impl-Send-for-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for < [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-Backend%3CS%3E" c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/raw/enum.BatchedReply.html b/docs/rust/opendal/raw/enum.BatchedReply.html
index c2b518aa..3f1ecbb2 100644
--- a/docs/rust/opendal/raw/enum.BatchedReply.html
+++ b/docs/rust/opendal/raw/enum.BatchedReply.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Batch results of `batch` operations."><title>BatchedReply in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href=" [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Batch results of `batch` operations."><title>BatchedReply in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href=" [...]
     Delete(<a class="struct" href="struct.RpDelete.html" title="struct opendal::raw::RpDelete">RpDelete</a>),
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Batch results of <code>batch</code> operations.</p>
 </div></details><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.Delete" class="variant"><a href="#variant.Delete" class="anchor">§</a><h3 class="code-header">Delete(<a class="struct" href="struct.RpDelete.html" title="struct opendal::raw::RpDelete">RpDelete</a>)</h3></section><div class="docblock"><p>results of <code>delete batch</code> operation</p>
-</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-From%3CRpDelete%3E-for-BatchedReply" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#161-165">source</a><a href="#impl-From%3CRpDelete%3E-for-BatchedReply" class="anchor">§</a><h3 class="code-he [...]
+</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-From%3CRpDelete%3E-for-BatchedReply" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#157-161">source</a><a href="#impl-From%3CRpDelete%3E-for-BatchedReply" class="anchor">§</a><h3 class="code-he [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/enum.Operation.html b/docs/rust/opendal/raw/enum.Operation.html
index 79fa792d..68c8d918 100644
--- a/docs/rust/opendal/raw/enum.Operation.html
+++ b/docs/rust/opendal/raw/enum.Operation.html
@@ -31,7 +31,7 @@ pub enum Operation {
 </div><section id="variant.Stat" class="variant"><a href="#variant.Stat" class="anchor">§</a><h3 class="code-header">Stat</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.stat" title="method opendal::raw::Accessor::stat"><code>crate::raw::Accessor::stat</code></a></p>
 </div><section id="variant.Delete" class="variant"><a href="#variant.Delete" class="anchor">§</a><h3 class="code-header">Delete</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.delete" title="method opendal::raw::Accessor::delete"><code>crate::raw::Accessor::delete</code></a></p>
 </div><section id="variant.List" class="variant"><a href="#variant.List" class="anchor">§</a><h3 class="code-header">List</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.list" title="method opendal::raw::Accessor::list"><code>crate::raw::Accessor::list</code></a></p>
-</div><section id="variant.Scan" class="variant"><a href="#variant.Scan" class="anchor">§</a><h3 class="code-header">Scan</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.scan" title="method opendal::raw::Accessor::scan"><code>crate::raw::Accessor::scan</code></a></p>
+</div><section id="variant.Scan" class="variant"><a href="#variant.Scan" class="anchor">§</a><h3 class="code-header">Scan</h3></section><div class="docblock"><p>Operation for [<code>crate::raw::Accessor::scan</code>]</p>
 </div><section id="variant.Batch" class="variant"><a href="#variant.Batch" class="anchor">§</a><h3 class="code-header">Batch</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.batch" title="method opendal::raw::Accessor::batch"><code>crate::raw::Accessor::batch</code></a></p>
 </div><section id="variant.Presign" class="variant"><a href="#variant.Presign" class="anchor">§</a><h3 class="code-header">Presign</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.presign" title="method opendal::raw::Accessor::presign"><code>crate::raw::Accessor::presign</code></a></p>
 </div><section id="variant.BlockingCreateDir" class="variant"><a href="#variant.BlockingCreateDir" class="anchor">§</a><h3 class="code-header">BlockingCreateDir</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_create_dir" title="method opendal::raw::Accessor::blocking_create_dir"><code>crate::raw::Accessor::blocking_create_dir</code></a></p>
@@ -42,7 +42,7 @@ pub enum Operation {
 </div><section id="variant.BlockingStat" class="variant"><a href="#variant.BlockingStat" class="anchor">§</a><h3 class="code-header">BlockingStat</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_stat" title="method opendal::raw::Accessor::blocking_stat"><code>crate::raw::Accessor::blocking_stat</code></a></p>
 </div><section id="variant.BlockingDelete" class="variant"><a href="#variant.BlockingDelete" class="anchor">§</a><h3 class="code-header">BlockingDelete</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_delete" title="method opendal::raw::Accessor::blocking_delete"><code>crate::raw::Accessor::blocking_delete</code></a></p>
 </div><section id="variant.BlockingList" class="variant"><a href="#variant.BlockingList" class="anchor">§</a><h3 class="code-header">BlockingList</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_list" title="method opendal::raw::Accessor::blocking_list"><code>crate::raw::Accessor::blocking_list</code></a></p>
-</div><section id="variant.BlockingScan" class="variant"><a href="#variant.BlockingScan" class="anchor">§</a><h3 class="code-header">BlockingScan</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_scan" title="method opendal::raw::Accessor::blocking_scan"><code>crate::raw::Accessor::blocking_scan</code></a></p>
+</div><section id="variant.BlockingScan" class="variant"><a href="#variant.BlockingScan" class="anchor">§</a><h3 class="code-header">BlockingScan</h3></section><div class="docblock"><p>Operation for [<code>crate::raw::Accessor::blocking_scan</code>]</p>
 </div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Operation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/operation.rs.html#70-75">source</a><a href="#impl-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Operation.html" title="enum openda [...]
 </div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header" [...]
     H: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
diff --git a/docs/rust/opendal/raw/index.html b/docs/rust/opendal/raw/index.html
index a91ec7ac..341116ca 100644
--- a/docs/rust/opendal/raw/index.html
+++ b/docs/rust/opendal/raw/index.html
@@ -9,5 +9,5 @@ API should never expose raw API directly.</li>
 them whenever possible.</li>
 </ul>
 </div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="adapters/index.html" title="mod opendal::raw::adapters">adapters</a></div><div class="desc docblock-short">Providing adapters and its implementations.</div></li><li><div class="item-name"><a class="mod" href="oio/index.html" title="mod opendal::raw::oio">oio</a></div><div class="desc docblock-short"><code>oio</code> provid [...]
-output.</div></li></ul><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.AccessorInfo.html" title="struct opendal::raw::AccessorInfo">AccessorInfo</a></div><div class="desc docblock-short">Metadata for accessor, users can use this metadata to get information of underlying backend.</div></li><li><div class="item-name"><a class="struct" href="struct.BytesContentRange.html" title= [...]
+output.</div></li></ul><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.AccessorInfo.html" title="struct opendal::raw::AccessorInfo">AccessorInfo</a></div><div class="desc docblock-short">Metadata for accessor, users can use this metadata to get information of underlying backend.</div></li><li><div class="item-name"><a class="struct" href="struct.BytesContentRange.html" title= [...]
 method to inner.</div></li><li><div class="item-name"><a class="trait" href="trait.Part.html" title="trait opendal::raw::Part">Part</a></div><div class="desc docblock-short">Part is a trait for multipart part.</div></li></ul><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2><ul class="item-table"><li><div class="item-name"><a class="fn" href="fn.build_abs_path.html" title="fn opendal::raw::build_abs_path">build_abs_path</a></div><div class="desc docbl [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/fn.to_flat_pager.html b/docs/rust/opendal/raw/oio/fn.to_flat_pager.html
index f38c9188..02e3abdd 100644
--- a/docs/rust/opendal/raw/oio/fn.to_flat_pager.html
+++ b/docs/rust/opendal/raw/oio/fn.to_flat_pager.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="to_flat_pager is used to make a hierarchy pager flat."><title>to_flat_pager in opendal::raw::oio - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="to_flat_pager is used to make a hierarchy pager flat."><title>to_flat_pager in opendal::raw::oio - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font [...]
     acc: A,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     size: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a>
diff --git a/docs/rust/opendal/raw/oio/struct.ToFlatPager.html b/docs/rust/opendal/raw/oio/struct.ToFlatPager.html
index 7e286658..01ffe482 100644
--- a/docs/rust/opendal/raw/oio/struct.ToFlatPager.html
+++ b/docs/rust/opendal/raw/oio/struct.ToFlatPager.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="ToFlatPager will walk dir in bottom up way:"><title>ToFlatPager in opendal::raw::oio - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cros [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="ToFlatPager will walk dir in bottom up way:"><title>ToFlatPager in opendal::raw::oio - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cros [...]
 <ul>
 <li>List nested dir first</li>
 <li>Go back into parent dirs one by one</li>
@@ -25,11 +25,11 @@ We only make sure the nested dirs will show up before parent dirs.</p>
 <p>Especially, for storage services that can’t return dirs first, ToFlatPager
 may output parent dirs’ files before nested dirs, this is expected because files
 always output directly while listing.</p>
-</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingPage-for-ToFlatPager%3CA,+P%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#158-216">source</a><a href="#impl-BlockingPage-for-ToFlatPager%3CA,+P%3E" class="anch [...]
+</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingPage-for-ToFlatPager%3CA,+P%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#154-212">source</a><a href="#impl-BlockingPage-for-ToFlatPager%3CA,+P%3E" class="anch [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;BlockingPager = P&gt;,
-    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#163-215">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingPage.html#tymeth [...]
+    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#159-211">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingPage.html#tymeth [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;Pager = P&gt;,
-    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#103-155">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Page.html#tymethod.next" class="fn">next</a> [...]
+    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_flat_pager.rs.html#99-151">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Page.html#tymethod.next" class="fn">next</a>& [...]
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
diff --git a/docs/rust/opendal/raw/oio/trait.BlockingPage.html b/docs/rust/opendal/raw/oio/trait.BlockingPage.html
index 757b5a91..68065cd2 100644
--- a/docs/rust/opendal/raw/oio/trait.BlockingPage.html
+++ b/docs/rust/opendal/raw/oio/trait.BlockingPage.html
@@ -5,6 +5,6 @@
 </div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.next" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page.rs.html#104">source</a><h4 class="code-header">fn <a href="#tymethod.next" class="fn">next</a>(&amp;mut self) -&gt; <a class="type" href="../../type.Result.html" title [...]
 <p><code>Ok(None)</code> means all pages have been returned. Any following call
 to <code>next</code> will always get the same result.</p>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-BlockingPage-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page.rs.html#116-120">source</a><a href="#impl-BlockingPage-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.BlockingPage.html" ti [...]
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-BlockingPage-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page.rs.html#116-120">source</a><a href="#impl-BlockingPage-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.BlockingPage.html" ti [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;BlockingPager = P&gt;,
     P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section><section id="impl-BlockingPage-for-ToHierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_hierarchy_pager.rs.html#136-150">source</a><a href="#impl-BlockingPage-for-ToHierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.BlockingPage.html" title="tr [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Page.html b/docs/rust/opendal/raw/oio/trait.Page.html
index 7f988918..7d6cbfed 100644
--- a/docs/rust/opendal/raw/oio/trait.Page.html
+++ b/docs/rust/opendal/raw/oio/trait.Page.html
@@ -22,6 +22,6 @@ to <code>next</code> will always get the same result.</p>
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-Page-for-Pager" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page.rs.html#75-79">source</a><a href="#impl-Page-for-Pager" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Page.html" title="trait opendal::raw::o [...]
+    'life0: 'async_trait,</span></h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-Page-for-Pager" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page.rs.html#75-79">source</a><a href="#impl-Page-for-Pager" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Page.html" title="trait opendal::raw::o [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;Pager = P&gt;,
     P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section><section id="impl-Page-for-ToHierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/to_hierarchy_pager.rs.html#120-134">source</a><a href="#impl-Page-for-ToHierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>&gt; <a cla [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/rps/struct.RpCreate.html b/docs/rust/opendal/raw/rps/struct.RpCreateDir.html
similarity index 63%
rename from docs/rust/opendal/raw/rps/struct.RpCreate.html
rename to docs/rust/opendal/raw/rps/struct.RpCreateDir.html
index 63d19ba3..cb05037f 100644
--- a/docs/rust/opendal/raw/rps/struct.RpCreate.html
+++ b/docs/rust/opendal/raw/rps/struct.RpCreateDir.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.RpCreate.html">
+    <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.RpCreateDir.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../opendal/raw/struct.RpCreate.html">../../../opendal/raw/struct.RpCreate.html</a>...</p>
-    <script>location.replace("../../../opendal/raw/struct.RpCreate.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../opendal/raw/struct.RpCreateDir.html">../../../opendal/raw/struct.RpCreateDir.html</a>...</p>
+    <script>location.replace("../../../opendal/raw/struct.RpCreateDir.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/rps/struct.RpScan.html b/docs/rust/opendal/raw/rps/struct.RpScan.html
deleted file mode 100644
index 2f78b9bf..00000000
--- a/docs/rust/opendal/raw/rps/struct.RpScan.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.RpScan.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../opendal/raw/struct.RpScan.html">../../../opendal/raw/struct.RpScan.html</a>...</p>
-    <script>location.replace("../../../opendal/raw/struct.RpScan.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/sidebar-items.js b/docs/rust/opendal/raw/sidebar-items.js
index 34894dbf..16df06d3 100644
--- a/docs/rust/opendal/raw/sidebar-items.js
+++ b/docs/rust/opendal/raw/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"constant":["VERSION"],"enum":["AsyncBody","BatchedReply","Operation"],"fn":["build_abs_path","build_header_value","build_rel_path","build_rooted_abs_path","format_authorization_by_basic","format_authorization_by_bearer","format_content_md5","get_basename","get_parent","new_json_deserialize_error","new_json_serialize_error","new_request_build_error","new_request_credential_error","new_request_sign_error","new_xml_deserialize_error","normalize_path","normalize_root [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"constant":["VERSION"],"enum":["AsyncBody","BatchedReply","Operation"],"fn":["build_abs_path","build_header_value","build_rel_path","build_rooted_abs_path","format_authorization_by_basic","format_authorization_by_bearer","format_content_md5","get_basename","get_parent","new_json_deserialize_error","new_json_serialize_error","new_request_build_error","new_request_credential_error","new_request_sign_error","new_xml_deserialize_error","normalize_path","normalize_root [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.AccessorInfo.html b/docs/rust/opendal/raw/struct.AccessorInfo.html
index 941c33e4..21ccc60e 100644
--- a/docs/rust/opendal/raw/struct.AccessorInfo.html
+++ b/docs/rust/opendal/raw/struct.AccessorInfo.html
@@ -1,20 +1,20 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata for accessor, users can use this metadata to get information of underlying backend."><title>AccessorInfo in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel= [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AccessorInfo" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#525-581">source</a><a href="#impl-AccessorInfo" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.AccessorInfo.html"  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_scheme" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#532-535">source</a><h4 class="code-header">pub fn <a href="#method.set_scheme" class="fn">set_scheme</a>(&amp;mut self, scheme: <a class="enum" href="../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.reference.h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#538-540">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Root of backend, will be in format like <code>/path/t [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_root" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#545-548">source</a><h4 class="code-header">pub fn <a href="#method.set_root" class="fn">set_root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.refer [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata for accessor, users can use this metadata to get information of underlying backend."><title>AccessorInfo in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel= [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AccessorInfo" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#490-546">source</a><a href="#impl-AccessorInfo" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.AccessorInfo.html"  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_scheme" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#497-500">source</a><h4 class="code-header">pub fn <a href="#method.set_scheme" class="fn">set_scheme</a>(&amp;mut self, scheme: <a class="enum" href="../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.reference.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#503-505">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Root of backend, will be in format like <code>/path/t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_root" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#510-513">source</a><h4 class="code-header">pub fn <a href="#method.set_root" class="fn">set_root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.refer [...]
 <p>Note: input root must be normalized.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.name" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#556-558">source</a><h4 class="code-header">pub fn <a href="#method.name" class="fn">name</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Name of backend, could be empty if underlying backend [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.name" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#521-523">source</a><h4 class="code-header">pub fn <a href="#method.name" class="fn">name</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Name of backend, could be empty if underlying backend [...]
 <p>For example:</p>
 <ul>
 <li>name for <code>s3</code> =&gt; bucket name</li>
 <li>name for <code>azblob</code> =&gt; container name</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_name" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#561-564">source</a><h4 class="code-header">pub fn <a href="#method.set_name" class="fn">set_name</a>(&amp;mut self, name: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.refer [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#567-569">source</a><h4 class="code-header">pub fn <a href="#method.capability" class="fn">capability</a>(&amp;self) -&gt; <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a></h4></section></summary><div class="docblock"><p>Get backend’s capabilities.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.capability_mut" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#572-574">source</a><h4 class="code-header">pub fn <a href="#method.capability_mut" class="fn">capability_mut</a>(&amp;mut self) -&gt; &amp;mut <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a></h4></section></summary><div class="docblock"><p>Get ba [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#577-580">source</a><h4 class="code-header">pub fn <a href="#method.set_capability" class="fn">set_capability</a>(&amp;mut self, capability: <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.or [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-AccessorInfo" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#516">source</a><a href="#impl-Clone-for-AccessorInfo" class="anchor">§</a><h3 class="code-h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_name" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#526-529">source</a><h4 class="code-header">pub fn <a href="#method.set_name" class="fn">set_name</a>(&amp;mut self, name: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.refer [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#532-534">source</a><h4 class="code-header">pub fn <a href="#method.capability" class="fn">capability</a>(&amp;self) -&gt; <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a></h4></section></summary><div class="docblock"><p>Get backend’s capabilities.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.capability_mut" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#537-539">source</a><h4 class="code-header">pub fn <a href="#method.capability_mut" class="fn">capability_mut</a>(&amp;mut self) -&gt; &amp;mut <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a></h4></section></summary><div class="docblock"><p>Get ba [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#542-545">source</a><h4 class="code-header">pub fn <a href="#method.set_capability" class="fn">set_capability</a>(&amp;mut self, capability: <a class="struct" href="../struct.Capability.html" title="struct opendal::Capability">Capability</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.or [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-AccessorInfo" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#481">source</a><a href="#impl-Clone-for-AccessorInfo" class="anchor">§</a><h3 class="code-h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.PresignedRequest.html b/docs/rust/opendal/raw/struct.PresignedRequest.html
index e22c92b2..8b70e1e5 100644
--- a/docs/rust/opendal/raw/struct.PresignedRequest.html
+++ b/docs/rust/opendal/raw/struct.PresignedRequest.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PresignedRequest is a presigned request return by `presign`."><title>PresignedRequest in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="fo [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-PresignedRequest" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#64-88">source</a><a href="#impl-PresignedRequest" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.PresignedRequest.h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.method" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#75-77">source</a><h4 class="code-header">pub fn <a href="#method.method" class="fn">method</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/method/struct.Method.html" title="struct http::method::Method">Method</a></h4></section></summary><div class="docblock"><p>Return request’s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.uri" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#80-82">source</a><h4 class="code-header">pub fn <a href="#method.uri" class="fn">uri</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/uri/struct.Uri.html" title="struct http::uri::Uri">Uri</a></h4></section></summary><div class="docblock"><p>Return request’s uri.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.header" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#85-87">source</a><h4 class="code-header">pub fn <a href="#method.header" class="fn">header</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/header/map/struct.HeaderMap.html" title="struct http::header::map::HeaderMap">HeaderMap</a></h4></section></summary><div class="docblock">< [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignedRequest" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#57">source</a><a href="#impl-Clone-for-PresignedRequest" class="anchor">§</a><h3 class="code [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PresignedRequest is a presigned request return by `presign`."><title>PresignedRequest in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="fo [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-PresignedRequest" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#60-84">source</a><a href="#impl-PresignedRequest" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.PresignedRequest.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.method" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#71-73">source</a><h4 class="code-header">pub fn <a href="#method.method" class="fn">method</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/method/struct.Method.html" title="struct http::method::Method">Method</a></h4></section></summary><div class="docblock"><p>Return request’s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uri" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#76-78">source</a><h4 class="code-header">pub fn <a href="#method.uri" class="fn">uri</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/uri/struct.Uri.html" title="struct http::uri::Uri">Uri</a></h4></section></summary><div class="docblock"><p>Return request’s uri.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.header" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#81-83">source</a><h4 class="code-header">pub fn <a href="#method.header" class="fn">header</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://docs.rs/http/0.2.9/http/header/map/struct.HeaderMap.html" title="struct http::header::map::HeaderMap">HeaderMap</a></h4></section></summary><div class="docblock">< [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignedRequest" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#53">source</a><a href="#impl-Clone-for-PresignedRequest" class="anchor">§</a><h3 class="code [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpBatch.html b/docs/rust/opendal/raw/struct.RpBatch.html
index 43314d75..f2e3cff4 100644
--- a/docs/rust/opendal/raw/struct.RpBatch.html
+++ b/docs/rust/opendal/raw/struct.RpBatch.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `batch` operation."><title>RpBatch in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static. [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#138-153">source</a><a href="#impl-RpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpBatch.html" title="struct openda [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.results" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#145-147">source</a><h4 class="code-header">pub fn <a href="#method.results" class="fn">results</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="type" href="../type.Result.html" title= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_results" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#150-152">source</a><h4 class="code-header">pub fn <a href="#method.into_results" class="fn">into_results</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/1.69.0/a [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `batch` operation."><title>RpBatch in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static. [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpBatch" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#134-149">source</a><a href="#impl-RpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpBatch.html" title="struct openda [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.results" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#141-143">source</a><h4 class="code-header">pub fn <a href="#method.results" class="fn">results</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="type" href="../type.Result.html" title= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_results" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#146-148">source</a><h4 class="code-header">pub fn <a href="#method.into_results" class="fn">into_results</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/1.69.0/a [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-RpBatch" class="impl"><a href="#impl-RefUnwindSafe-for-RpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title=" [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
diff --git a/docs/rust/opendal/raw/struct.RpCopy.html b/docs/rust/opendal/raw/struct.RpCopy.html
index 42ff4803..ef81d98a 100644
--- a/docs/rust/opendal/raw/struct.RpCopy.html
+++ b/docs/rust/opendal/raw/struct.RpCopy.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `copy` operation."><title>RpCopy in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#206-211">source</a><a href="#impl-RpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpCopy.html" title="struct opendal:: [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#203">source</a><a href="#impl-Clone-for-RpCopy" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `copy` operation."><title>RpCopy in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#202-207">source</a><a href="#impl-RpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpCopy.html" title="struct opendal:: [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpCopy" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#199">source</a><a href="#impl-Clone-for-RpCopy" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpCreate.html b/docs/rust/opendal/raw/struct.RpCreate.html
deleted file mode 100644
index b085a5a9..00000000
--- a/docs/rust/opendal/raw/struct.RpCreate.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `create` operation"><title>RpCreate in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
-</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpCreate" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#23">source</a><a href="#impl-Clone-for-RpCreate" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="h [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-RpCreate" class="impl"><a href="#impl-FutureExt-for-RpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn < [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-RpCreate" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-RpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tracing [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RpCreate" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-RpCreate" class="anchor">§</a><h3 class="code-header"> [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-RpCreate" class="impl"><a href="#impl-Pointable-for-RpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-head [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
-    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-RpCreate" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">source [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-RpCreate" class="impl"><a href="#impl-Erased-for-RpCreate" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased for  [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.RpCreateDir.html b/docs/rust/opendal/raw/struct.RpCreateDir.html
new file mode 100644
index 00000000..c4146728
--- /dev/null
+++ b/docs/rust/opendal/raw/struct.RpCreateDir.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `create_dir` operation"><title>RpCreateDir in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../.. [...]
+</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpCreateDir" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#23">source</a><a href="#impl-Clone-for-RpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-RpCreateDir" class="impl"><a href="#impl-FutureExt-for-RpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header [...]
+wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-RpCreateDir" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-RpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait t [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RpCreateDir" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-RpCreateDir" class="anchor">§</a><h3 class="code-he [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-RpCreateDir" class="impl"><a href="#impl-Pointable-for-RpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="cod [...]
+    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-RpCreateDir" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">sou [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-RpCreateDir" class="impl"><a href="#impl-Erased-for-RpCreateDir" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erase [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.RpDelete.html b/docs/rust/opendal/raw/struct.RpDelete.html
index ce38a2c4..032ef569 100644
--- a/docs/rust/opendal/raw/struct.RpDelete.html
+++ b/docs/rust/opendal/raw/struct.RpDelete.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `delete` operation"><title>RpDelete in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static [...]
-</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#27">source</a><a href="#impl-Clone-for-RpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="h [...]
+</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#27">source</a><a href="#impl-Clone-for-RpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpPresign.html b/docs/rust/opendal/raw/struct.RpPresign.html
index 41dce15c..fd172718 100644
--- a/docs/rust/opendal/raw/struct.RpPresign.html
+++ b/docs/rust/opendal/raw/struct.RpPresign.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `presign` operation."><title>RpPresign in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../sta [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#44-54">source</a><a href="#impl-RpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpPresign.html" title="struct op [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_presigned_request" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#51-53">source</a><h4 class="code-header">pub fn <a href="#method.into_presigned_request" class="fn">into_presigned_request</a>(self) -&gt; <a class="struct" href="struct.PresignedRequest.html" title="struct opendal::raw::PresignedRequest">PresignedRequest</a></h4></section></summary><div class=" [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#39">source</a><a href="#impl-Clone-for-RpPresign" class="anchor">§</a><h3 class="code-header">impl  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `presign` operation."><title>RpPresign in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../sta [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#40-50">source</a><a href="#impl-RpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpPresign.html" title="struct op [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_presigned_request" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#47-49">source</a><h4 class="code-header">pub fn <a href="#method.into_presigned_request" class="fn">into_presigned_request</a>(self) -&gt; <a class="struct" href="struct.PresignedRequest.html" title="struct opendal::raw::PresignedRequest">PresignedRequest</a></h4></section></summary><div class=" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpPresign" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#35">source</a><a href="#impl-Clone-for-RpPresign" class="anchor">§</a><h3 class="code-header">impl  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpRead.html b/docs/rust/opendal/raw/struct.RpRead.html
index 8a4d0fe1..b962f8c4 100644
--- a/docs/rust/opendal/raw/struct.RpRead.html
+++ b/docs/rust/opendal/raw/struct.RpRead.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `read` operation."><title>RpRead in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#109-131">source</a><a href="#impl-RpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpRead.html" title="struct opendal:: [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#118-120">source</a><h4 class="code-header">pub fn <a href="#method.with_metadata" class="fn">with_metadata</a>(meta: <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Create reply read with existing  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#123-125">source</a><h4 class="code-header">pub fn <a href="#method.metadata" class="fn">metadata</a>(&amp;self) -&gt; &amp;<a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Get a ref of metadata.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#128-130">source</a><h4 class="code-header">pub fn <a href="#method.into_metadata" class="fn">into_metadata</a>(self) -&gt; <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Consume reply to get the meta.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#104">source</a><a href="#impl-Clone-for-RpRead" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `read` operation."><title>RpRead in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#105-127">source</a><a href="#impl-RpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpRead.html" title="struct opendal:: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#114-116">source</a><h4 class="code-header">pub fn <a href="#method.with_metadata" class="fn">with_metadata</a>(meta: <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Create reply read with existing  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#119-121">source</a><h4 class="code-header">pub fn <a href="#method.metadata" class="fn">metadata</a>(&amp;self) -&gt; &amp;<a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Get a ref of metadata.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#124-126">source</a><h4 class="code-header">pub fn <a href="#method.into_metadata" class="fn">into_metadata</a>(self) -&gt; <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Consume reply to get the meta.</p>
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpRead" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#100">source</a><a href="#impl-Clone-for-RpRead" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpRename.html b/docs/rust/opendal/raw/struct.RpRename.html
index 4128650e..c951106a 100644
--- a/docs/rust/opendal/raw/struct.RpRename.html
+++ b/docs/rust/opendal/raw/struct.RpRename.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `rename` operation."><title>RpRename in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../stati [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#217-222">source</a><a href="#impl-RpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpRename.html" title="struct ope [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#214">source</a><a href="#impl-Clone-for-RpRename" class="anchor">§</a><h3 class="code-header">impl < [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `rename` operation."><title>RpRename in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../stati [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#213-218">source</a><a href="#impl-RpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpRename.html" title="struct ope [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#210">source</a><a href="#impl-Clone-for-RpRename" class="anchor">§</a><h3 class="code-header">impl < [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpScan.html b/docs/rust/opendal/raw/struct.RpScan.html
deleted file mode 100644
index c561af28..00000000
--- a/docs/rust/opendal/raw/struct.RpScan.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `scan` operation."><title>RpScan in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
-</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpScan" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#35">source</a><a href="#impl-Clone-for-RpScan" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-RpScan" class="impl"><a href="#impl-FutureExt-for-RpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn <a cl [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-RpScan" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-RpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tracing::in [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
-<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-RpScan" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-RpScan" class="anchor">§</a><h3 class="code-header">impl [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-RpScan" class="impl"><a href="#impl-Pointable-for-RpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-header"> [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
-    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-RpScan" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">source</ [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
-<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-RpScan" class="impl"><a href="#impl-Erased-for-RpScan" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased for T</h [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.RpStat.html b/docs/rust/opendal/raw/struct.RpStat.html
index a0305136..2a44cf10 100644
--- a/docs/rust/opendal/raw/struct.RpStat.html
+++ b/docs/rust/opendal/raw/struct.RpStat.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `stat` operation."><title>RpStat in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#173-189">source</a><a href="#impl-RpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpStat.html" title="struct opendal:: [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.map_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#180-183">source</a><h4 class="code-header">pub fn <a href="#method.map_metadata" class="fn">map_metadata</a>(self, f: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="struct" href="../struct.Met [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#186-188">source</a><h4 class="code-header">pub fn <a href="#method.into_metadata" class="fn">into_metadata</a>(self) -&gt; <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Consume RpStat to get the inner metadata.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#168">source</a><a href="#impl-Clone-for-RpStat" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `stat` operation."><title>RpStat in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.fi [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#169-185">source</a><a href="#impl-RpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpStat.html" title="struct opendal:: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.map_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#176-179">source</a><h4 class="code-header">pub fn <a href="#method.map_metadata" class="fn">map_metadata</a>(self, f: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="struct" href="../struct.Met [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_metadata" class="method"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#182-184">source</a><h4 class="code-header">pub fn <a href="#method.into_metadata" class="fn">into_metadata</a>(self) -&gt; <a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></h4></section></summary><div class="docblock"><p>Consume RpStat to get the inner metadata.</p>
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpStat" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#164">source</a><a href="#impl-Clone-for-RpStat" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/struct.RpWrite.html b/docs/rust/opendal/raw/struct.RpWrite.html
index 4f68dfee..3a0febc8 100644
--- a/docs/rust/opendal/raw/struct.RpWrite.html
+++ b/docs/rust/opendal/raw/struct.RpWrite.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `write` operation."><title>RpWrite in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static. [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#195-200">source</a><a href="#impl-RpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpWrite.html" title="struct openda [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#192">source</a><a href="#impl-Clone-for-RpWrite" class="anchor">§</a><h3 class="code-header">impl <a  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reply for `write` operation."><title>RpWrite in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static. [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#191-196">source</a><a href="#impl-RpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpWrite.html" title="struct openda [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#188">source</a><a href="#impl-Clone-for-RpWrite" class="anchor">§</a><h3 class="code-header">impl <a  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/trait.Accessor.html b/docs/rust/opendal/raw/trait.Accessor.html
index 954e352f..be4007d5 100644
--- a/docs/rust/opendal/raw/trait.Accessor.html
+++ b/docs/rust/opendal/raw/trait.Accessor.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Underlying trait of all backends for implementors."><title>Accessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossori [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Underlying trait of all backends for implementors."><title>Accessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossori [...]
     type <a href="#associatedtype.Reader" class="associatedtype">Reader</a>: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>;
     type <a href="#associatedtype.BlockingReader" class="associatedtype">BlockingReader</a>: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>;
     type <a href="#associatedtype.Writer" class="associatedtype">Writer</a>: <a class="trait" href="oio/trait.Write.html" title="trait opendal::raw::oio::Write">Write</a>;
@@ -6,15 +6,15 @@
     type <a href="#associatedtype.Pager" class="associatedtype">Pager</a>: <a class="trait" href="oio/trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>;
     type <a href="#associatedtype.BlockingPager" class="associatedtype">BlockingPager</a>: <a class="trait" href="oio/trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>;
 
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 21 methods</span></summary>    // Required method
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 19 methods</span></summary>    // Required method
     fn <a href="#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="struct.AccessorInfo.html" title="struct opendal::raw::AccessorInfo">AccessorInfo</a>;
 
     // Provided methods
     fn <a href="#method.create_dir" class="fn">create_dir</a>&lt;'life0, 'life1, 'async_trait&gt;(
         &amp;'life0 self,
         path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
+        args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span> { ... }
@@ -78,14 +78,6 @@
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span> { ... }
-<span class="item-spacer"></span>    fn <a href="#method.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
-        &amp;'life0 self,
-        path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
-       <span class="where">where Self: 'async_trait,
-             'life0: 'async_trait,
-             'life1: 'async_trait</span> { ... }
 <span class="item-spacer"></span>    fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
         &amp;'life0 self,
         path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -100,7 +92,11 @@
     ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait</span> { ... }
-<span class="item-spacer"></span>    fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreate.html" title="struct o [...]
+<span class="item-spacer"></span>    fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+        &amp;self,
+        path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+        args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+    ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreateDir.html" title="struct opendal::raw::RpCreateDir">RpCreateDir</a>&gt; { ... }
 <span class="item-spacer"></span>    fn <a href="#method.blocking_read" class="fn">blocking_read</a>(
         &amp;self,
         path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -125,11 +121,6 @@
         path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
         args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
     ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt; { ... }
-<span class="item-spacer"></span>    fn <a href="#method.blocking_scan" class="fn">blocking_scan</a>(
-        &amp;self,
-        path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-    ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt; { ... }
 </details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Underlying trait of all backends for implementors.</p>
 <p>The actual data access of storage service happens in Accessor layer.
 Every storage supported by OpenDAL must implement <a href="trait.Accessor.html" title="trait opendal::raw::Accessor"><code>Accessor</code></a> but not all
@@ -170,9 +161,9 @@ basic operations.
 </div></details><details class="toggle" open><summary><section id="associatedtype.Writer" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#65">source</a><h4 class="code-header">type <a href="#associatedtype.Writer" class="associatedtype">Writer</a>: <a class="trait" href="oio/trait.Write.html" title="trait opendal::raw::oio::Write">Write</a></h4></section></summary><div class="docblock"><p>Writer is the associated writer the could return in <code>w [...]
 </div></details><details class="toggle" open><summary><section id="associatedtype.BlockingWriter" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#68">source</a><h4 class="code-header">type <a href="#associatedtype.BlockingWriter" class="associatedtype">BlockingWriter</a>: <a class="trait" href="oio/trait.BlockingWrite.html" title="trait opendal::raw::oio::BlockingWrite">BlockingWrite</a></h4></section></summary><div class="docblock"><p>BlockingWri [...]
 <code>blocking_write</code> operation.</p>
-</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#70">source</a><h4 class="code-header">type <a href="#associatedtype.Pager" class="associatedtype">Pager</a>: <a class="trait" href="oio/trait.Page.html" title="trait opendal::raw::oio::Page">Page</a></h4></section></summary><div class="docblock"><p>Pager is the associated page that return in <code>list</code> or  [...]
+</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#70">source</a><h4 class="code-header">type <a href="#associatedtype.Pager" class="associatedtype">Pager</a>: <a class="trait" href="oio/trait.Page.html" title="trait opendal::raw::oio::Page">Page</a></h4></section></summary><div class="docblock"><p>Pager is the associated page that return in <code>list</code> ope [...]
 </div></details><details class="toggle" open><summary><section id="associatedtype.BlockingPager" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#73">source</a><h4 class="code-header">type <a href="#associatedtype.BlockingPager" class="associatedtype">BlockingPager</a>: <a class="trait" href="oio/trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a></h4></section></summary><div class="docblock"><p>BlockingPager is  [...]
-<code>blocking_list</code> or <code>scan</code> operation.</p>
+<code>blocking_list</code> operation.</p>
 </div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.info" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#86">source</a><h4 class="code-header">fn <a href="#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="struct.AccessorInfo.html" tit [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This function is required to be implemented.</p>
@@ -185,8 +176,8 @@ some useful information about it self.</p>
 </div></details></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#96-103">source</a><h4 class="code-header">fn <a href="#method.create_dir" class="fn">create_dir</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>create</code> operation on the specified path</p>
@@ -296,16 +287,7 @@ written size if operate successful.</p>
 <li>Input path MUST be dir path, DON’T NEED to check mode.</li>
 <li>List non-exist dir should return Empty.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#225-236">source</a><h4 class="code-header">fn <a href="#method.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>scan</code> operation on the specified path.</p>
-<p>Require <a href="../struct.Capability.html#structfield.scan" title="field opendal::Capability::scan"><code>Capability::scan</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#245-252">source</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#229-236">source</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
@@ -318,43 +300,47 @@ written size if operate successful.</p>
 <ul>
 <li>This API is optional, return <a href="https://doc.rust-lang.org/1.69.0/std/io/error/enum.ErrorKind.html#variant.Unsupported" title="variant std::io::error::ErrorKind::Unsupported"><code>std::io::ErrorKind::Unsupported</code></a> if not supported.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#257-264">source</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.batch" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#241-248">source</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     args: <a class="struct" href="../ops/struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>batch</code> operations.</p>
 <p>Require <a href="../struct.Capability.html#structfield.batch" title="field opendal::Capability::batch"><code>Capability::batch</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#271-278">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpCreate.html" t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#255-262">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+    &amp;self,
+    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreateDir.html" title="struct opendal::raw::RpCreateDir">RpCreateDir</a>&gt;</h4></section></summary><div class="docblock"><p>Invoke the <code>blocking_create</code> operation on the specified path.</p>
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.create_dir" title="method opendal::raw::Accessor::create_dir"><code>Accessor::create_dir</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.create_dir" title="field opendal::Capability::create_dir"><code>Capability::create_dir</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#285-292">source</a><h4 class="code-header">fn <a href="#method.blocking_read" class="fn">blocking_read</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#269-276">source</a><h4 class="code-header">fn <a href="#method.blocking_read" class="fn">blocking_read</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
 ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class="docblock"><p>Invoke the <code>blocking_read</code> operation on the specified path.</p>
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.read" title="method opendal::raw::Accessor::read"><code>Accessor::read</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.read" title="field opendal::Capability::read"><code>Capability::read</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#299-306">source</a><h4 class="code-header">fn <a href="#method.blocking_write" class="fn">blocking_write</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#283-290">source</a><h4 class="code-header">fn <a href="#method.blocking_write" class="fn">blocking_write</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
 ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class="docblock"><p>Invoke the <code>blocking_write</code> operation on the specified path.</p>
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.write" title="method opendal::raw::Accessor::write"><code>Accessor::write</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.write" title="field opendal::Capability::write"><code>Capability::write</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#313-320">source</a><h4 class="code-header">fn <a href="#method.blocking_copy" class="fn">blocking_copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#297-304">source</a><h4 class="code-header">fn <a href="#method.blocking_copy" class="fn">blocking_copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primi [...]
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.copy" title="method opendal::raw::Accessor::copy"><code>Accessor::copy</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.copy" title="field opendal::Capability::copy"><code>Capability::copy</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#327-334">source</a><h4 class="code-header">fn <a href="#method.blocking_rename" class="fn">blocking_rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#311-318">source</a><h4 class="code-header">fn <a href="#method.blocking_rename" class="fn">blocking_rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std [...]
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.rename" title="method opendal::raw::Accessor::rename"><code>Accessor::rename</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.rename" title="field opendal::Capability::rename"><code>Capability::rename</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#341-348">source</a><h4 class="code-header">fn <a href="#method.blocking_stat" class="fn">blocking_stat</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpStat.html" title="struct opendal [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#325-332">source</a><h4 class="code-header">fn <a href="#method.blocking_stat" class="fn">blocking_stat</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpStat.html" title="struct opendal [...]
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.stat" title="method opendal::raw::Accessor::stat"><code>Accessor::stat</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.stat" title="field opendal::Capability::stat"><code>Capability::stat</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#355-362">source</a><h4 class="code-header">fn <a href="#method.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpDelete.html" title="struct [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#339-346">source</a><h4 class="code-header">fn <a href="#method.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpDelete.html" title="struct [...]
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.delete" title="method opendal::raw::Accessor::delete"><code>Accessor::delete</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.write" title="field opendal::Capability::write"><code>Capability::write</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#373-380">source</a><h4 class="code-header">fn <a href="#method.blocking_list" class="fn">blocking_list</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#357-364">source</a><h4 class="code-header">fn <a href="#method.blocking_list" class="fn">blocking_list</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
@@ -365,37 +351,31 @@ written size if operate successful.</p>
 <ul>
 <li>List non-exist dir should return Empty.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_scan" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#385-392">source</a><h4 class="code-header">fn <a href="#method.blocking_scan" class="fn">blocking_scan</a>(
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class="docblock"><p>Invoke the <code>blocking_scan</code> operation on the specified path.</p>
-<p>Require <a href="../struct.Capability.html#structfield.scan" title="field opendal::Capability::scan"><code>Capability::scan</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Accessor-for-()" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#397-413">source</a><a href="#impl-Accessor-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Accessor.html" title="trait open [...]
-</div><div class="impl-items"><section id="associatedtype.Reader-1" class="associatedtype trait-impl"><a href="#associatedtype.Reader-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.unit.html">()</a></h4></section><section id="associatedtype.BlockingReader-1" class="associatedtype trait-impl"><a href="#associatedtype.BlockingReader-1" class="a [...]
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Accessor-for-()" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#369-385">source</a><a href="#impl-Accessor-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Accessor.html" title="trait open [...]
+</div><div class="impl-items"><section id="associatedtype.Reader-1" class="associatedtype trait-impl"><a href="#associatedtype.Reader-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.unit.html">()</a></h4></section><section id="associatedtype.BlockingReader-1" class="associatedtype trait-impl"><a href="#associatedtype.BlockingReader-1" class="a [...]
 <code>Accessor</code> for <code>Arc&lt;dyn Accessor&gt;</code>.</p>
-</div><div class="impl-items"><section id="associatedtype.Reader-2" class="associatedtype trait-impl"><a href="#associatedtype.Reader-2" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = &lt;T as <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;::<a class="associatedtype" href="trait.Accessor.html#associatedtype.Reader" title="type opendal::raw::Accessor::Reader">Reader</a> [...]
+</div><div class="impl-items"><section id="associatedtype.Reader-2" class="associatedtype trait-impl"><a href="#associatedtype.Reader-2" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = &lt;T as <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;::<a class="associatedtype" href="trait.Accessor.html#associatedtype.Reader" title="type opendal::raw::Accessor::Reader">Reader</a> [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.read-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#434-436">source</a><a href="#method.read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.read" class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.read-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#406-408">source</a><a href="#method.read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.read" class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.write-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#437-439">source</a><a href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.write" class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.write-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#409-411">source</a><a href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.write" class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.copy-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#441-443">source</a><a href="#method.copy-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.copy" class="fn">copy</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.copy-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#413-415">source</a><a href="#method.copy-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.copy" class="fn">copy</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -404,7 +384,7 @@ written size if operate successful.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section><section id="method.rename-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#445-447">source</a><a href="#method.rename-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.rename" class="fn">rename</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+    'life2: 'async_trait,</span></h4></section><section id="method.rename-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#417-419">source</a><a href="#method.rename-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.rename" class="fn">rename</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -413,60 +393,53 @@ written size if operate successful.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section><section id="method.stat-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#449-451">source</a><a href="#method.stat-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.stat" class="fn">stat</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life2: 'async_trait,</span></h4></section><section id="method.stat-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#421-423">source</a><a href="#method.stat-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.stat" class="fn">stat</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.delete-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#452-454">source</a><a href="#method.delete-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.delete-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#424-426">source</a><a href="#method.delete-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.list-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#455-457">source</a><a href="#method.list-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.list" class="fn">list</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.list-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#427-429">source</a><a href="#method.list-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.list" class="fn">list</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.scan-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#458-460">source</a><a href="#method.scan-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.batch-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#462-464">source</a><a href="#method.batch-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.batch-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#431-433">source</a><a href="#method.batch-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     args: <a class="struct" href="../ops/struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section><section id="method.presign-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#466-468">source</a><a href="#method.presign-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life0: 'async_trait,</span></h4></section><section id="method.presign-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#435-437">source</a><a href="#method.presign-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.blocking_create_dir-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#470-472">source</a><a href="#method.blocking_create_dir-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a [...]
+    'life1: 'async_trait,</span></h4></section><section id="method.blocking_create_dir-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#439-441">source</a><a href="#method.blocking_create_dir-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+    &amp;self,
+    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreateDir.html" title="struct opendal::raw::RpCreateDir">RpCreateDir</a>&gt;</h4></section><section id="method.blocking_read-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#442-444">source</a><a href="#method.blocking_read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_read" class [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section><section id="method.blocking_write-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/acces [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section><section id="method.blocking_write-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/acces [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section><section id="method.blocking_copy-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/acc [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section><section id="method.blocking_copy-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/acc [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section><section id="method.blocking_scan-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor. [...]
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2>< [...]
\ No newline at end of file
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2>< [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/trait.Layer.html b/docs/rust/opendal/raw/trait.Layer.html
index b3d41af0..7beca0a3 100644
--- a/docs/rust/opendal/raw/trait.Layer.html
+++ b/docs/rust/opendal/raw/trait.Layer.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Layer is used to intercept the operations on the underlying storage."><title>Layer in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Layer is used to intercept the operations on the underlying storage."><title>Layer in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
     type <a href="#associatedtype.LayeredAccessor" class="associatedtype">LayeredAccessor</a>: <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>;
 
     // Required method
@@ -71,14 +71,6 @@ requires <code>Send</code> and <code>Sync</code>.</p>
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         <span class="self">self</span>.inner.blocking_list(path, args)
     }
-
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.inner.scan(path, args).<span class="kw">await
-    </span>}
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.inner.blocking_scan(path, args)
-    }
 }
 
 <span class="doccomment">/// The public struct that exposed to users.
@@ -93,6 +85,6 @@ requires <code>Send</code> and <code>Sync</code>.</p>
         TraceAccessor { inner }
     }
 }</code></pre></div>
-</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.LayeredAccessor" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#129">source</a><h4 class="code-header">type <a href="#associatedtype.LayeredAccessor" class="associatedtype">LayeredAccessor</a>: <a cl [...]
-</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.layer" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#132">source</a><h4 class="code-header">fn <a href="#tymethod.layer" class="fn">layer</a>(&amp;self, inner: A) -&gt; Self::<a class="associatedtype" href="trai [...]
+</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.LayeredAccessor" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#121">source</a><h4 class="code-header">type <a href="#associatedtype.LayeredAccessor" class="associatedtype">LayeredAccessor</a>: <a cl [...]
+</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.layer" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#124">source</a><h4 class="code-header">fn <a href="#tymethod.layer" class="fn">layer</a>(&amp;self, inner: A) -&gt; Self::<a class="associatedtype" href="trai [...]
 </div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-ChaosLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/chaos.rs.html#83-93">source</a><a href="#impl-Layer%3CA%3E-for-ChaosLayer" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait" href="trai [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/trait.LayeredAccessor.html b/docs/rust/opendal/raw/trait.LayeredAccessor.html
index 21d3f439..b5af62d5 100644
--- a/docs/rust/opendal/raw/trait.LayeredAccessor.html
+++ b/docs/rust/opendal/raw/trait.LayeredAccessor.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="LayeredAccessor is layered accessor that forward all not implemented method to inner."><title>LayeredAccessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="pre [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="LayeredAccessor is layered accessor that forward all not implemented method to inner."><title>LayeredAccessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="pre [...]
     type <a href="#associatedtype.Inner" class="associatedtype">Inner</a>: <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>;
     type <a href="#associatedtype.Reader" class="associatedtype">Reader</a>: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>;
     type <a href="#associatedtype.BlockingReader" class="associatedtype">BlockingReader</a>: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>;
@@ -7,7 +7,7 @@
     type <a href="#associatedtype.Pager" class="associatedtype">Pager</a>: <a class="trait" href="oio/trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>;
     type <a href="#associatedtype.BlockingPager" class="associatedtype">BlockingPager</a>: <a class="trait" href="oio/trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>;
 
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 22 methods</span></summary>    // Required methods
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 20 methods</span></summary>    // Required methods
     fn <a href="#tymethod.inner" class="fn">inner</a>(&amp;self) -&gt; &amp;Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.Inner" title="type opendal::raw::LayeredAccessor::Inner">Inner</a>;
 <span class="item-spacer"></span>    fn <a href="#tymethod.read" class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
         &amp;'life0 self,
@@ -33,14 +33,6 @@
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span>;
-<span class="item-spacer"></span>    fn <a href="#tymethod.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
-        &amp;'life0 self,
-        path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
-       <span class="where">where Self: 'async_trait,
-             'life0: 'async_trait,
-             'life1: 'async_trait</span>;
 <span class="item-spacer"></span>    fn <a href="#tymethod.blocking_read" class="fn">blocking_read</a>(
         &amp;self,
         path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -56,19 +48,14 @@
         path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
         args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
     ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingPager" title="type opendal::raw::LayeredAccessor::BlockingPager">BlockingPager</a>)&gt;;
-<span class="item-spacer"></span>    fn <a href="#tymethod.blocking_scan" class="fn">blocking_scan</a>(
-        &amp;self,
-        path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-    ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingPager" title="type opendal::raw::LayeredAccessor::BlockingPager">BlockingPager</a>)&gt;;
 
     // Provided methods
     fn <a href="#method.metadata" class="fn">metadata</a>(&amp;self) -&gt; <a class="struct" href="struct.AccessorInfo.html" title="struct opendal::raw::AccessorInfo">AccessorInfo</a> { ... }
 <span class="item-spacer"></span>    fn <a href="#method.create_dir" class="fn">create_dir</a>&lt;'life0, 'life1, 'async_trait&gt;(
         &amp;'life0 self,
         path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
+        args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal [...]
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span> { ... }
@@ -122,7 +109,11 @@
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span> { ... }
-<span class="item-spacer"></span>    fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreate.html" title="struct o [...]
+<span class="item-spacer"></span>    fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+        &amp;self,
+        path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+        args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+    ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreateDir.html" title="struct opendal::raw::RpCreateDir">RpCreateDir</a>&gt; { ... }
 <span class="item-spacer"></span>    fn <a href="#method.blocking_copy" class="fn">blocking_copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpCopy.html" title="struct opendal::ops::OpCopy">OpCopy</a>) -&gt; <a class="type" href="../type.Result.html" title="type opendal: [...]
 <span class="item-spacer"></span>    fn <a href="#method.blocking_rename" class="fn">blocking_rename</a>(
         &amp;self,
@@ -134,58 +125,47 @@
 <span class="item-spacer"></span>    fn <a href="#method.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpDelete.html" title="struct opendal:: [...]
 </details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>LayeredAccessor is layered accessor that forward all not implemented
 method to inner.</p>
-</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><section id="associatedtype.Inner" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#140">source</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a>: <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Ac [...]
+</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><section id="associatedtype.Inner" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#132">source</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a>: <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Ac [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="tymethod.write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#160">source</a><h4 class="code-header">fn <a href="#tymethod.write" class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="tymethod.write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#152">source</a><h4 class="code-header">fn <a href="#tymethod.write" class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="tymethod.list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#178">source</a><h4 class="code-header">fn <a href="#tymethod.list" class="fn">list</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="tymethod.list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#170">source</a><h4 class="code-header">fn <a href="#tymethod.list" class="fn">list</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="tymethod.scan" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#180">source</a><h4 class="code-header">fn <a href="#tymethod.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="tymethod.blocking_read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#194">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_read" class="fn">blocking_read</a>(
+    'life1: 'async_trait,</span></h4></section><section id="tymethod.blocking_read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#184">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_read" class="fn">blocking_read</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingReader" title="type opendal::raw::LayeredAccessor::BlockingReader">BlockingReader</a>)&gt;</h4></section><section id="tymethod.blocking_write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/la [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingReader" title="type opendal::raw::LayeredAccessor::BlockingReader">BlockingReader</a>)&gt;</h4></section><section id="tymethod.blocking_write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/la [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingWriter" title="type opendal::raw::LayeredAccessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section><section id="tymethod.blocking_list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingWriter" title="type opendal::raw::LayeredAccessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section><section id="tymethod.blocking_list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingPager" title="type opendal::raw::LayeredAccessor::BlockingPager">BlockingPager</a>)&gt;</h4></section><section id="tymethod.blocking_scan" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer. [...]
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingPager" title="type opendal::raw::LayeredAccessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anc [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.LayeredAccessor.html#associatedtype.BlockingPager" title="type opendal::raw::LayeredAccessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anc [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#162-164">source</a><h4 class="code-header">fn <a href="#method.copy" class="fn">copy</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#154-156">source</a><h4 class="code-header">fn <a href="#method.copy" class="fn">copy</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -194,7 +174,7 @@ method to inner.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section><section id="method.rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#166-168">source</a><h4 class="code-header">fn <a href="#method.rename" class="fn">rename</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+    'life2: 'async_trait,</span></h4></section><section id="method.rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#158-160">source</a><h4 class="code-header">fn <a href="#method.rename" class="fn">rename</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -203,30 +183,34 @@ method to inner.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
-    'life2: 'async_trait,</span></h4></section><section id="method.stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#170-172">source</a><h4 class="code-header">fn <a href="#method.stat" class="fn">stat</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life2: 'async_trait,</span></h4></section><section id="method.stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#162-164">source</a><h4 class="code-header">fn <a href="#method.stat" class="fn">stat</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#174-176">source</a><h4 class="code-header">fn <a href="#method.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#166-168">source</a><h4 class="code-header">fn <a href="#method.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.batch" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#182-184">source</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
+    'life1: 'async_trait,</span></h4></section><section id="method.batch" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#172-174">source</a><h4 class="code-header">fn <a href="#method.batch" class="fn">batch</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     args: <a class="struct" href="../ops/struct.OpBatch.html" title="struct opendal::ops::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section><section id="method.presign" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#186-188">source</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life0: 'async_trait,</span></h4></section><section id="method.presign" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#176-178">source</a><h4 class="code-header">fn <a href="#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../type.Result.html" title="type opendal::Re [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section><section id="method.blocking_create_dir" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#190-192">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, args: <a class="struct" href="../ops/struct.OpCreate.html" title="struct opendal::op [...]
\ No newline at end of file
+    'life1: 'async_trait,</span></h4></section><section id="method.blocking_create_dir" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#180-182">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+    &amp;self,
+    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+    args: <a class="struct" href="../ops/struct.OpCreateDir.html" title="struct opendal::ops::OpCreateDir">OpCreateDir</a>
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpCreateDir.html" title="struct opendal::raw::RpCreateDir">RpCreateDir</a>&gt;</h4></section><section id="method.blocking_copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#188-190">source</a><h4 class="code-header">fn <a href="#method.blocking_copy" class="fn">blocking_copy</a>(&amp;self, from: &amp;<a class="primitive" hre [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/type.FusedAccessor.html b/docs/rust/opendal/raw/type.FusedAccessor.html
index cce99a78..bbaa0eec 100644
--- a/docs/rust/opendal/raw/type.FusedAccessor.html
+++ b/docs/rust/opendal/raw/type.FusedAccessor.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FusedAccessor is the type erased accessor with `Arc&lt;dyn Accessor&gt;`."><title>FusedAccessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FusedAccessor is the type erased accessor with `Arc&lt;dyn Accessor&gt;`."><title>FusedAccessor in opendal::raw - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
 </div></details></section></div></main><div id="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="opendal" data-themes="" data-resource-suffix="" data-rustdoc-version="1.69.0 (84c898d65 2023-04-16)" data-search-js="search-8a59a8356673ec1f.js" data-settings-js="settings-f0c5c39777a9a2f6.js" data-settings-css="settings-0bcba95ff279c1db.css" ></div></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.BlockingOperator.html b/docs/rust/opendal/struct.BlockingOperator.html
index 3dbf3b93..ca1159b1 100644
--- a/docs/rust/opendal/struct.BlockingOperator.html
+++ b/docs/rust/opendal/struct.BlockingOperator.html
@@ -28,7 +28,7 @@
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
 
 <span class="kw">let </span>info = op.info();</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#116-783">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docbl [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#116-787">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docbl [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>Use <code>stat</code> if you:</p>
 <ul>
@@ -104,7 +104,7 @@ cache. In this way, we can make sure that no API call will send.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#297-313">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#297-314">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
 <h5 id="notes-2"><a href="#notes-2">Notes</a></h5>
 <p>To indicate that a path is a directory, it is compulsory to include
 a trailing / in the path. Failure to do so may result in
@@ -116,12 +116,12 @@ a trailing / in the path. Failure to do so may result in
 </ul>
 <h5 id="examples-4"><a href="#examples-4">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.create_dir(<span class="string">&quot;path/to/dir/&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#331-333">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#332-334">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
 <p>This function will allocate a new bytes internally. For more precise memory control or
 reading data lazily, please use <a href="struct.BlockingOperator.html#method.reader" title="method opendal::BlockingOperator::reader"><code>BlockingOperator::reader</code></a></p>
 <h5 id="examples-5"><a href="#examples-5">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.read(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#352-380">source</a><h4 class="code-header">pub fn <a href="#method.range_read" class="fn">range_read</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#353-381">source</a><h4 class="code-header">pub fn <a href="#method.range_read" class="fn">range_read</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     range: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.u64.html">u64</a>&gt;
@@ -130,17 +130,17 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.rea
 reading data lazily, please use <a href="struct.BlockingOperator.html#method.range_reader" title="method opendal::BlockingOperator::range_reader"><code>BlockingOperator::range_reader</code></a></p>
 <h5 id="examples-6"><a href="#examples-6">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.range_read(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#395-397">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#396-398">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
 <h5 id="examples-7"><a href="#examples-7">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.reader(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#412-427">source</a><h4 class="code-header">pub fn <a href="#method.range_reader" class="fn">range_reader</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#413-428">source</a><h4 class="code-header">pub fn <a href="#method.range_reader" class="fn">range_reader</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     range: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.u64.html">u64</a>&gt;
 ) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.BlockingReader.html" title="struct opendal::BlockingReader">BlockingReader</a>&gt;</h4></section></summary><div class="docblock"><p>Create a new reader which can read the specified range.</p>
 <h5 id="examples-8"><a href="#examples-8">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.range_reader(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#449-456">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/tra [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#450-457">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/tra [...]
 <h5 id="notes-3"><a href="#notes-3">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -149,7 +149,7 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.ran
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
 
 op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#478-514">source</a><h4 class="code-header">pub fn <a href="#method.copy" class="fn">copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#479-515">source</a><h4 class="code-header">pub fn <a href="#method.copy" class="fn">copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.s [...]
 <h5 id="notes-4"><a href="#notes-4">Notes</a></h5>
 <ul>
 <li><code>from</code> and <code>to</code> must be a file.</li>
@@ -160,7 +160,7 @@ op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macr
 <h5 id="examples-10"><a href="#examples-10">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>
 op.copy(<span class="string">&quot;path/to/file&quot;</span>, <span class="string">&quot;path/to/file2&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#535-571">source</a><h4 class="code-header">pub fn <a href="#method.rename" class="fn">rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#536-572">source</a><h4 class="code-header">pub fn <a href="#method.rename" class="fn">rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primi [...]
 <h5 id="notes-5"><a href="#notes-5">Notes</a></h5>
 <ul>
 <li><code>from</code> and <code>to</code> must be a file.</li>
@@ -170,7 +170,7 @@ op.copy(<span class="string">&quot;path/to/file&quot;</span>, <span class="strin
 <h5 id="examples-11"><a href="#examples-11">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>
 op.rename(<span class="string">&quot;path/to/file&quot;</span>, <span class="string">&quot;path/to/file2&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#594-614">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#595-615">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>,
@@ -187,7 +187,7 @@ op.rename(<span class="string">&quot;path/to/file&quot;</span>, <span class="str
 <span class="kw">let </span>bs = <span class="string">b&quot;hello, world!&quot;</span>.to_vec();
 <span class="kw">let </span>ow = OpWrite::new().with_content_type(<span class="string">&quot;text/plain&quot;</span>);
 <span class="kw">let _ </span>= op.write_with(<span class="string">&quot;hello.txt&quot;</span>, ow, bs)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#639-653">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#640-654">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
 <h5 id="notes-7"><a href="#notes-7">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -199,14 +199,14 @@ op.rename(<span class="string">&quot;path/to/file&quot;</span>, <span class="str
 w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
 w.write(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
 w.close()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#672-678">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#673-679">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Res [...]
 <h5 id="notes-8"><a href="#notes-8">Notes</a></h5>
 <ul>
 <li>Delete not existing error won’t return errors.</li>
 </ul>
 <h5 id="examples-14"><a href="#examples-14">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#713-728">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#714-729">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if path doesn’t end with <code>/</code>.</p>
 <h5 id="examples-15"><a href="#examples-15">Examples</a></h5>
@@ -226,12 +226,13 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#767-782">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#769-786">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a [...]
 <p>Also, this function can be used to list a prefix.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
 <h5 id="notes-9"><a href="#notes-9">Notes</a></h5>
 <ul>
 <li><code>scan</code> will not return the prefix itself.</li>
+<li><code>scan</code> is an alias of <code>list_with(OpList::new().with_delimiter(&quot;&quot;))</code></li>
 </ul>
 <h5 id="examples-16"><a href="#examples-16">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>ds = op.list(<span class="string">&quot;path/to/dir/&quot;</span>)<span class="question-mark">?</span>;
diff --git a/docs/rust/opendal/struct.Capability.html b/docs/rust/opendal/struct.Capability.html
index b6472279..f901187d 100644
--- a/docs/rust/opendal/struct.Capability.html
+++ b/docs/rust/opendal/struct.Capability.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Capability is used to describe what operations are supported by current Operator."><title>Capability in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" t [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Capability is used to describe what operations are supported by current Operator."><title>Capability in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" t [...]
     pub stat: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub stat_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub stat_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
@@ -24,8 +24,6 @@
     pub list_with_start_after: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub list_with_delimiter_slash: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub list_without_delimiter: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
-    pub scan: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
-    pub scan_with_limit: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub presign: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub presign_read: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
     pub presign_stat: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
@@ -86,8 +84,6 @@ be true.</p>
 </div><span id="structfield.list_with_start_after" class="structfield small-section-header"><a href="#structfield.list_with_start_after" class="anchor field">§</a><code>list_with_start_after: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend supports list with start after, it will be true.</p>
 </div><span id="structfield.list_with_delimiter_slash" class="structfield small-section-header"><a href="#structfield.list_with_delimiter_slash" class="anchor field">§</a><code>list_with_delimiter_slash: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend support list with using slash as delimiter.</p>
 </div><span id="structfield.list_without_delimiter" class="structfield small-section-header"><a href="#structfield.list_without_delimiter" class="anchor field">§</a><code>list_without_delimiter: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend supports list without delimiter.</p>
-</div><span id="structfield.scan" class="structfield small-section-header"><a href="#structfield.scan" class="anchor field">§</a><code>scan: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports scan natively, it will be true.</p>
-</div><span id="structfield.scan_with_limit" class="structfield small-section-header"><a href="#structfield.scan_with_limit" class="anchor field">§</a><code>scan_with_limit: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend supports scan with limit, it will be true.</p>
 </div><span id="structfield.presign" class="structfield small-section-header"><a href="#structfield.presign" class="anchor field">§</a><code>presign: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign natively, it will be true.</p>
 </div><span id="structfield.presign_read" class="structfield small-section-header"><a href="#structfield.presign_read" class="anchor field">§</a><code>presign_read: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign read natively, it will be true.</p>
 </div><span id="structfield.presign_stat" class="structfield small-section-header"><a href="#structfield.presign_stat" class="anchor field">§</a><code>presign_stat: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign stat natively, it will be true.</p>
@@ -96,7 +92,7 @@ be true.</p>
 </div><span id="structfield.batch_delete" class="structfield small-section-header"><a href="#structfield.batch_delete" class="anchor field">§</a><code>batch_delete: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports batch delete natively, it will be true.</p>
 </div><span id="structfield.batch_max_operations" class="structfield small-section-header"><a href="#structfield.batch_max_operations" class="anchor field">§</a><code>batch_max_operations: <a class="enum" href="https://doc.rust-lang.org/1.69.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a>&gt;</code></span><div class="docblock"><p>The max operations that operator [...]
 </div><span id="structfield.blocking" class="structfield small-section-header"><a href="#structfield.blocking" class="anchor field">§</a><code>blocking: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports blocking natively, it will be true.</p>
-</div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Capability" class="impl"><a class="srclink rightside" href="../src/opendal/types/capability.rs.html#47">source</a><a href="#impl-Clone-for-Capability" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="h [...]
+</div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Capability" class="impl"><a class="srclink rightside" href="../src/opendal/types/capability.rs.html#47">source</a><a href="#impl-Clone-for-Capability" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/struct.Error.html b/docs/rust/opendal/struct.Error.html
index 78322c2f..6973afc1 100644
--- a/docs/rust/opendal/struct.Error.html
+++ b/docs/rust/opendal/struct.Error.html
@@ -17,7 +17,7 @@
 <p>By setting persistent, we indicate the retry should be stopped.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.kind" class="method"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#330-332">source</a><h4 class="code-header">pub fn <a href="#method.kind" class="fn">kind</a>(&amp;self) -&gt; <a class="enum" href="enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind</a></h4></section></summary><div class="docblock"><p>Return error’s kind.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.is_temporary" class="method"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#335-337">source</a><h4 class="code-header">pub fn <a href="#method.is_temporary" class="fn">is_temporary</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if this error is temporary.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#210-244">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#210-244">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index 58d607d9..7983f3f7 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -33,7 +33,7 @@ Limit is usually the maximum size of data that operator will handle in one opera
 <span class="kw">let </span>info = op.info();</code></pre></div>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.blocking" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#130-132">source</a><h4 class="code-header">pub fn <a href="#method.blocking" class="fn">blocking</a>(&amp;self) -&gt; <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h4></section></summary><div class="docblock"><p>Create a new b [...]
 <p>This operation is nearly no cost.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#136-1202">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator async API.</p>
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#136-1240">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator async API.</p>
 </div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.check" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#152-159">source</a><h4 class="code-header">pub async fn <a href="#method.check" class="fn">check</a>(&amp;self) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.unit.html"> [...]
 <p>We will send a <code>list</code> request to path and return any errors we met.</p>
 
@@ -327,10 +327,10 @@ delete instead.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1129-1145">source</a><h4 class="code-header">pub async fn <a href="#method.list_with" class="fn">list_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, op: <a class="struct" href="ops/struct.OpList.html" title="struct open [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1163-1179">source</a><h4 class="code-header">pub async fn <a href="#method.list_with" class="fn">list_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, op: <a class="struct" href="ops/struct.OpList.html" title="struct open [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
-<h5 id="examples-24"><a href="#examples-24">Examples</a></h5>
+<h5 id="examples-24"><a href="#examples-24">Examples</a></h5><h6 id="list-current-dir"><a href="#list-current-dir">List current dir</a></h6>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::TryStreamExt;
 <span class="kw">use </span>opendal::ops::OpList;
 <span class="kw">use </span>opendal::EntryMode;
@@ -350,12 +350,35 @@ delete instead.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1185-1201">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a> [...]
+<h6 id="list-all-files-recursively"><a href="#list-all-files-recursively">List all files recursively</a></h6>
+<p>We can use <code>op.scan()</code> as a shorter alias.</p>
+
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::TryStreamExt;
+<span class="kw">use </span>opendal::ops::OpList;
+<span class="kw">use </span>opendal::EntryMode;
+<span class="kw">use </span>opendal::Metakey;
+<span class="kw">use </span>opendal::Operator;
+<span class="kw">let </span>option = OpList::new().with_delimiter(<span class="string">&quot;&quot;</span>);
+<span class="kw">let </span><span class="kw-2">mut </span>ds = op.list_with(<span class="string">&quot;path/to/dir/&quot;</span>, option).<span class="kw">await</span><span class="question-mark">?</span>;
+<span class="kw">while let </span><span class="prelude-val">Some</span>(<span class="kw-2">mut </span>de) = ds.try_next().<span class="kw">await</span><span class="question-mark">? </span>{
+    <span class="kw">let </span>meta = op.metadata(<span class="kw-2">&amp;</span>de, Metakey::Mode).<span class="kw">await</span><span class="question-mark">?</span>;
+    <span class="kw">match </span>meta.mode() {
+        EntryMode::FILE =&gt; {
+            <span class="macro">println!</span>(<span class="string">&quot;Handling file&quot;</span>)
+        }
+        EntryMode::DIR =&gt; {
+            <span class="macro">println!</span>(<span class="string">&quot;Handling dir like start a new list via meta.path()&quot;</span>)
+        }
+        EntryMode::Unknown =&gt; <span class="kw">continue</span>,
+    }
+}</code></pre></div>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1220-1239">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a> [...]
 <p>Also, this function can be used to list a prefix.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
 <h5 id="notes-15"><a href="#notes-15">Notes</a></h5>
 <ul>
 <li><code>scan</code> will not return the prefix itself.</li>
+<li><code>scan</code> is an alias of <code>list_with(OpList::new().with_delimiter(&quot;&quot;))</code></li>
 </ul>
 <h5 id="examples-25"><a href="#examples-25">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::TryStreamExt;
@@ -375,8 +398,8 @@ delete instead.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1205-1374">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
-</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1227-1234">source</a><h4 class="code-header">pub async fn <a href="#method.presign_stat" class="fn">presign_stat</a>(
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1243-1412">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
+</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1265-1272">source</a><h4 class="code-header">pub async fn <a href="#method.presign_stat" class="fn">presign_stat</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -395,7 +418,7 @@ delete instead.</p>
         .uri(signed_req.uri())
         .body(())<span class="question-mark">?</span>;
 </code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1262-1269">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read" class="fn">presign_read</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1300-1307">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read" class="fn">presign_read</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -416,7 +439,7 @@ delete instead.</p>
 </ul>
 <p>We can download this file via <code>curl</code> or other tools without credentials:</p>
 <div class="example-wrap"><pre class="language-shell"><code>curl &quot;https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&amp;X-Amz-Date=20130721T201207Z&amp;X-Amz-Expires=86400&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=&lt;signature-value&gt;&quot; -O /tmp/test.txt
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1292-1304">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1330-1342">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     op: <a class="struct" href="ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>,
@@ -435,7 +458,7 @@ delete instead.</p>
     <span class="kw">let </span>args = OpRead::new()
         .with_override_content_disposition(<span class="string">&quot;attachment; filename=\&quot;othertext.txt\&quot;&quot;</span>);
     <span class="kw">let </span>signed_req = op.presign_read_with(<span class="string">&quot;test.txt&quot;</span>, args, Duration::from_secs(<span class="number">3600</span>)).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1332-1334">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write" class="fn">presign_write</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1370-1372">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write" class="fn">presign_write</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -456,7 +479,7 @@ delete instead.</p>
 </ul>
 <p>We can upload file as this file via <code>curl</code> or other tools without credential:</p>
 <div class="example-wrap"><pre class="language-shell"><code>curl -X PUT &quot;https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&amp;X-Amz-Date=20130721T201207Z&amp;X-Amz-Expires=86400&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=&lt;signature-value&gt;&quot; -d &quot;Hello, World!&quot;
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1361-1373">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1399-1411">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     op: <a class="struct" href="ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>,
diff --git a/docs/rust/opendal/struct.OperatorInfo.html b/docs/rust/opendal/struct.OperatorInfo.html
index 0673f3b4..3b3d8630 100644
--- a/docs/rust/opendal/struct.OperatorInfo.html
+++ b/docs/rust/opendal/struct.OperatorInfo.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata for operator, users can use this metadata to get information of operator."><title>OperatorInfo in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorInfo" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#25-99">source</a><a href="#impl-OperatorInfo" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OperatorInfo. [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata for operator, users can use this metadata to get information of operator."><title>OperatorInfo in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorInfo" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#25-94">source</a><a href="#impl-OperatorInfo" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OperatorInfo. [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#36-38">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Root of operator, will be in format like <code> [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.name" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#46-48">source</a><h4 class="code-header">pub fn <a href="#method.name" class="fn">name</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Name of backend, could be empty if underlying b [...]
 <p>For example:</p>
@@ -13,10 +13,9 @@
 </div></details><details class="toggle method-toggle" open><summary><section id="method.can_copy" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#66-68">source</a><h4 class="code-header">pub fn <a href="#method.can_copy" class="fn">can_copy</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supports <a h [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.can_rename" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#71-73">source</a><h4 class="code-header">pub fn <a href="#method.can_rename" class="fn">can_rename</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend support [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.can_list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#76-78">source</a><h4 class="code-header">pub fn <a href="#method.can_list" class="fn">can_list</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supports <a h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.can_scan" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#81-83">source</a><h4 class="code-header">pub fn <a href="#method.can_scan" class="fn">can_scan</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supports <a h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.can_presign" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#86-88">source</a><h4 class="code-header">pub fn <a href="#method.can_presign" class="fn">can_presign</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supp [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.can_batch" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#91-93">source</a><h4 class="code-header">pub fn <a href="#method.can_batch" class="fn">can_batch</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supports b [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.can_blocking" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#96-98">source</a><h4 class="code-header">pub fn <a href="#method.can_blocking" class="fn">can_blocking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.can_presign" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#81-83">source</a><h4 class="code-header">pub fn <a href="#method.can_presign" class="fn">can_presign</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supp [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.can_batch" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#86-88">source</a><h4 class="code-header">pub fn <a href="#method.can_batch" class="fn">can_batch</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend supports b [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.can_blocking" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#91-93">source</a><h4 class="code-header">pub fn <a href="#method.can_blocking" class="fn">can_blocking</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if current backend s [...]
 </div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OperatorInfo" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/metadata.rs.html#22">source</a><a href="#impl-Clone-for-OperatorInfo" class="anchor">§</a><h3 class= [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
diff --git a/docs/rust/opendal/types/ops/struct.OpCreate.html b/docs/rust/opendal/types/ops/struct.OpCreateDir.html
similarity index 63%
rename from docs/rust/opendal/types/ops/struct.OpCreate.html
rename to docs/rust/opendal/types/ops/struct.OpCreateDir.html
index bb6f5d63..7213d5ca 100644
--- a/docs/rust/opendal/types/ops/struct.OpCreate.html
+++ b/docs/rust/opendal/types/ops/struct.OpCreateDir.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/ops/struct.OpCreate.html">
+    <meta http-equiv="refresh" content="0;URL=../../../opendal/ops/struct.OpCreateDir.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../opendal/ops/struct.OpCreate.html">../../../opendal/ops/struct.OpCreate.html</a>...</p>
-    <script>location.replace("../../../opendal/ops/struct.OpCreate.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../opendal/ops/struct.OpCreateDir.html">../../../opendal/ops/struct.OpCreateDir.html</a>...</p>
+    <script>location.replace("../../../opendal/ops/struct.OpCreateDir.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/ops/struct.OpScan.html b/docs/rust/opendal/types/ops/struct.OpScan.html
deleted file mode 100644
index 21964a54..00000000
--- a/docs/rust/opendal/types/ops/struct.OpScan.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/ops/struct.OpScan.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../opendal/ops/struct.OpScan.html">../../../opendal/ops/struct.OpScan.html</a>...</p>
-    <script>location.replace("../../../opendal/ops/struct.OpScan.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index be7dbeda..6b0bf0fe 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = JSON.parse('{\
-"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINDNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINDNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/src/opendal/layers/chaos.rs.html b/docs/rust/src/opendal/layers/chaos.rs.html
index 93805de0..6d11f5d6 100644
--- a/docs/rust/src/opendal/layers/chaos.rs.html
+++ b/docs/rust/src/opendal/layers/chaos.rs.html
@@ -226,14 +226,6 @@
 <a href="#226" id="226">226</a>
 <a href="#227" id="227">227</a>
 <a href="#228" id="228">228</a>
-<a href="#229" id="229">229</a>
-<a href="#230" id="230">230</a>
-<a href="#231" id="231">231</a>
-<a href="#232" id="232">232</a>
-<a href="#233" id="233">233</a>
-<a href="#234" id="234">234</a>
-<a href="#235" id="235">235</a>
-<a href="#236" id="236">236</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -375,17 +367,9 @@
         <span class="self">self</span>.inner.list(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.inner.scan(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         <span class="self">self</span>.inner.blocking_list(path, args)
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.inner.blocking_scan(path, args)
-    }
 }
 
 <span class="doccomment">/// ChaosReader will inject error into read operations.
diff --git a/docs/rust/src/opendal/layers/complete.rs.html b/docs/rust/src/opendal/layers/complete.rs.html
index 488f49cc..3b91907c 100644
--- a/docs/rust/src/opendal/layers/complete.rs.html
+++ b/docs/rust/src/opendal/layers/complete.rs.html
@@ -646,9 +646,6 @@
 <a href="#646" id="646">646</a>
 <a href="#647" id="647">647</a>
 <a href="#648" id="648">648</a>
-<a href="#649" id="649">649</a>
-<a href="#650" id="650">650</a>
-<a href="#651" id="651">651</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -876,23 +873,48 @@
         path: <span class="kw-2">&amp;</span>str,
         args: OpList,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, CompletePager&lt;A, A::Pager&gt;)&gt; {
-        <span class="kw">let </span>capability = <span class="self">self</span>.meta.capability();
-        <span class="kw">let </span>(can_list, can_scan) = (capability.list, capability.scan);
-
-        <span class="kw">if </span>can_list {
-            <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.list(path, args).<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
-        } <span class="kw">else if </span>can_scan {
-            <span class="kw">let </span>(<span class="kw">_</span>, p) = <span class="self">self</span>.inner.scan(path, OpScan::new()).<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="kw">let </span>p = to_hierarchy_pager(p, path);
-            <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedHierarchy(p)))
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(
+        <span class="kw">let </span>cap = <span class="self">self</span>.meta.capability();
+        <span class="kw">if </span>!cap.list {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(
                 Error::new(ErrorKind::Unsupported, <span class="string">&quot;operation is not supported&quot;</span>)
                     .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
                     .with_operation(<span class="string">&quot;list&quot;</span>),
-            )
+            );
+        }
+
+        <span class="kw">let </span>delimiter = args.delimiter();
+
+        <span class="kw">if </span>delimiter.is_empty() {
+            <span class="kw">return if </span>cap.list_without_delimiter {
+                <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.list(path, args).<span class="kw">await</span><span class="question-mark">?</span>;
+                <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
+            } <span class="kw">else </span>{
+                <span class="kw">let </span>p = to_flat_pager(
+                    <span class="self">self</span>.inner.clone(),
+                    path,
+                    args.with_delimiter(<span class="string">&quot;/&quot;</span>).limit().unwrap_or(<span class="number">1000</span>),
+                );
+                <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedFlat(p)))
+            };
         }
+
+        <span class="kw">if </span>delimiter == <span class="string">&quot;/&quot; </span>{
+            <span class="kw">return if </span>cap.list_with_delimiter_slash {
+                <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.list(path, args).<span class="kw">await</span><span class="question-mark">?</span>;
+                <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
+            } <span class="kw">else </span>{
+                <span class="kw">let </span>(<span class="kw">_</span>, p) = <span class="self">self</span>.inner.list(path, args.with_delimiter(<span class="string">&quot;&quot;</span>)).<span class="kw">await</span><span class="question-mark">?</span>;
+                <span class="kw">let </span>p = to_hierarchy_pager(p, path);
+                <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedHierarchy(p)))
+            };
+        }
+
+        <span class="prelude-val">Err</span>(Error::new(
+            ErrorKind::Unsupported,
+            <span class="string">&quot;list with other delimiter is not supported&quot;</span>,
+        )
+        .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
+        .with_context(<span class="string">&quot;delimiter&quot;</span>, delimiter))
     }
 
     <span class="kw">fn </span>complete_blocking_list(
@@ -900,69 +922,49 @@
         path: <span class="kw-2">&amp;</span>str,
         args: OpList,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, CompletePager&lt;A, A::BlockingPager&gt;)&gt; {
-        <span class="kw">let </span>capability = <span class="self">self</span>.meta.capability();
-        <span class="kw">let </span>(can_list, can_scan) = (capability.list, capability.scan);
-
-        <span class="kw">if </span>can_list {
-            <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.blocking_list(path, args)<span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
-        } <span class="kw">else if </span>can_scan {
-            <span class="kw">let </span>(<span class="kw">_</span>, p) = <span class="self">self</span>.inner.blocking_scan(path, OpScan::new())<span class="question-mark">?</span>;
-            <span class="kw">let </span>p = to_hierarchy_pager(p, path);
-            <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedHierarchy(p)))
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(
+        <span class="kw">let </span>cap = <span class="self">self</span>.meta.capability();
+        <span class="kw">if </span>!cap.list {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(
                 Error::new(ErrorKind::Unsupported, <span class="string">&quot;operation is not supported&quot;</span>)
                     .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
                     .with_operation(<span class="string">&quot;list&quot;</span>),
-            )
+            );
         }
-    }
 
-    <span class="kw">async fn </span>complete_scan(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: OpScan,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, CompletePager&lt;A, A::Pager&gt;)&gt; {
-        <span class="kw">let </span>capability = <span class="self">self</span>.meta.capability();
-        <span class="kw">let </span>(can_list, can_scan) = (capability.list, capability.scan);
-
-        <span class="kw">if </span>can_scan {
-            <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.scan(path, args).<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
-        } <span class="kw">else if </span>can_list {
-            <span class="kw">let </span>p = to_flat_pager(<span class="self">self</span>.inner.clone(), path, args.limit().unwrap_or(<span class="number">1000</span>));
-            <span class="prelude-val">Ok</span>((RpScan::default(), CompletePager::NeedFlat(p)))
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(
-                Error::new(ErrorKind::Unsupported, <span class="string">&quot;operation is not supported&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
-                    .with_operation(<span class="string">&quot;scan&quot;</span>),
-            )
+        <span class="kw">let </span>delimiter = args.delimiter();
+
+        <span class="kw">if </span>delimiter.is_empty() {
+            <span class="kw">return if </span>cap.list_without_delimiter {
+                <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.blocking_list(path, args)<span class="question-mark">?</span>;
+                <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
+            } <span class="kw">else </span>{
+                <span class="kw">let </span>p = to_flat_pager(
+                    <span class="self">self</span>.inner.clone(),
+                    path,
+                    args.with_delimiter(<span class="string">&quot;/&quot;</span>).limit().unwrap_or(<span class="number">1000</span>),
+                );
+                <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedFlat(p)))
+            };
         }
-    }
 
-    <span class="kw">fn </span>complete_blocking_scan(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: OpScan,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, CompletePager&lt;A, A::BlockingPager&gt;)&gt; {
-        <span class="kw">let </span>capability = <span class="self">self</span>.meta.capability();
-        <span class="kw">let </span>(can_list, can_scan) = (capability.list, capability.scan);
-
-        <span class="kw">if </span>can_scan {
-            <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.blocking_scan(path, args)<span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
-        } <span class="kw">else if </span>can_list {
-            <span class="kw">let </span>p = to_flat_pager(<span class="self">self</span>.inner.clone(), path, args.limit().unwrap_or(<span class="number">1000</span>));
-            <span class="prelude-val">Ok</span>((RpScan::default(), CompletePager::NeedFlat(p)))
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(
-                Error::new(ErrorKind::Unsupported, <span class="string">&quot;operation is not supported&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
-                    .with_operation(<span class="string">&quot;scan&quot;</span>),
-            )
+        <span class="kw">if </span>delimiter == <span class="string">&quot;/&quot; </span>{
+            <span class="kw">return if </span>cap.list_with_delimiter_slash {
+                <span class="kw">let </span>(rp, p) = <span class="self">self</span>.inner.blocking_list(path, args)<span class="question-mark">?</span>;
+                <span class="prelude-val">Ok</span>((rp, CompletePager::AlreadyComplete(p)))
+            } <span class="kw">else </span>{
+                <span class="kw">let </span>(<span class="kw">_</span>, p) = <span class="self">self</span>.inner.blocking_list(path, args.with_delimiter(<span class="string">&quot;&quot;</span>))<span class="question-mark">?</span>;
+                <span class="kw">let </span>p: ToHierarchyPager&lt;&lt;A <span class="kw">as </span>Accessor&gt;::BlockingPager&gt; =
+                    to_hierarchy_pager(p, path);
+                <span class="prelude-val">Ok</span>((RpList::default(), CompletePager::NeedHierarchy(p)))
+            };
         }
+
+        <span class="prelude-val">Err</span>(Error::new(
+            ErrorKind::Unsupported,
+            <span class="string">&quot;list with other delimiter is not supported&quot;</span>,
+        )
+        .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
+        .with_context(<span class="string">&quot;delimiter&quot;</span>, delimiter))
     }
 }
 
@@ -1028,14 +1030,6 @@
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         <span class="self">self</span>.complete_blocking_list(path, args)
     }
-
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.complete_scan(path, args).<span class="kw">await
-    </span>}
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.complete_blocking_scan(path, args)
-    }
 }
 
 <span class="kw">pub enum </span>CompleteReader&lt;A: Accessor, R&gt; {
diff --git a/docs/rust/src/opendal/layers/concurrent_limit.rs.html b/docs/rust/src/opendal/layers/concurrent_limit.rs.html
index e98cc462..a623e8ff 100644
--- a/docs/rust/src/opendal/layers/concurrent_limit.rs.html
+++ b/docs/rust/src/opendal/layers/concurrent_limit.rs.html
@@ -321,32 +321,6 @@
 <a href="#321" id="321">321</a>
 <a href="#322" id="322">322</a>
 <a href="#323" id="323">323</a>
-<a href="#324" id="324">324</a>
-<a href="#325" id="325">325</a>
-<a href="#326" id="326">326</a>
-<a href="#327" id="327">327</a>
-<a href="#328" id="328">328</a>
-<a href="#329" id="329">329</a>
-<a href="#330" id="330">330</a>
-<a href="#331" id="331">331</a>
-<a href="#332" id="332">332</a>
-<a href="#333" id="333">333</a>
-<a href="#334" id="334">334</a>
-<a href="#335" id="335">335</a>
-<a href="#336" id="336">336</a>
-<a href="#337" id="337">337</a>
-<a href="#338" id="338">338</a>
-<a href="#339" id="339">339</a>
-<a href="#340" id="340">340</a>
-<a href="#341" id="341">341</a>
-<a href="#342" id="342">342</a>
-<a href="#343" id="343">343</a>
-<a href="#344" id="344">344</a>
-<a href="#345" id="345">345</a>
-<a href="#346" id="346">346</a>
-<a href="#347" id="347">347</a>
-<a href="#348" id="348">348</a>
-<a href="#349" id="349">349</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -443,7 +417,7 @@
         <span class="kw-2">&amp;</span><span class="self">self</span>.inner
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>_permit = <span class="self">self
             </span>.semaphore
             .acquire()
@@ -515,20 +489,6 @@
             </span>.map(|(rp, s)| (rp, ConcurrentLimitWrapper::new(s, permit)))
     }
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="kw">let </span>permit = <span class="self">self
-            </span>.semaphore
-            .clone()
-            .acquire_owned()
-            .<span class="kw">await
-            </span>.expect(<span class="string">&quot;semaphore must be valid&quot;</span>);
-
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, s)| (rp, ConcurrentLimitWrapper::new(s, permit)))
-    }
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="kw">let </span>_permit = <span class="self">self
             </span>.semaphore
@@ -539,7 +499,7 @@
         <span class="self">self</span>.inner.batch(args).<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>_permit = <span class="self">self
             </span>.semaphore
             .try_acquire()
@@ -601,18 +561,6 @@
             .blocking_list(path, args)
             .map(|(rp, it)| (rp, ConcurrentLimitWrapper::new(it, permit)))
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="kw">let </span>permit = <span class="self">self
-            </span>.semaphore
-            .clone()
-            .try_acquire_owned()
-            .expect(<span class="string">&quot;semaphore must be valid&quot;</span>);
-
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, it)| (rp, ConcurrentLimitWrapper::new(it, permit)))
-    }
 }
 
 <span class="kw">pub struct </span>ConcurrentLimitWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/error_context.rs.html b/docs/rust/src/opendal/layers/error_context.rs.html
index c404f238..206e6490 100644
--- a/docs/rust/src/opendal/layers/error_context.rs.html
+++ b/docs/rust/src/opendal/layers/error_context.rs.html
@@ -467,47 +467,6 @@
 <a href="#467" id="467">467</a>
 <a href="#468" id="468">468</a>
 <a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
-<a href="#486" id="486">486</a>
-<a href="#487" id="487">487</a>
-<a href="#488" id="488">488</a>
-<a href="#489" id="489">489</a>
-<a href="#490" id="490">490</a>
-<a href="#491" id="491">491</a>
-<a href="#492" id="492">492</a>
-<a href="#493" id="493">493</a>
-<a href="#494" id="494">494</a>
-<a href="#495" id="495">495</a>
-<a href="#496" id="496">496</a>
-<a href="#497" id="497">497</a>
-<a href="#498" id="498">498</a>
-<a href="#499" id="499">499</a>
-<a href="#500" id="500">500</a>
-<a href="#501" id="501">501</a>
-<a href="#502" id="502">502</a>
-<a href="#503" id="503">503</a>
-<a href="#504" id="504">504</a>
-<a href="#505" id="505">505</a>
-<a href="#506" id="506">506</a>
-<a href="#507" id="507">507</a>
-<a href="#508" id="508">508</a>
-<a href="#509" id="509">509</a>
-<a href="#510" id="510">510</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -592,7 +551,7 @@
         <span class="self">self</span>.meta.clone()
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner
             .create_dir(path, args)
             .map_err(|err| {
@@ -715,27 +674,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .map_ok(|(rp, os)| {
-                (
-                    rp,
-                    ErrorContextWrapper {
-                        scheme: <span class="self">self</span>.meta.scheme(),
-                        path: path.to_string(),
-                        inner: os,
-                    },
-                )
-            })
-            .map_err(|err| {
-                err.with_operation(Operation::Scan)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
-                    .with_context(<span class="string">&quot;path&quot;</span>, path)
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
         <span class="self">self</span>.inner.presign(path, args).<span class="kw">await</span>.map_err(|err| {
             err.with_operation(Operation::Presign)
@@ -770,7 +708,7 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner.blocking_create_dir(path, args).map_err(|err| {
             err.with_operation(Operation::BlockingCreateDir)
                 .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
@@ -871,26 +809,6 @@
                     .with_context(<span class="string">&quot;path&quot;</span>, path)
             })
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, os)| {
-                (
-                    rp,
-                    ErrorContextWrapper {
-                        scheme: <span class="self">self</span>.meta.scheme(),
-                        path: path.to_string(),
-                        inner: os,
-                    },
-                )
-            })
-            .map_err(|err| {
-                err.with_operation(Operation::BlockingScan)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.meta.scheme())
-                    .with_context(<span class="string">&quot;path&quot;</span>, path)
-            })
-    }
 }
 
 <span class="kw">pub struct </span>ErrorContextWrapper&lt;T&gt; {
diff --git a/docs/rust/src/opendal/layers/immutable_index.rs.html b/docs/rust/src/opendal/layers/immutable_index.rs.html
index f5ecb3ef..58805e3d 100644
--- a/docs/rust/src/opendal/layers/immutable_index.rs.html
+++ b/docs/rust/src/opendal/layers/immutable_index.rs.html
@@ -458,13 +458,6 @@
 <a href="#458" id="458">458</a>
 <a href="#459" id="459">459</a>
 <a href="#460" id="460">460</a>
-<a href="#461" id="461">461</a>
-<a href="#462" id="462">462</a>
-<a href="#463" id="463">463</a>
-<a href="#464" id="464">464</a>
-<a href="#465" id="465">465</a>
-<a href="#466" id="466">466</a>
-<a href="#467" id="467">467</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -619,7 +612,8 @@
 
         <span class="kw">let </span>cap = meta.capability_mut();
         cap.list = <span class="bool-val">true</span>;
-        cap.scan = <span class="bool-val">true</span>;
+        cap.list_with_delimiter_slash = <span class="bool-val">true</span>;
+        cap.list_without_delimiter = <span class="bool-val">true</span>;
 
         meta
     }
@@ -628,28 +622,24 @@
         <span class="self">self</span>.inner.read(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>path = path;
         <span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
             path = <span class="string">&quot;&quot;
         </span>}
 
-        <span class="prelude-val">Ok</span>((
-            RpList::default(),
-            ImmutableDir::new(<span class="self">self</span>.children_hierarchy(path)),
-        ))
-    }
-
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>path = path;
-        <span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
-            path = <span class="string">&quot;&quot;
-        </span>}
-
-        <span class="prelude-val">Ok</span>((
-            RpScan::default(),
-            ImmutableDir::new(<span class="self">self</span>.children_flat(path)),
-        ))
+        <span class="kw">let </span>idx = <span class="kw">if </span>args.delimiter() == <span class="string">&quot;/&quot; </span>{
+            <span class="self">self</span>.children_hierarchy(path)
+        } <span class="kw">else if </span>args.delimiter().is_empty() {
+            <span class="self">self</span>.children_flat(path)
+        } <span class="kw">else </span>{
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;delimiter {} is not supported&quot;</span>, args.delimiter()),
+            ));
+        };
+
+        <span class="prelude-val">Ok</span>((RpList::default(), ImmutableDir::new(idx)))
     }
 
     <span class="kw">fn </span>blocking_read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::BlockingReader)&gt; {
@@ -664,28 +654,24 @@
         <span class="self">self</span>.inner.blocking_write(path, args)
     }
 
-    <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>path = path;
-        <span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
-            path = <span class="string">&quot;&quot;
-        </span>}
-
-        <span class="prelude-val">Ok</span>((
-            RpList::default(),
-            ImmutableDir::new(<span class="self">self</span>.children_hierarchy(path)),
-        ))
-    }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
+    <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>path = path;
         <span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
             path = <span class="string">&quot;&quot;
         </span>}
 
-        <span class="prelude-val">Ok</span>((
-            RpScan::default(),
-            ImmutableDir::new(<span class="self">self</span>.children_flat(path)),
-        ))
+        <span class="kw">let </span>idx = <span class="kw">if </span>args.delimiter() == <span class="string">&quot;/&quot; </span>{
+            <span class="self">self</span>.children_hierarchy(path)
+        } <span class="kw">else if </span>args.delimiter().is_empty() {
+            <span class="self">self</span>.children_flat(path)
+        } <span class="kw">else </span>{
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;delimiter {} is not supported&quot;</span>, args.delimiter()),
+            ));
+        };
+
+        <span class="prelude-val">Ok</span>((RpList::default(), ImmutableDir::new(idx)))
     }
 }
 
diff --git a/docs/rust/src/opendal/layers/logging.rs.html b/docs/rust/src/opendal/layers/logging.rs.html
index c261bbdf..0d515e54 100644
--- a/docs/rust/src/opendal/layers/logging.rs.html
+++ b/docs/rust/src/opendal/layers/logging.rs.html
@@ -1580,99 +1580,6 @@
 <a href="#1580" id="1580">1580</a>
 <a href="#1581" id="1581">1581</a>
 <a href="#1582" id="1582">1582</a>
-<a href="#1583" id="1583">1583</a>
-<a href="#1584" id="1584">1584</a>
-<a href="#1585" id="1585">1585</a>
-<a href="#1586" id="1586">1586</a>
-<a href="#1587" id="1587">1587</a>
-<a href="#1588" id="1588">1588</a>
-<a href="#1589" id="1589">1589</a>
-<a href="#1590" id="1590">1590</a>
-<a href="#1591" id="1591">1591</a>
-<a href="#1592" id="1592">1592</a>
-<a href="#1593" id="1593">1593</a>
-<a href="#1594" id="1594">1594</a>
-<a href="#1595" id="1595">1595</a>
-<a href="#1596" id="1596">1596</a>
-<a href="#1597" id="1597">1597</a>
-<a href="#1598" id="1598">1598</a>
-<a href="#1599" id="1599">1599</a>
-<a href="#1600" id="1600">1600</a>
-<a href="#1601" id="1601">1601</a>
-<a href="#1602" id="1602">1602</a>
-<a href="#1603" id="1603">1603</a>
-<a href="#1604" id="1604">1604</a>
-<a href="#1605" id="1605">1605</a>
-<a href="#1606" id="1606">1606</a>
-<a href="#1607" id="1607">1607</a>
-<a href="#1608" id="1608">1608</a>
-<a href="#1609" id="1609">1609</a>
-<a href="#1610" id="1610">1610</a>
-<a href="#1611" id="1611">1611</a>
-<a href="#1612" id="1612">1612</a>
-<a href="#1613" id="1613">1613</a>
-<a href="#1614" id="1614">1614</a>
-<a href="#1615" id="1615">1615</a>
-<a href="#1616" id="1616">1616</a>
-<a href="#1617" id="1617">1617</a>
-<a href="#1618" id="1618">1618</a>
-<a href="#1619" id="1619">1619</a>
-<a href="#1620" id="1620">1620</a>
-<a href="#1621" id="1621">1621</a>
-<a href="#1622" id="1622">1622</a>
-<a href="#1623" id="1623">1623</a>
-<a href="#1624" id="1624">1624</a>
-<a href="#1625" id="1625">1625</a>
-<a href="#1626" id="1626">1626</a>
-<a href="#1627" id="1627">1627</a>
-<a href="#1628" id="1628">1628</a>
-<a href="#1629" id="1629">1629</a>
-<a href="#1630" id="1630">1630</a>
-<a href="#1631" id="1631">1631</a>
-<a href="#1632" id="1632">1632</a>
-<a href="#1633" id="1633">1633</a>
-<a href="#1634" id="1634">1634</a>
-<a href="#1635" id="1635">1635</a>
-<a href="#1636" id="1636">1636</a>
-<a href="#1637" id="1637">1637</a>
-<a href="#1638" id="1638">1638</a>
-<a href="#1639" id="1639">1639</a>
-<a href="#1640" id="1640">1640</a>
-<a href="#1641" id="1641">1641</a>
-<a href="#1642" id="1642">1642</a>
-<a href="#1643" id="1643">1643</a>
-<a href="#1644" id="1644">1644</a>
-<a href="#1645" id="1645">1645</a>
-<a href="#1646" id="1646">1646</a>
-<a href="#1647" id="1647">1647</a>
-<a href="#1648" id="1648">1648</a>
-<a href="#1649" id="1649">1649</a>
-<a href="#1650" id="1650">1650</a>
-<a href="#1651" id="1651">1651</a>
-<a href="#1652" id="1652">1652</a>
-<a href="#1653" id="1653">1653</a>
-<a href="#1654" id="1654">1654</a>
-<a href="#1655" id="1655">1655</a>
-<a href="#1656" id="1656">1656</a>
-<a href="#1657" id="1657">1657</a>
-<a href="#1658" id="1658">1658</a>
-<a href="#1659" id="1659">1659</a>
-<a href="#1660" id="1660">1660</a>
-<a href="#1661" id="1661">1661</a>
-<a href="#1662" id="1662">1662</a>
-<a href="#1663" id="1663">1663</a>
-<a href="#1664" id="1664">1664</a>
-<a href="#1665" id="1665">1665</a>
-<a href="#1666" id="1666">1666</a>
-<a href="#1667" id="1667">1667</a>
-<a href="#1668" id="1668">1668</a>
-<a href="#1669" id="1669">1669</a>
-<a href="#1670" id="1670">1670</a>
-<a href="#1671" id="1671">1671</a>
-<a href="#1672" id="1672">1672</a>
-<a href="#1673" id="1673">1673</a>
-<a href="#1674" id="1674">1674</a>
-<a href="#1675" id="1675">1675</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1891,7 +1798,7 @@
         result
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="macro">debug!</span>(
             target: LOGGING_TARGET,
             <span class="string">&quot;service={} operation={} path={} -&gt; started&quot;</span>,
@@ -2221,54 +2128,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="macro">debug!</span>(
-            target: LOGGING_TARGET,
-            <span class="string">&quot;service={} operation={} path={} -&gt; started&quot;</span>,
-            <span class="self">self</span>.scheme,
-            Operation::Scan,
-            path
-        );
-
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .map(|v| <span class="kw">match </span>v {
-                <span class="prelude-val">Ok</span>((rp, v)) =&gt; {
-                    <span class="macro">debug!</span>(
-                        target: LOGGING_TARGET,
-                        <span class="string">&quot;service={} operation={} path={} -&gt; start scanning&quot;</span>,
-                        <span class="self">self</span>.scheme,
-                        Operation::Scan,
-                        path
-                    );
-                    <span class="kw">let </span>streamer = LoggingPager::new(
-                        <span class="self">self</span>.scheme,
-                        path,
-                        Operation::Scan,
-                        v,
-                        <span class="self">self</span>.error_level,
-                        <span class="self">self</span>.failure_level,
-                    );
-                    <span class="prelude-val">Ok</span>((rp, streamer))
-                }
-                <span class="prelude-val">Err</span>(err) =&gt; {
-                    <span class="kw">if let </span><span class="prelude-val">Some</span>(lvl) = <span class="self">self</span>.err_level(<span class="kw-2">&amp;</span>err) {
-                        <span class="macro">log!</span>(
-                            target: LOGGING_TARGET,
-                            lvl,
-                            <span class="string">&quot;service={} operation={} path={} -&gt; {}: {err:?}&quot;</span>,
-                            <span class="self">self</span>.scheme,
-                            Operation::Scan,
-                            path,
-                            <span class="self">self</span>.err_status(<span class="kw-2">&amp;</span>err)
-                        );
-                    }
-                    <span class="prelude-val">Err</span>(err)
-                }
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
         <span class="macro">debug!</span>(
             target: LOGGING_TARGET,
@@ -2347,7 +2206,7 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="macro">debug!</span>(
             target: LOGGING_TARGET,
             <span class="string">&quot;service={} operation={} path={} -&gt; started&quot;</span>,
@@ -2673,51 +2532,6 @@
                 err
             })
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="macro">debug!</span>(
-            target: LOGGING_TARGET,
-            <span class="string">&quot;service={} operation={} path={} -&gt; started&quot;</span>,
-            <span class="self">self</span>.scheme,
-            Operation::BlockingScan,
-            path
-        );
-
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, v)| {
-                <span class="macro">debug!</span>(
-                    target: LOGGING_TARGET,
-                    <span class="string">&quot;service={} operation={} path={} -&gt; start scanning&quot;</span>,
-                    <span class="self">self</span>.scheme,
-                    Operation::BlockingScan,
-                    path
-                );
-                <span class="kw">let </span>li = LoggingPager::new(
-                    <span class="self">self</span>.scheme,
-                    path,
-                    Operation::BlockingScan,
-                    v,
-                    <span class="self">self</span>.error_level,
-                    <span class="self">self</span>.failure_level,
-                );
-                (rp, li)
-            })
-            .map_err(|err| {
-                <span class="kw">if let </span><span class="prelude-val">Some</span>(lvl) = <span class="self">self</span>.err_level(<span class="kw-2">&amp;</span>err) {
-                    <span class="macro">log!</span>(
-                        target: LOGGING_TARGET,
-                        lvl,
-                        <span class="string">&quot;service={} operation={} path={} -&gt; {}: {err:?}&quot;</span>,
-                        <span class="self">self</span>.scheme,
-                        Operation::BlockingScan,
-                        path,
-                        <span class="self">self</span>.err_status(<span class="kw-2">&amp;</span>err)
-                    );
-                }
-                err
-            })
-    }
 }
 
 <span class="doccomment">/// `LoggingReader` is a wrapper of `BytesReader`, with logging functionality.
diff --git a/docs/rust/src/opendal/layers/madsim.rs.html b/docs/rust/src/opendal/layers/madsim.rs.html
index e8f4a062..28b97a82 100644
--- a/docs/rust/src/opendal/layers/madsim.rs.html
+++ b/docs/rust/src/opendal/layers/madsim.rs.html
@@ -465,24 +465,6 @@
 <a href="#465" id="465">465</a>
 <a href="#466" id="466">466</a>
 <a href="#467" id="467">467</a>
-<a href="#468" id="468">468</a>
-<a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -713,13 +695,6 @@
         ))
     }
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="kw">crate</span>::Result&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="prelude-val">Err</span>(Error::new(
-            ErrorKind::Unsupported,
-            <span class="string">&quot;will be supported in the future&quot;</span>,
-        ))
-    }
-
     <span class="kw">fn </span>blocking_read(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
@@ -752,17 +727,6 @@
             <span class="string">&quot;will not be supported in MadsimLayer&quot;</span>,
         ))
     }
-
-    <span class="kw">fn </span>blocking_scan(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: OpScan,
-    ) -&gt; <span class="kw">crate</span>::Result&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="prelude-val">Err</span>(Error::new(
-            ErrorKind::Unsupported,
-            <span class="string">&quot;will not be supported in MadsimLayer&quot;</span>,
-        ))
-    }
 }
 
 <span class="kw">pub struct </span>MadsimReader {
diff --git a/docs/rust/src/opendal/layers/metrics.rs.html b/docs/rust/src/opendal/layers/metrics.rs.html
index 02e65dfa..90b462e5 100644
--- a/docs/rust/src/opendal/layers/metrics.rs.html
+++ b/docs/rust/src/opendal/layers/metrics.rs.html
@@ -894,71 +894,6 @@
 <a href="#894" id="894">894</a>
 <a href="#895" id="895">895</a>
 <a href="#896" id="896">896</a>
-<a href="#897" id="897">897</a>
-<a href="#898" id="898">898</a>
-<a href="#899" id="899">899</a>
-<a href="#900" id="900">900</a>
-<a href="#901" id="901">901</a>
-<a href="#902" id="902">902</a>
-<a href="#903" id="903">903</a>
-<a href="#904" id="904">904</a>
-<a href="#905" id="905">905</a>
-<a href="#906" id="906">906</a>
-<a href="#907" id="907">907</a>
-<a href="#908" id="908">908</a>
-<a href="#909" id="909">909</a>
-<a href="#910" id="910">910</a>
-<a href="#911" id="911">911</a>
-<a href="#912" id="912">912</a>
-<a href="#913" id="913">913</a>
-<a href="#914" id="914">914</a>
-<a href="#915" id="915">915</a>
-<a href="#916" id="916">916</a>
-<a href="#917" id="917">917</a>
-<a href="#918" id="918">918</a>
-<a href="#919" id="919">919</a>
-<a href="#920" id="920">920</a>
-<a href="#921" id="921">921</a>
-<a href="#922" id="922">922</a>
-<a href="#923" id="923">923</a>
-<a href="#924" id="924">924</a>
-<a href="#925" id="925">925</a>
-<a href="#926" id="926">926</a>
-<a href="#927" id="927">927</a>
-<a href="#928" id="928">928</a>
-<a href="#929" id="929">929</a>
-<a href="#930" id="930">930</a>
-<a href="#931" id="931">931</a>
-<a href="#932" id="932">932</a>
-<a href="#933" id="933">933</a>
-<a href="#934" id="934">934</a>
-<a href="#935" id="935">935</a>
-<a href="#936" id="936">936</a>
-<a href="#937" id="937">937</a>
-<a href="#938" id="938">938</a>
-<a href="#939" id="939">939</a>
-<a href="#940" id="940">940</a>
-<a href="#941" id="941">941</a>
-<a href="#942" id="942">942</a>
-<a href="#943" id="943">943</a>
-<a href="#944" id="944">944</a>
-<a href="#945" id="945">945</a>
-<a href="#946" id="946">946</a>
-<a href="#947" id="947">947</a>
-<a href="#948" id="948">948</a>
-<a href="#949" id="949">949</a>
-<a href="#950" id="950">950</a>
-<a href="#951" id="951">951</a>
-<a href="#952" id="952">952</a>
-<a href="#953" id="953">953</a>
-<a href="#954" id="954">954</a>
-<a href="#955" id="955">955</a>
-<a href="#956" id="956">956</a>
-<a href="#957" id="957">957</a>
-<a href="#958" id="958">958</a>
-<a href="#959" id="959">959</a>
-<a href="#960" id="960">960</a>
-<a href="#961" id="961">961</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1121,9 +1056,6 @@
     requests_total_list: Counter,
     requests_duration_seconds_list: Histogram,
 
-    requests_total_scan: Counter,
-    requests_duration_seconds_scan: Histogram,
-
     requests_total_presign: Counter,
     requests_duration_seconds_presign: Histogram,
 
@@ -1150,9 +1082,6 @@
 
     requests_total_blocking_list: Counter,
     requests_duration_seconds_blocking_list: Histogram,
-
-    requests_total_blocking_scan: Counter,
-    requests_duration_seconds_blocking_scan: Histogram,
 }
 
 <span class="kw">impl </span>MetricsHandler {
@@ -1247,17 +1176,6 @@
                 LABEL_OPERATION =&gt; Operation::List.into_static(),
             ),
 
-            requests_total_scan: <span class="macro">register_counter!</span>(
-                METRIC_REQUESTS_TOTAL,
-                LABEL_SERVICE =&gt; service,
-                LABEL_OPERATION =&gt; Operation::Scan.into_static(),
-            ),
-            requests_duration_seconds_scan: <span class="macro">register_histogram!</span>(
-                METRIC_REQUESTS_DURATION_SECONDS,
-                LABEL_SERVICE =&gt; service,
-                LABEL_OPERATION =&gt; Operation::Scan.into_static(),
-            ),
-
             requests_total_presign: <span class="macro">register_counter!</span>(
                 METRIC_REQUESTS_TOTAL,
                 LABEL_SERVICE =&gt; service,
@@ -1355,17 +1273,6 @@
                 LABEL_SERVICE =&gt; service,
                 LABEL_OPERATION =&gt; Operation::BlockingList.into_static(),
             ),
-
-            requests_total_blocking_scan: <span class="macro">register_counter!</span>(
-                METRIC_REQUESTS_TOTAL,
-                LABEL_SERVICE =&gt; service,
-                LABEL_OPERATION =&gt; Operation::BlockingScan.into_static(),
-            ),
-            requests_duration_seconds_blocking_scan: <span class="macro">register_histogram!</span>(
-                METRIC_REQUESTS_DURATION_SECONDS,
-                LABEL_SERVICE =&gt; service,
-                LABEL_OPERATION =&gt; Operation::BlockingScan.into_static(),
-            ),
         }
     }
 
@@ -1421,7 +1328,7 @@
         result
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.handle.requests_total_create.increment(<span class="number">1</span>);
 
         <span class="kw">let </span>start = Instant::now();
@@ -1556,25 +1463,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.handle.requests_total_scan.increment(<span class="number">1</span>);
-
-        <span class="kw">let </span>start = Instant::now();
-
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .inspect_ok(|<span class="kw">_</span>| {
-                <span class="kw">let </span>dur = start.elapsed().as_secs_f64();
-
-                <span class="self">self</span>.handle.requests_duration_seconds_scan.record(dur);
-            })
-            .inspect_err(|e| {
-                <span class="self">self</span>.handle
-                    .increment_errors_total(Operation::Scan, e.kind());
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="self">self</span>.handle.requests_total_batch.increment(<span class="number">1</span>);
 
@@ -1607,7 +1495,7 @@
         })
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.handle.requests_total_blocking_create.increment(<span class="number">1</span>);
 
         <span class="kw">let </span>start = Instant::now();
@@ -1735,24 +1623,6 @@
             e
         })
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.handle.requests_total_blocking_scan.increment(<span class="number">1</span>);
-
-        <span class="kw">let </span>start = Instant::now();
-        <span class="kw">let </span>result = <span class="self">self</span>.inner.blocking_scan(path, args);
-        <span class="kw">let </span>dur = start.elapsed().as_secs_f64();
-
-        <span class="self">self</span>.handle
-            .requests_duration_seconds_blocking_scan
-            .record(dur);
-
-        result.map_err(|e| {
-            <span class="self">self</span>.handle
-                .increment_errors_total(Operation::BlockingScan, e.kind());
-            e
-        })
-    }
 }
 
 <span class="kw">pub struct </span>MetricWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/minitrace.rs.html b/docs/rust/src/opendal/layers/minitrace.rs.html
index 3cbd77ce..efaa8a2e 100644
--- a/docs/rust/src/opendal/layers/minitrace.rs.html
+++ b/docs/rust/src/opendal/layers/minitrace.rs.html
@@ -373,24 +373,6 @@
 <a href="#373" id="373">373</a>
 <a href="#374" id="374">374</a>
 <a href="#375" id="375">375</a>
-<a href="#376" id="376">376</a>
-<a href="#377" id="377">377</a>
-<a href="#378" id="378">378</a>
-<a href="#379" id="379">379</a>
-<a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
-<a href="#387" id="387">387</a>
-<a href="#388" id="388">388</a>
-<a href="#389" id="389">389</a>
-<a href="#390" id="390">390</a>
-<a href="#391" id="391">391</a>
-<a href="#392" id="392">392</a>
-<a href="#393" id="393">393</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -541,7 +523,7 @@
     }
 
     <span class="attr">#[trace(<span class="string">&quot;create&quot;</span>, enter_on_poll = <span class="bool-val">true</span>)]
-    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner.create_dir(path, args).<span class="kw">await
     </span>}
 
@@ -589,14 +571,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="kw">let </span>span = Span::enter_with_local_parent(<span class="string">&quot;scan&quot;</span>);
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .map(|v| v.map(|(rp, s)| (rp, MinitraceWrapper::new(span, s))))
-            .<span class="kw">await
-    </span>}
-
     <span class="attr">#[trace(<span class="string">&quot;presign&quot;</span>, enter_on_poll = <span class="bool-val">true</span>)]
     </span><span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
         <span class="self">self</span>.inner.presign(path, args).<span class="kw">await
@@ -608,7 +582,7 @@
     </span>}
 
     <span class="attr">#[trace(<span class="string">&quot;blocking_create&quot;</span>)]
-    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner.blocking_create_dir(path, args)
     }
 
@@ -661,16 +635,6 @@
             )
         })
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="kw">let </span>span = Span::enter_with_local_parent(<span class="string">&quot;blocking_scan&quot;</span>);
-        <span class="self">self</span>.inner.blocking_scan(path, args).map(|(rp, it)| {
-            (
-                rp,
-                MinitraceWrapper::new(Span::enter_with_parent(<span class="string">&quot;PageOperation&quot;</span>, <span class="kw-2">&amp;</span>span), it),
-            )
-        })
-    }
 }
 
 <span class="kw">pub struct </span>MinitraceWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/oteltrace.rs.html b/docs/rust/src/opendal/layers/oteltrace.rs.html
index 534c2dc5..44744c97 100644
--- a/docs/rust/src/opendal/layers/oteltrace.rs.html
+++ b/docs/rust/src/opendal/layers/oteltrace.rs.html
@@ -349,27 +349,6 @@
 <a href="#349" id="349">349</a>
 <a href="#350" id="350">350</a>
 <a href="#351" id="351">351</a>
-<a href="#352" id="352">352</a>
-<a href="#353" id="353">353</a>
-<a href="#354" id="354">354</a>
-<a href="#355" id="355">355</a>
-<a href="#356" id="356">356</a>
-<a href="#357" id="357">357</a>
-<a href="#358" id="358">358</a>
-<a href="#359" id="359">359</a>
-<a href="#360" id="360">360</a>
-<a href="#361" id="361">361</a>
-<a href="#362" id="362">362</a>
-<a href="#363" id="363">363</a>
-<a href="#364" id="364">364</a>
-<a href="#365" id="365">365</a>
-<a href="#366" id="366">366</a>
-<a href="#367" id="367">367</a>
-<a href="#368" id="368">368</a>
-<a href="#369" id="369">369</a>
-<a href="#370" id="370">370</a>
-<a href="#371" id="371">371</a>
-<a href="#372" id="372">372</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -457,7 +436,7 @@
         tracer.in_span(<span class="string">&quot;metadata&quot;</span>, |_cx| <span class="self">self</span>.inner.info())
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>tracer = global::tracer(<span class="string">&quot;opendal&quot;</span>);
         <span class="kw">let </span><span class="kw-2">mut </span>span = tracer.start(<span class="string">&quot;create&quot;</span>);
         span.set_attribute(KeyValue::new(<span class="string">&quot;path&quot;</span>, path.to_string()));
@@ -537,17 +516,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="kw">let </span>tracer = global::tracer(<span class="string">&quot;opendal&quot;</span>);
-        <span class="kw">let </span><span class="kw-2">mut </span>span = tracer.start(<span class="string">&quot;scan&quot;</span>);
-        span.set_attribute(KeyValue::new(<span class="string">&quot;path&quot;</span>, path.to_string()));
-        span.set_attribute(KeyValue::new(<span class="string">&quot;args&quot;</span>, <span class="macro">format!</span>(<span class="string">&quot;{:?}&quot;</span>, args)));
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .map(|v| v.map(|(rp, s)| (rp, OtelTraceWrapper::new(span, s))))
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="kw">let </span>tracer = global::tracer(<span class="string">&quot;opendal&quot;</span>);
         <span class="kw">let </span><span class="kw-2">mut </span>span = tracer.start(<span class="string">&quot;batch&quot;</span>);
@@ -565,7 +533,7 @@
         <span class="self">self</span>.inner().presign(path, args).with_context(cx).<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>tracer = global::tracer(<span class="string">&quot;opendal&quot;</span>);
         tracer.in_span(<span class="string">&quot;blocking_create_dir&quot;</span>, |cx| {
             <span class="kw">let </span>span = cx.span(); <span class="comment">// let mut span = cx.();
@@ -646,16 +614,6 @@
             .blocking_list(path, args)
             .map(|(rp, it)| (rp, OtelTraceWrapper::new(span, it)))
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="kw">let </span>tracer = global::tracer(<span class="string">&quot;opendal&quot;</span>);
-        <span class="kw">let </span><span class="kw-2">mut </span>span = tracer.start(<span class="string">&quot;blocking_scan&quot;</span>);
-        span.set_attribute(KeyValue::new(<span class="string">&quot;path&quot;</span>, path.to_string()));
-        span.set_attribute(KeyValue::new(<span class="string">&quot;args&quot;</span>, <span class="macro">format!</span>(<span class="string">&quot;{:?}&quot;</span>, args)));
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, it)| (rp, OtelTraceWrapper::new(span, it)))
-    }
 }
 
 <span class="kw">pub struct </span>OtelTraceWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/prometheus.rs.html b/docs/rust/src/opendal/layers/prometheus.rs.html
index acdf765b..205f7f9b 100644
--- a/docs/rust/src/opendal/layers/prometheus.rs.html
+++ b/docs/rust/src/opendal/layers/prometheus.rs.html
@@ -719,46 +719,6 @@
 <a href="#719" id="719">719</a>
 <a href="#720" id="720">720</a>
 <a href="#721" id="721">721</a>
-<a href="#722" id="722">722</a>
-<a href="#723" id="723">723</a>
-<a href="#724" id="724">724</a>
-<a href="#725" id="725">725</a>
-<a href="#726" id="726">726</a>
-<a href="#727" id="727">727</a>
-<a href="#728" id="728">728</a>
-<a href="#729" id="729">729</a>
-<a href="#730" id="730">730</a>
-<a href="#731" id="731">731</a>
-<a href="#732" id="732">732</a>
-<a href="#733" id="733">733</a>
-<a href="#734" id="734">734</a>
-<a href="#735" id="735">735</a>
-<a href="#736" id="736">736</a>
-<a href="#737" id="737">737</a>
-<a href="#738" id="738">738</a>
-<a href="#739" id="739">739</a>
-<a href="#740" id="740">740</a>
-<a href="#741" id="741">741</a>
-<a href="#742" id="742">742</a>
-<a href="#743" id="743">743</a>
-<a href="#744" id="744">744</a>
-<a href="#745" id="745">745</a>
-<a href="#746" id="746">746</a>
-<a href="#747" id="747">747</a>
-<a href="#748" id="748">748</a>
-<a href="#749" id="749">749</a>
-<a href="#750" id="750">750</a>
-<a href="#751" id="751">751</a>
-<a href="#752" id="752">752</a>
-<a href="#753" id="753">753</a>
-<a href="#754" id="754">754</a>
-<a href="#755" id="755">755</a>
-<a href="#756" id="756">756</a>
-<a href="#757" id="757">757</a>
-<a href="#758" id="758">758</a>
-<a href="#759" id="759">759</a>
-<a href="#760" id="760">760</a>
-<a href="#761" id="761">761</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -961,7 +921,7 @@
         <span class="kw-2">&amp;</span><span class="self">self</span>.inner
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.stats
             .requests_total
             .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme])
@@ -1126,26 +1086,6 @@
         })
     }
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.stats
-            .requests_total
-            .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme, Operation::Scan.into_static()])
-            .inc();
-
-        <span class="kw">let </span>timer = <span class="self">self
-            </span>.stats
-            .requests_duration_seconds
-            .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme, Operation::Scan.into_static()])
-            .start_timer();
-
-        <span class="kw">let </span>scan_res = <span class="self">self</span>.inner.scan(path, args).<span class="kw">await</span>;
-        timer.observe_duration();
-        scan_res.map_err(|e| {
-            <span class="self">self</span>.stats.increment_errors_total(Operation::Scan, e.kind());
-            e
-        })
-    }
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="self">self</span>.stats
             .requests_total
@@ -1188,7 +1128,7 @@
         })
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.stats
             .requests_total
             .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme, Operation::BlockingCreateDir.into_static()])
@@ -1335,26 +1275,6 @@
             e
         })
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.stats
-            .requests_total
-            .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme, Operation::BlockingScan.into_static()])
-            .inc();
-
-        <span class="kw">let </span>timer = <span class="self">self
-            </span>.stats
-            .requests_duration_seconds
-            .with_label_values(<span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span><span class="self">self</span>.scheme, Operation::BlockingScan.into_static()])
-            .start_timer();
-        <span class="kw">let </span>result = <span class="self">self</span>.inner.blocking_scan(path, args);
-        timer.observe_duration();
-        result.map_err(|e| {
-            <span class="self">self</span>.stats
-                .increment_errors_total(Operation::BlockingScan, e.kind());
-            e
-        })
-    }
 }
 
 <span class="kw">pub struct </span>PrometheusMetricWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/retry.rs.html b/docs/rust/src/opendal/layers/retry.rs.html
index e7782eac..d283ef05 100644
--- a/docs/rust/src/opendal/layers/retry.rs.html
+++ b/docs/rust/src/opendal/layers/retry.rs.html
@@ -1045,42 +1045,6 @@
 <a href="#1045" id="1045">1045</a>
 <a href="#1046" id="1046">1046</a>
 <a href="#1047" id="1047">1047</a>
-<a href="#1048" id="1048">1048</a>
-<a href="#1049" id="1049">1049</a>
-<a href="#1050" id="1050">1050</a>
-<a href="#1051" id="1051">1051</a>
-<a href="#1052" id="1052">1052</a>
-<a href="#1053" id="1053">1053</a>
-<a href="#1054" id="1054">1054</a>
-<a href="#1055" id="1055">1055</a>
-<a href="#1056" id="1056">1056</a>
-<a href="#1057" id="1057">1057</a>
-<a href="#1058" id="1058">1058</a>
-<a href="#1059" id="1059">1059</a>
-<a href="#1060" id="1060">1060</a>
-<a href="#1061" id="1061">1061</a>
-<a href="#1062" id="1062">1062</a>
-<a href="#1063" id="1063">1063</a>
-<a href="#1064" id="1064">1064</a>
-<a href="#1065" id="1065">1065</a>
-<a href="#1066" id="1066">1066</a>
-<a href="#1067" id="1067">1067</a>
-<a href="#1068" id="1068">1068</a>
-<a href="#1069" id="1069">1069</a>
-<a href="#1070" id="1070">1070</a>
-<a href="#1071" id="1071">1071</a>
-<a href="#1072" id="1072">1072</a>
-<a href="#1073" id="1073">1073</a>
-<a href="#1074" id="1074">1074</a>
-<a href="#1075" id="1075">1075</a>
-<a href="#1076" id="1076">1076</a>
-<a href="#1077" id="1077">1077</a>
-<a href="#1078" id="1078">1078</a>
-<a href="#1079" id="1079">1079</a>
-<a href="#1080" id="1080">1080</a>
-<a href="#1081" id="1081">1081</a>
-<a href="#1082" id="1082">1082</a>
-<a href="#1083" id="1083">1083</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1251,7 +1215,7 @@
         <span class="kw-2">&amp;</span><span class="self">self</span>.inner
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         { || <span class="self">self</span>.inner.create_dir(path, args.clone()) }
             .retry(<span class="kw-2">&amp;</span><span class="self">self</span>.builder)
             .when(|e| e.is_temporary())
@@ -1378,26 +1342,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        { || <span class="self">self</span>.inner.scan(path, args.clone()) }
-            .retry(<span class="kw-2">&amp;</span><span class="self">self</span>.builder)
-            .when(|e| e.is_temporary())
-            .notify(|err, dur| {
-                <span class="macro">warn!</span>(
-                    target: <span class="string">&quot;opendal::service&quot;</span>,
-                    <span class="string">&quot;operation={} -&gt; retry after {}s: error={:?}&quot;</span>,
-                    Operation::Scan, dur.as_secs_f64(), err)
-            })
-            .map(|v| {
-                v.map(|(l, p)| {
-                    <span class="kw">let </span>pager = RetryWrapper::new(p, path, <span class="self">self</span>.builder.clone());
-                    (l, pager)
-                })
-                .map_err(|e| e.set_persistent())
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         {
             || <span class="kw">async </span>{
@@ -1422,7 +1366,7 @@
         </span>.map_err(|e| e.set_persistent())
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         { || <span class="self">self</span>.inner.blocking_create_dir(path, args.clone()) }
             .retry(<span class="kw-2">&amp;</span><span class="self">self</span>.builder)
             .when(|e| e.is_temporary())
@@ -1511,24 +1455,6 @@
             })
             .map_err(|e| e.set_persistent())
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        { || <span class="self">self</span>.inner.blocking_scan(path, args.clone()) }
-            .retry(<span class="kw-2">&amp;</span><span class="self">self</span>.builder)
-            .when(|e| e.is_temporary())
-            .notify(|err, dur| {
-                <span class="macro">warn!</span>(
-                    target: <span class="string">&quot;opendal::service&quot;</span>,
-                    <span class="string">&quot;operation={} -&gt; retry after {}s: error={:?}&quot;</span>,
-                    Operation::BlockingScan, dur.as_secs_f64(), err)
-            })
-            .call()
-            .map(|(rp, p)| {
-                <span class="kw">let </span>p = RetryWrapper::new(p, path, <span class="self">self</span>.builder.clone());
-                (rp, p)
-            })
-            .map_err(|e| e.set_persistent())
-    }
 }
 
 <span class="kw">pub struct </span>RetryWrapper&lt;R&gt; {
@@ -1918,6 +1844,8 @@
             <span class="kw">let </span><span class="kw-2">mut </span>am = AccessorInfo::default();
             am.set_capability(Capability {
                 list: <span class="bool-val">true</span>,
+                list_with_delimiter_slash: <span class="bool-val">true</span>,
+                list_without_delimiter: <span class="bool-val">true</span>,
                 batch: <span class="bool-val">true</span>,
                 ..Default::default()
             });
diff --git a/docs/rust/src/opendal/layers/tracing.rs.html b/docs/rust/src/opendal/layers/tracing.rs.html
index f447d16f..0cf2f735 100644
--- a/docs/rust/src/opendal/layers/tracing.rs.html
+++ b/docs/rust/src/opendal/layers/tracing.rs.html
@@ -378,21 +378,6 @@
 <a href="#378" id="378">378</a>
 <a href="#379" id="379">379</a>
 <a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
-<a href="#387" id="387">387</a>
-<a href="#388" id="388">388</a>
-<a href="#389" id="389">389</a>
-<a href="#390" id="390">390</a>
-<a href="#391" id="391">391</a>
-<a href="#392" id="392">392</a>
-<a href="#393" id="393">393</a>
-<a href="#394" id="394">394</a>
-<a href="#395" id="395">395</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -546,7 +531,7 @@
     }
 
     <span class="attr">#[tracing::instrument(level = <span class="string">&quot;debug&quot;</span>, skip(<span class="self">self</span>))]
-    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner.create_dir(path, args).<span class="kw">await
     </span>}
 
@@ -594,14 +579,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="attr">#[tracing::instrument(level = <span class="string">&quot;debug&quot;</span>, skip(<span class="self">self</span>))]
-    </span><span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .map(|v| v.map(|(rp, s)| (rp, TracingWrapper::new(Span::current(), s))))
-            .<span class="kw">await
-    </span>}
-
     <span class="attr">#[tracing::instrument(level = <span class="string">&quot;debug&quot;</span>, skip(<span class="self">self</span>))]
     </span><span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
         <span class="self">self</span>.inner.presign(path, args).<span class="kw">await
@@ -613,7 +590,7 @@
     </span>}
 
     <span class="attr">#[tracing::instrument(level = <span class="string">&quot;debug&quot;</span>, skip(<span class="self">self</span>))]
-    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner.blocking_create_dir(path, args)
     }
 
@@ -657,13 +634,6 @@
             .blocking_list(path, args)
             .map(|(rp, it)| (rp, TracingWrapper::new(Span::current(), it)))
     }
-
-    <span class="attr">#[tracing::instrument(level = <span class="string">&quot;debug&quot;</span>, skip(<span class="self">self</span>))]
-    </span><span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, it)| (rp, TracingWrapper::new(Span::current(), it)))
-    }
 }
 
 <span class="kw">pub struct </span>TracingWrapper&lt;R&gt; {
diff --git a/docs/rust/src/opendal/layers/type_eraser.rs.html b/docs/rust/src/opendal/layers/type_eraser.rs.html
index 682f18d9..13da0b75 100644
--- a/docs/rust/src/opendal/layers/type_eraser.rs.html
+++ b/docs/rust/src/opendal/layers/type_eraser.rs.html
@@ -104,19 +104,6 @@
 <a href="#104" id="104">104</a>
 <a href="#105" id="105">105</a>
 <a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
-<a href="#117" id="117">117</a>
-<a href="#118" id="118">118</a>
-<a href="#119" id="119">119</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -222,19 +209,6 @@
             .blocking_list(path, args)
             .map(|(rp, p)| (rp, Box::new(p) <span class="kw">as </span>oio::BlockingPager))
     }
-
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.inner
-            .scan(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, p)| (rp, Box::new(p) <span class="kw">as </span>oio::Pager))
-    }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.inner
-            .blocking_scan(path, args)
-            .map(|(rp, p)| (rp, Box::new(p) <span class="kw">as </span>oio::BlockingPager))
-    }
 }
 </code></pre></div>
 </section></main><div id="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="opendal" data-themes="" data-resource-suffix="" data-rustdoc-version="1.69.0 (84c898d65 2023-04-16)" data-search-js="search-8a59a8356673ec1f.js" data-settings-js="settings-f0c5c39777a9a2f6.js" data-settings-css="settings-0bcba95ff279c1db.css" ></div></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/accessor.rs.html b/docs/rust/src/opendal/raw/accessor.rs.html
index 71ccbde6..45f4aaef 100644
--- a/docs/rust/src/opendal/raw/accessor.rs.html
+++ b/docs/rust/src/opendal/raw/accessor.rs.html
@@ -544,41 +544,6 @@
 <a href="#544" id="544">544</a>
 <a href="#545" id="545">545</a>
 <a href="#546" id="546">546</a>
-<a href="#547" id="547">547</a>
-<a href="#548" id="548">548</a>
-<a href="#549" id="549">549</a>
-<a href="#550" id="550">550</a>
-<a href="#551" id="551">551</a>
-<a href="#552" id="552">552</a>
-<a href="#553" id="553">553</a>
-<a href="#554" id="554">554</a>
-<a href="#555" id="555">555</a>
-<a href="#556" id="556">556</a>
-<a href="#557" id="557">557</a>
-<a href="#558" id="558">558</a>
-<a href="#559" id="559">559</a>
-<a href="#560" id="560">560</a>
-<a href="#561" id="561">561</a>
-<a href="#562" id="562">562</a>
-<a href="#563" id="563">563</a>
-<a href="#564" id="564">564</a>
-<a href="#565" id="565">565</a>
-<a href="#566" id="566">566</a>
-<a href="#567" id="567">567</a>
-<a href="#568" id="568">568</a>
-<a href="#569" id="569">569</a>
-<a href="#570" id="570">570</a>
-<a href="#571" id="571">571</a>
-<a href="#572" id="572">572</a>
-<a href="#573" id="573">573</a>
-<a href="#574" id="574">574</a>
-<a href="#575" id="575">575</a>
-<a href="#576" id="576">576</a>
-<a href="#577" id="577">577</a>
-<a href="#578" id="578">578</a>
-<a href="#579" id="579">579</a>
-<a href="#580" id="580">580</a>
-<a href="#581" id="581">581</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -647,10 +612,10 @@
     <span class="doccomment">/// BlockingWriter is the associated writer the could return in
     /// `blocking_write` operation.
     </span><span class="kw">type </span>BlockingWriter: oio::BlockingWrite;
-    <span class="doccomment">/// Pager is the associated page that return in `list` or `scan` operation.
+    <span class="doccomment">/// Pager is the associated page that return in `list` operation.
     </span><span class="kw">type </span>Pager: oio::Page;
     <span class="doccomment">/// BlockingPager is the associated pager that could return in
-    /// `blocking_list` or `scan` operation.
+    /// `blocking_list` operation.
     </span><span class="kw">type </span>BlockingPager: oio::BlockingPage;
 
     <span class="doccomment">/// Invoke the `info` operation to get metadata of accessor.
@@ -674,7 +639,7 @@
     ///
     /// - Input path MUST match with EntryMode, DON&#39;T NEED to check mode.
     /// - Create on existing dir SHOULD succeed.
-    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>(<span class="kw">_</span>, <span class="kw">_</span>) = (path, args);
 
         <span class="prelude-val">Err</span>(Error::new(
@@ -800,22 +765,6 @@
         ))
     }
 
-    <span class="doccomment">/// Invoke the `scan` operation on the specified path.
-    ///
-    /// Require [`Capability::scan`]
-    </span><span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>op_list = OpList::new().with_delimiter(<span class="string">&quot;&quot;</span>);
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(limit) = args.limit() {
-            op_list = op_list.with_limit(limit)
-        }
-        <span class="kw">let </span>result = <span class="self">self</span>.list(path, op_list).<span class="kw">await</span>;
-
-        <span class="kw">return match </span>result {
-            <span class="prelude-val">Ok</span>(r) =&gt; <span class="prelude-val">Ok</span>((RpScan::default(), r.<span class="number">1</span>)),
-            <span class="prelude-val">Err</span>(e) =&gt; <span class="prelude-val">Err</span>(e),
-        };
-    }
-
     <span class="doccomment">/// Invoke the `presign` operation on the specified path.
     ///
     /// Require [`Capability::presign`]
@@ -849,7 +798,7 @@
     /// This operation is the blocking version of [`Accessor::create_dir`]
     ///
     /// Require [`Capability::create_dir`] and [`Capability::blocking`]
-    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>(<span class="kw">_</span>, <span class="kw">_</span>) = (path, args);
 
         <span class="prelude-val">Err</span>(Error::new(
@@ -959,18 +908,6 @@
             <span class="string">&quot;operation is not supported&quot;</span>,
         ))
     }
-
-    <span class="doccomment">/// Invoke the `blocking_scan` operation on the specified path.
-    ///
-    /// Require [`Capability::scan`] and [`Capability::blocking`]
-    </span><span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="kw">let </span>(<span class="kw">_</span>, <span class="kw">_</span>) = (path, args);
-
-        <span class="prelude-val">Err</span>(Error::new(
-            ErrorKind::Unsupported,
-            <span class="string">&quot;operation is not supported&quot;</span>,
-        ))
-    }
 }
 
 <span class="doccomment">/// Dummy implementation of accessor.
@@ -1008,7 +945,7 @@
         <span class="self">self</span>.as_ref().info()
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.as_ref().create_dir(path, args).<span class="kw">await
     </span>}
 
@@ -1036,9 +973,6 @@
     <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
         <span class="self">self</span>.as_ref().list(path, args).<span class="kw">await
     </span>}
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        <span class="self">self</span>.as_ref().scan(path, args).<span class="kw">await
-    </span>}
 
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="self">self</span>.as_ref().batch(args).<span class="kw">await
@@ -1048,7 +982,7 @@
         <span class="self">self</span>.as_ref().presign(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.as_ref().blocking_create_dir(path, args)
     }
     <span class="kw">fn </span>blocking_read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::BlockingReader)&gt; {
@@ -1075,10 +1009,6 @@
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         <span class="self">self</span>.as_ref().blocking_list(path, args)
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        <span class="self">self</span>.as_ref().blocking_scan(path, args)
-    }
 }
 
 <span class="doccomment">/// FusedAccessor is the type erased accessor with `Arc&lt;dyn Accessor&gt;`.
diff --git a/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html b/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html
index c528255b..7f6b5954 100644
--- a/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html
@@ -338,6 +338,24 @@
 <a href="#338" id="338">338</a>
 <a href="#339" id="339">339</a>
 <a href="#340" id="340">340</a>
+<a href="#341" id="341">341</a>
+<a href="#342" id="342">342</a>
+<a href="#343" id="343">343</a>
+<a href="#344" id="344">344</a>
+<a href="#345" id="345">345</a>
+<a href="#346" id="346">346</a>
+<a href="#347" id="347">347</a>
+<a href="#348" id="348">348</a>
+<a href="#349" id="349">349</a>
+<a href="#350" id="350">350</a>
+<a href="#351" id="351">351</a>
+<a href="#352" id="352">352</a>
+<a href="#353" id="353">353</a>
+<a href="#354" id="354">354</a>
+<a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -423,20 +441,24 @@
             cap.delete = <span class="bool-val">true</span>;
         }
 
+        <span class="kw">if </span>cap.list {
+            cap.list_without_delimiter = <span class="bool-val">true</span>;
+        }
+
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="self">self</span>.kv.set(<span class="kw-2">&amp;</span>p, <span class="kw-2">&amp;</span>[]).<span class="kw">await</span><span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="self">self</span>.kv.blocking_set(<span class="kw-2">&amp;</span>p, <span class="kw-2">&amp;</span>[])<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
@@ -537,20 +559,34 @@
         <span class="prelude-val">Ok</span>(RpDelete::default())
     }
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
+    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+        <span class="kw">if </span>!args.delimiter().is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;kv doesn&#39;t support delimiter&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="kw">let </span>res = <span class="self">self</span>.kv.scan(<span class="kw-2">&amp;</span>p).<span class="kw">await</span><span class="question-mark">?</span>;
         <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
 
-        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+        <span class="prelude-val">Ok</span>((RpList::default(), pager))
     }
 
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
+    <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
+        <span class="kw">if </span>!args.delimiter().is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;kv doesn&#39;t support delimiter&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="kw">let </span>res = <span class="self">self</span>.kv.blocking_scan(<span class="kw-2">&amp;</span>p)<span class="question-mark">?</span>;
         <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
 
-        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+        <span class="prelude-val">Ok</span>((RpList::default(), pager))
     }
 }
 
diff --git a/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html b/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
index 3b759795..cee83a57 100644
--- a/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
@@ -348,6 +348,21 @@
 <a href="#348" id="348">348</a>
 <a href="#349" id="349">349</a>
 <a href="#350" id="350">350</a>
+<a href="#351" id="351">351</a>
+<a href="#352" id="352">352</a>
+<a href="#353" id="353">353</a>
+<a href="#354" id="354">354</a>
+<a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
+<a href="#359" id="359">359</a>
+<a href="#360" id="360">360</a>
+<a href="#361" id="361">361</a>
+<a href="#362" id="362">362</a>
+<a href="#363" id="363">363</a>
+<a href="#364" id="364">364</a>
+<a href="#365" id="365">365</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -438,23 +453,24 @@
         }
 
         <span class="kw">if </span>kv_cap.scan {
-            cap.scan = <span class="bool-val">true</span>;
+            cap.list = <span class="bool-val">true</span>;
+            cap.list_without_delimiter = <span class="bool-val">true</span>;
         }
 
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="self">self</span>.kv.set(<span class="kw-2">&amp;</span>p, Value::new_dir()).<span class="kw">await</span><span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="self">self</span>.kv.blocking_set(<span class="kw-2">&amp;</span>p, Value::new_dir())<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
@@ -539,20 +555,34 @@
         <span class="prelude-val">Ok</span>(RpDelete::default())
     }
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
+    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+        <span class="kw">if </span>!args.delimiter().is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;kv doesn&#39;t support delimiter&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="kw">let </span>res = <span class="self">self</span>.kv.scan(<span class="kw-2">&amp;</span>p).<span class="kw">await</span><span class="question-mark">?</span>;
         <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
 
-        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+        <span class="prelude-val">Ok</span>((RpList::default(), pager))
     }
 
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
+    <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
+        <span class="kw">if </span>!args.delimiter().is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;kv doesn&#39;t support delimiter&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
         <span class="kw">let </span>res = <span class="self">self</span>.kv.blocking_scan(<span class="kw-2">&amp;</span>p)<span class="question-mark">?</span>;
         <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
 
-        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+        <span class="prelude-val">Ok</span>((RpList::default(), pager))
     }
 }
 
diff --git a/docs/rust/src/opendal/raw/layer.rs.html b/docs/rust/src/opendal/raw/layer.rs.html
index b0fb5ad1..f97a881a 100644
--- a/docs/rust/src/opendal/raw/layer.rs.html
+++ b/docs/rust/src/opendal/raw/layer.rs.html
@@ -360,26 +360,6 @@
 <a href="#360" id="360">360</a>
 <a href="#361" id="361">361</a>
 <a href="#362" id="362">362</a>
-<a href="#363" id="363">363</a>
-<a href="#364" id="364">364</a>
-<a href="#365" id="365">365</a>
-<a href="#366" id="366">366</a>
-<a href="#367" id="367">367</a>
-<a href="#368" id="368">368</a>
-<a href="#369" id="369">369</a>
-<a href="#370" id="370">370</a>
-<a href="#371" id="371">371</a>
-<a href="#372" id="372">372</a>
-<a href="#373" id="373">373</a>
-<a href="#374" id="374">374</a>
-<a href="#375" id="375">375</a>
-<a href="#376" id="376">376</a>
-<a href="#377" id="377">377</a>
-<a href="#378" id="378">378</a>
-<a href="#379" id="379">379</a>
-<a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -483,14 +463,6 @@
 ///     fn blocking_list(&amp;self, path: &amp;str, args: OpList) -&gt; Result&lt;(RpList, Self::BlockingPager)&gt; {
 ///         self.inner.blocking_list(path, args)
 ///     }
-///
-///     async fn scan(&amp;self, path: &amp;str, args: OpScan) -&gt; Result&lt;(RpScan, Self::Pager)&gt; {
-///         self.inner.scan(path, args).await
-///     }
-///
-///     fn blocking_scan(&amp;self, path: &amp;str, args: OpScan) -&gt; Result&lt;(RpScan, Self::BlockingPager)&gt; {
-///         self.inner.blocking_scan(path, args)
-///     }
 /// }
 ///
 /// /// The public struct that exposed to users.
@@ -533,7 +505,7 @@
         <span class="self">self</span>.inner().info()
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner().create_dir(path, args).<span class="kw">await
     </span>}
 
@@ -559,8 +531,6 @@
 
     <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt;;
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt;;
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         <span class="self">self</span>.inner().batch(args).<span class="kw">await
     </span>}
@@ -569,7 +539,7 @@
         <span class="self">self</span>.inner().presign(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.inner().blocking_create_dir(path, args)
     }
 
@@ -594,8 +564,6 @@
     }
 
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt;;
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt;;
 }
 
 <span class="attr">#[async_trait]
@@ -611,7 +579,7 @@
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).metadata()
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).create_dir(path, args).<span class="kw">await
     </span>}
 
@@ -643,10 +611,6 @@
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).list(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
-        (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).scan(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).batch(args).<span class="kw">await
     </span>}
@@ -655,7 +619,7 @@
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).presign(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).blocking_create_dir(path, args)
     }
 
@@ -686,10 +650,6 @@
     <span class="kw">fn </span>blocking_list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::BlockingPager)&gt; {
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).blocking_list(path, args)
     }
-
-    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
-        (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).blocking_scan(path, args)
-    }
 }
 
 <span class="attr">#[cfg(test)]
diff --git a/docs/rust/src/opendal/raw/oio/to_flat_pager.rs.html b/docs/rust/src/opendal/raw/oio/to_flat_pager.rs.html
index 2c16c6c8..f2574c9b 100644
--- a/docs/rust/src/opendal/raw/oio/to_flat_pager.rs.html
+++ b/docs/rust/src/opendal/raw/oio/to_flat_pager.rs.html
@@ -315,9 +315,6 @@
 <a href="#315" id="315">315</a>
 <a href="#316" id="316">316</a>
 <a href="#317" id="317">317</a>
-<a href="#318" id="318">318</a>
-<a href="#319" id="319">319</a>
-<a href="#320" id="320">320</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -350,11 +347,7 @@
     </span>{
         <span class="kw">let </span>meta = acc.info();
         <span class="macro">debug_assert!</span>(
-            !meta.capability().scan,
-            <span class="string">&quot;service already supports scan, call to_flat_pager must be a mistake&quot;
-        </span>);
-        <span class="macro">debug_assert!</span>(
-            meta.capability().list,
+            meta.capability().list_with_delimiter_slash,
             <span class="string">&quot;service doesn&#39;t support list hierarchy, it must be a bug&quot;
         </span>);
     }
@@ -579,6 +572,7 @@
         <span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; AccessorInfo {
             <span class="kw">let </span><span class="kw-2">mut </span>am = AccessorInfo::default();
             am.capability_mut().list = <span class="bool-val">true</span>;
+            am.capability_mut().list_with_delimiter_slash = <span class="bool-val">true</span>;
 
             am
         }
diff --git a/docs/rust/src/opendal/raw/rps.rs.html b/docs/rust/src/opendal/raw/rps.rs.html
index 74e70dd4..e36b9d0b 100644
--- a/docs/rust/src/opendal/raw/rps.rs.html
+++ b/docs/rust/src/opendal/raw/rps.rs.html
@@ -255,10 +255,6 @@
 <a href="#255" id="255">255</a>
 <a href="#256" id="256">256</a>
 <a href="#257" id="257">257</a>
-<a href="#258" id="258">258</a>
-<a href="#259" id="259">259</a>
-<a href="#260" id="260">260</a>
-<a href="#261" id="261">261</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -280,9 +276,9 @@
 
 <span class="kw">use crate</span>::<span class="kw-2">*</span>;
 
-<span class="doccomment">/// Reply for `create` operation
+<span class="doccomment">/// Reply for `create_dir` operation
 </span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>RpCreate {}
+</span><span class="kw">pub struct </span>RpCreateDir {}
 
 <span class="doccomment">/// Reply for `delete` operation
 </span><span class="attr">#[derive(Debug, Clone, Default)]
@@ -292,10 +288,6 @@
 </span><span class="attr">#[derive(Debug, Clone, Default)]
 </span><span class="kw">pub struct </span>RpList {}
 
-<span class="doccomment">/// Reply for `scan` operation.
-</span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>RpScan {}
-
 <span class="doccomment">/// Reply for `presign` operation.
 </span><span class="attr">#[derive(Debug, Clone)]
 </span><span class="kw">pub struct </span>RpPresign {
diff --git a/docs/rust/src/opendal/services/azblob/backend.rs.html b/docs/rust/src/opendal/services/azblob/backend.rs.html
index e7aae6fc..09cc30e4 100644
--- a/docs/rust/src/opendal/services/azblob/backend.rs.html
+++ b/docs/rust/src/opendal/services/azblob/backend.rs.html
@@ -1346,9 +1346,9 @@
                 create_dir: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
+                list_without_delimiter: <span class="bool-val">true</span>,
 
                 presign: <span class="self">self</span>.has_sas_token,
                 presign_stat: <span class="self">self</span>.has_sas_token,
@@ -1365,7 +1365,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .azblob_put_blob_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -1379,7 +1379,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/azdfs/backend.rs.html b/docs/rust/src/opendal/services/azdfs/backend.rs.html
index b54e75f6..210b7979 100644
--- a/docs/rust/src/opendal/services/azdfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/azdfs/backend.rs.html
@@ -863,7 +863,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .azdfs_create_request(path, <span class="string">&quot;directory&quot;</span>, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -877,7 +877,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/fs/backend.rs.html b/docs/rust/src/opendal/services/fs/backend.rs.html
index 3b97f173..8d1f5c16 100644
--- a/docs/rust/src/opendal/services/fs/backend.rs.html
+++ b/docs/rust/src/opendal/services/fs/backend.rs.html
@@ -1061,12 +1061,12 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = <span class="self">self</span>.root.join(path.trim_end_matches(<span class="string">&#39;/&#39;</span>));
 
         fs::create_dir_all(<span class="kw-2">&amp;</span>p).<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="doccomment">/// # Notes
@@ -1259,12 +1259,12 @@
         <span class="prelude-val">Ok</span>((RpList::default(), <span class="prelude-val">Some</span>(rd)))
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = <span class="self">self</span>.root.join(path.trim_end_matches(<span class="string">&#39;/&#39;</span>));
 
         std::fs::create_dir_all(p).map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="kw">fn </span>blocking_read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::BlockingReader)&gt; {
diff --git a/docs/rust/src/opendal/services/ftp/backend.rs.html b/docs/rust/src/opendal/services/ftp/backend.rs.html
index f0e3e81a..bc188f5c 100644
--- a/docs/rust/src/opendal/services/ftp/backend.rs.html
+++ b/docs/rust/src/opendal/services/ftp/backend.rs.html
@@ -921,7 +921,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>ftp_stream = <span class="self">self</span>.ftp_connect(Operation::CreateDir).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="kw">let </span>paths: Vec&lt;<span class="kw-2">&amp;</span>str&gt; = path.split_inclusive(<span class="string">&#39;/&#39;</span>).collect();
@@ -943,7 +943,7 @@
             }
         }
 
-        <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreate::default());
+        <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreateDir::default());
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
diff --git a/docs/rust/src/opendal/services/gcs/backend.rs.html b/docs/rust/src/opendal/services/gcs/backend.rs.html
index e46cf31e..96f76dd1 100644
--- a/docs/rust/src/opendal/services/gcs/backend.rs.html
+++ b/docs/rust/src/opendal/services/gcs/backend.rs.html
@@ -658,7 +658,6 @@
 <a href="#658" id="658">658</a>
 <a href="#659" id="659">659</a>
 <a href="#660" id="660">660</a>
-<a href="#661" id="661">661</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1082,7 +1081,6 @@
                 delete: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_with_limit: <span class="bool-val">true</span>,
                 list_with_start_after: <span class="bool-val">true</span>,
@@ -1099,7 +1097,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self
             </span>.core
             .gcs_insert_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -1110,7 +1108,7 @@
 
         <span class="kw">if </span>resp.status().is_success() {
             resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>(RpCreate::default())
+            <span class="prelude-val">Ok</span>(RpCreateDir::default())
         } <span class="kw">else </span>{
             <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>)
         }
diff --git a/docs/rust/src/opendal/services/ghac/backend.rs.html b/docs/rust/src/opendal/services/ghac/backend.rs.html
index 50b7ce1b..567c76ae 100644
--- a/docs/rust/src/opendal/services/ghac/backend.rs.html
+++ b/docs/rust/src/opendal/services/ghac/backend.rs.html
@@ -981,10 +981,10 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="comment">// ignore creation of dir.
         </span><span class="kw">if </span>path.ends_with(<span class="string">&#39;/&#39;</span>) {
-            <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreate::default());
+            <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreateDir::default());
         }
         <span class="kw">if </span>!<span class="self">self</span>.enable_create_simulation {
             <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
@@ -1004,7 +1004,7 @@
             reserve_resp.cache_id
         } <span class="kw">else if </span>resp.status().as_u16() == StatusCode::CONFLICT {
             <span class="comment">// If the file is already exist, just return Ok.
-            </span><span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreate::default());
+            </span><span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreateDir::default());
         } <span class="kw">else </span>{
             <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp)
                 .<span class="kw">await
@@ -1031,7 +1031,7 @@
 
         <span class="kw">if </span>resp.status().is_success() {
             resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>(RpCreate::default())
+            <span class="prelude-val">Ok</span>(RpCreateDir::default())
         } <span class="kw">else </span>{
             <span class="prelude-val">Err</span>(parse_error(resp)
                 .<span class="kw">await
diff --git a/docs/rust/src/opendal/services/hdfs/backend.rs.html b/docs/rust/src/opendal/services/hdfs/backend.rs.html
index 764a86e9..f894194d 100644
--- a/docs/rust/src/opendal/services/hdfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/hdfs/backend.rs.html
@@ -802,12 +802,12 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_rooted_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
         <span class="self">self</span>.client.create_dir(<span class="kw-2">&amp;</span>p).map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
@@ -940,12 +940,12 @@
         <span class="prelude-val">Ok</span>((RpList::default(), <span class="prelude-val">Some</span>(rd)))
     }
 
-    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">fn </span>blocking_create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>p = build_rooted_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
         <span class="self">self</span>.client.create_dir(<span class="kw-2">&amp;</span>p).map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>(RpCreate::default())
+        <span class="prelude-val">Ok</span>(RpCreateDir::default())
     }
 
     <span class="kw">fn </span>blocking_read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::BlockingReader)&gt; {
diff --git a/docs/rust/src/opendal/services/ipmfs/backend.rs.html b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
index 1666d1d9..bd46ea54 100644
--- a/docs/rust/src/opendal/services/ipmfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
@@ -446,7 +446,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>resp = <span class="self">self</span>.ipmfs_mkdir(path).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="kw">let </span>status = resp.status();
@@ -454,7 +454,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/obs/backend.rs.html b/docs/rust/src/opendal/services/obs/backend.rs.html
index 2968d9c5..4388e743 100644
--- a/docs/rust/src/opendal/services/obs/backend.rs.html
+++ b/docs/rust/src/opendal/services/obs/backend.rs.html
@@ -446,7 +446,6 @@
 <a href="#446" id="446">446</a>
 <a href="#447" id="447">447</a>
 <a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -777,7 +776,6 @@
                 create_dir: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
                 list_without_delimiter: <span class="bool-val">true</span>,
@@ -788,7 +786,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .obs_put_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -802,7 +800,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/oss/backend.rs.html b/docs/rust/src/opendal/services/oss/backend.rs.html
index 86e77f26..49b733cd 100644
--- a/docs/rust/src/opendal/services/oss/backend.rs.html
+++ b/docs/rust/src/opendal/services/oss/backend.rs.html
@@ -682,7 +682,6 @@
 <a href="#682" id="682">682</a>
 <a href="#683" id="683">683</a>
 <a href="#684" id="684">684</a>
-<a href="#685" id="685">685</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1153,7 +1152,6 @@
                 create_dir: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
                 list_without_delimiter: <span class="bool-val">true</span>,
@@ -1172,7 +1170,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>resp = <span class="self">self
             </span>.core
             .oss_put_object(path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)
@@ -1182,7 +1180,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/s3/backend.rs.html b/docs/rust/src/opendal/services/s3/backend.rs.html
index 3a216290..fe6ffc05 100644
--- a/docs/rust/src/opendal/services/s3/backend.rs.html
+++ b/docs/rust/src/opendal/services/s3/backend.rs.html
@@ -1255,7 +1255,6 @@
 <a href="#1255" id="1255">1255</a>
 <a href="#1256" id="1256">1256</a>
 <a href="#1257" id="1257">1257</a>
-<a href="#1258" id="1258">1258</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -2238,7 +2237,6 @@
                 delete: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_with_limit: <span class="bool-val">true</span>,
                 list_with_start_after: <span class="bool-val">true</span>,
@@ -2259,7 +2257,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .s3_put_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -2273,7 +2271,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/sftp/backend.rs.html b/docs/rust/src/opendal/services/sftp/backend.rs.html
index 21ccddc6..07b17374 100644
--- a/docs/rust/src/opendal/services/sftp/backend.rs.html
+++ b/docs/rust/src/opendal/services/sftp/backend.rs.html
@@ -849,7 +849,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>client = <span class="self">self</span>.sftp_connect().<span class="kw">await</span><span class="question-mark">?</span>;
         <span class="kw">let </span><span class="kw-2">mut </span>fs = client.sftp.fs();
         fs.set_cwd(<span class="self">self</span>.root.clone());
@@ -873,7 +873,7 @@
             fs.set_cwd(current.clone());
         }
 
-        <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreate::default());
+        <span class="kw">return </span><span class="prelude-val">Ok</span>(RpCreateDir::default());
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
@@ -923,7 +923,7 @@
         }
 
         <span class="kw">if let </span><span class="prelude-val">Some</span>((dir, <span class="kw">_</span>)) = path.rsplit_once(<span class="string">&#39;/&#39;</span>) {
-            <span class="self">self</span>.create_dir(dir, OpCreate::default()).<span class="kw">await</span><span class="question-mark">?</span>;
+            <span class="self">self</span>.create_dir(dir, OpCreateDir::default()).<span class="kw">await</span><span class="question-mark">?</span>;
         }
 
         <span class="kw">let </span>path = <span class="macro">format!</span>(<span class="string">&quot;{}{}&quot;</span>, <span class="self">self</span>.root, path);
diff --git a/docs/rust/src/opendal/services/sled/backend.rs.html b/docs/rust/src/opendal/services/sled/backend.rs.html
index c24a2772..ba0c0df9 100644
--- a/docs/rust/src/opendal/services/sled/backend.rs.html
+++ b/docs/rust/src/opendal/services/sled/backend.rs.html
@@ -377,7 +377,7 @@
             Capability {
                 read: <span class="bool-val">true</span>,
                 write: <span class="bool-val">true</span>,
-                scan: <span class="bool-val">true</span>,
+                list: <span class="bool-val">true</span>,
                 blocking: <span class="bool-val">true</span>,
                 ..Default::default()
             },
diff --git a/docs/rust/src/opendal/services/supabase/backend.rs.html b/docs/rust/src/opendal/services/supabase/backend.rs.html
index ca8d7c91..1b2204b0 100644
--- a/docs/rust/src/opendal/services/supabase/backend.rs.html
+++ b/docs/rust/src/opendal/services/supabase/backend.rs.html
@@ -562,7 +562,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .supabase_upload_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -575,12 +575,12 @@
 
         <span class="kw">if </span>status.is_success() {
             resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-            <span class="prelude-val">Ok</span>(RpCreate::default())
+            <span class="prelude-val">Ok</span>(RpCreateDir::default())
         } <span class="kw">else </span>{
             <span class="comment">// create duplicate dir is ok
             </span><span class="kw">let </span>e = parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>;
             <span class="kw">if </span>e.kind() == ErrorKind::AlreadyExists {
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             } <span class="kw">else </span>{
                 <span class="prelude-val">Err</span>(e)
             }
diff --git a/docs/rust/src/opendal/services/wasabi/backend.rs.html b/docs/rust/src/opendal/services/wasabi/backend.rs.html
index 6c90109d..0c3a2e03 100644
--- a/docs/rust/src/opendal/services/wasabi/backend.rs.html
+++ b/docs/rust/src/opendal/services/wasabi/backend.rs.html
@@ -1180,7 +1180,6 @@
 <a href="#1180" id="1180">1180</a>
 <a href="#1181" id="1181">1181</a>
 <a href="#1182" id="1182">1182</a>
-<a href="#1183" id="1183">1183</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -2102,7 +2101,6 @@
                 copy: <span class="bool-val">true</span>,
                 rename: <span class="bool-val">true</span>,
 
-                scan: <span class="bool-val">true</span>,
                 list: <span class="bool-val">true</span>,
                 list_without_delimiter: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
@@ -2120,7 +2118,7 @@
         am
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span><span class="kw-2">mut </span>req =
             <span class="self">self</span>.core
                 .put_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?</span>;
@@ -2134,7 +2132,7 @@
         <span class="kw">match </span>status {
             StatusCode::CREATED | StatusCode::OK =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/webdav/backend.rs.html b/docs/rust/src/opendal/services/webdav/backend.rs.html
index aa7e01a0..3b65f208 100644
--- a/docs/rust/src/opendal/services/webdav/backend.rs.html
+++ b/docs/rust/src/opendal/services/webdav/backend.rs.html
@@ -683,6 +683,12 @@
 <a href="#683" id="683">683</a>
 <a href="#684" id="684">684</a>
 <a href="#685" id="685">685</a>
+<a href="#686" id="686">686</a>
+<a href="#687" id="687">687</a>
+<a href="#688" id="688">688</a>
+<a href="#689" id="689">689</a>
+<a href="#690" id="690">690</a>
+<a href="#691" id="691">691</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -968,7 +974,6 @@
                 rename: <span class="bool-val">true</span>,
 
                 list: <span class="bool-val">true</span>,
-                list_without_delimiter: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
 
                 ..Default::default()
@@ -977,7 +982,7 @@
         ma
     }
 
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="self">self</span>.ensure_parent_path(path).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="kw">let </span>abs_path = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
@@ -1090,7 +1095,14 @@
         }
     }
 
-    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+        <span class="kw">if </span>args.delimiter() != <span class="string">&quot;/&quot; </span>{
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;webdav only support delimiter `/`&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span><span class="kw-2">mut </span>header_map = HeaderMap::new();
         header_map.insert(<span class="string">&quot;Depth&quot;</span>, <span class="string">&quot;1&quot;</span>.parse().unwrap());
         header_map.insert(header::CONTENT_TYPE, <span class="string">&quot;application/xml&quot;</span>.parse().unwrap());
@@ -1318,7 +1330,7 @@
         <span class="self">self</span>.client.send(req).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>create_internal(<span class="kw-2">&amp;</span><span class="self">self</span>, abs_path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    <span class="kw">async fn </span>create_internal(<span class="kw-2">&amp;</span><span class="self">self</span>, abs_path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>resp = <span class="kw">if </span>abs_path.ends_with(<span class="string">&#39;/&#39;</span>) {
             <span class="self">self</span>.webdav_mkcol(abs_path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>, AsyncBody::Empty)
                 .<span class="kw">await</span><span class="question-mark">?
@@ -1339,7 +1351,7 @@
             <span class="comment">// create existing file will return no_content
             </span>| StatusCode::NO_CONTENT =&gt; {
                 resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreate::default())
+                <span class="prelude-val">Ok</span>(RpCreateDir::default())
             }
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
diff --git a/docs/rust/src/opendal/services/webhdfs/backend.rs.html b/docs/rust/src/opendal/services/webhdfs/backend.rs.html
index d5fbc797..c2af9a76 100644
--- a/docs/rust/src/opendal/services/webhdfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/webhdfs/backend.rs.html
@@ -618,6 +618,12 @@
 <a href="#618" id="618">618</a>
 <a href="#619" id="619">619</a>
 <a href="#620" id="620">620</a>
+<a href="#621" id="621">621</a>
+<a href="#622" id="622">622</a>
+<a href="#623" id="623">623</a>
+<a href="#624" id="624">624</a>
+<a href="#625" id="625">625</a>
+<a href="#626" id="626">626</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1069,7 +1075,7 @@
                 }
             }
             StatusCode::NOT_FOUND =&gt; {
-                <span class="self">self</span>.create_dir(<span class="string">&quot;/&quot;</span>, OpCreate::new()).<span class="kw">await</span><span class="question-mark">?</span>;
+                <span class="self">self</span>.create_dir(<span class="string">&quot;/&quot;</span>, OpCreateDir::new()).<span class="kw">await</span><span class="question-mark">?</span>;
             }
             <span class="kw">_ </span>=&gt; <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
@@ -1102,7 +1108,6 @@
                 delete: <span class="bool-val">true</span>,
 
                 list: <span class="bool-val">true</span>,
-                list_without_delimiter: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
 
                 ..Default::default()
@@ -1111,7 +1116,7 @@
     }
 
     <span class="doccomment">/// Create a file or directory
-    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreate) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreate&gt; {
+    </span><span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
         <span class="kw">let </span>req = <span class="self">self
             </span>.webhdfs_create_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">None</span>, AsyncBody::Empty)
             .<span class="kw">await</span><span class="question-mark">?</span>;
@@ -1132,7 +1137,7 @@
                     .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
 
                 <span class="kw">if </span>resp.boolean {
-                    <span class="prelude-val">Ok</span>(RpCreate::default())
+                    <span class="prelude-val">Ok</span>(RpCreateDir::default())
                 } <span class="kw">else </span>{
                     <span class="prelude-val">Err</span>(Error::new(
                         ErrorKind::Unexpected,
@@ -1214,7 +1219,14 @@
         }
     }
 
-    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
+        <span class="kw">if </span>args.delimiter() != <span class="string">&quot;/&quot; </span>{
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::Unsupported,
+                <span class="string">&quot;webhdfs only support delimiter `/`&quot;</span>,
+            ));
+        }
+
         <span class="kw">let </span>path = path.trim_end_matches(<span class="string">&#39;/&#39;</span>);
         <span class="kw">let </span>req = <span class="self">self</span>.webhdfs_list_status_request(path)<span class="question-mark">?</span>;
 
diff --git a/docs/rust/src/opendal/types/capability.rs.html b/docs/rust/src/opendal/types/capability.rs.html
index ff06fbcf..83c5aef4 100644
--- a/docs/rust/src/opendal/types/capability.rs.html
+++ b/docs/rust/src/opendal/types/capability.rs.html
@@ -170,13 +170,6 @@
 <a href="#170" id="170">170</a>
 <a href="#171" id="171">171</a>
 <a href="#172" id="172">172</a>
-<a href="#173" id="173">173</a>
-<a href="#174" id="174">174</a>
-<a href="#175" id="175">175</a>
-<a href="#176" id="176">176</a>
-<a href="#177" id="177">177</a>
-<a href="#178" id="178">178</a>
-<a href="#179" id="179">179</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -287,10 +280,6 @@
     </span><span class="kw">pub </span>list_with_delimiter_slash: bool,
     <span class="doccomment">/// If backend supports list without delimiter.
     </span><span class="kw">pub </span>list_without_delimiter: bool,
-    <span class="doccomment">/// If operator supports scan natively, it will be true.
-    </span><span class="kw">pub </span>scan: bool,
-    <span class="doccomment">/// If backend supports scan with limit, it will be true.
-    </span><span class="kw">pub </span>scan_with_limit: bool,
 
     <span class="doccomment">/// If operator supports presign natively, it will be true.
     </span><span class="kw">pub </span>presign: bool,
@@ -340,9 +329,6 @@
         <span class="kw">if </span><span class="self">self</span>.list {
             s.push(<span class="string">&quot;List&quot;</span>);
         }
-        <span class="kw">if </span><span class="self">self</span>.scan {
-            s.push(<span class="string">&quot;Scan&quot;</span>);
-        }
         <span class="kw">if </span><span class="self">self</span>.presign {
             s.push(<span class="string">&quot;Presign&quot;</span>);
         }
diff --git a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
index 6b3a01e1..8925321b 100644
--- a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
@@ -781,6 +781,10 @@
 <a href="#781" id="781">781</a>
 <a href="#782" id="782">782</a>
 <a href="#783" id="783">783</a>
+<a href="#784" id="784">784</a>
+<a href="#785" id="785">785</a>
+<a href="#786" id="786">786</a>
+<a href="#787" id="787">787</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1090,7 +1094,8 @@
             .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path));
         }
 
-        <span class="self">self</span>.inner().blocking_create_dir(<span class="kw-2">&amp;</span>path, OpCreate::new())<span class="question-mark">?</span>;
+        <span class="self">self</span>.inner()
+            .blocking_create_dir(<span class="kw-2">&amp;</span>path, OpCreateDir::new())<span class="question-mark">?</span>;
 
         <span class="prelude-val">Ok</span>(())
     }
@@ -1519,6 +1524,7 @@
     /// # Notes
     ///
     /// - `scan` will not return the prefix itself.
+    /// - `scan` is an alias of `list_with(OpList::new().with_delimiter(&quot;&quot;))`
     ///
     /// # Examples
     ///
@@ -1555,12 +1561,14 @@
                 ErrorKind::NotADirectory,
                 <span class="string">&quot;the path trying to scan should end with `/`&quot;</span>,
             )
-            .with_operation(<span class="string">&quot;BlockingOperator::scan&quot;</span>)
+            .with_operation(<span class="string">&quot;BlockingOperator::list&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
             .with_context(<span class="string">&quot;path&quot;</span>, path));
         }
 
-        <span class="kw">let </span>(<span class="kw">_</span>, pager) = <span class="self">self</span>.inner().blocking_scan(<span class="kw-2">&amp;</span>path, OpScan::new())<span class="question-mark">?</span>;
+        <span class="kw">let </span>(<span class="kw">_</span>, pager) = <span class="self">self
+            </span>.inner()
+            .blocking_list(<span class="kw-2">&amp;</span>path, OpList::new().with_delimiter(<span class="string">&quot;&quot;</span>))<span class="question-mark">?</span>;
         <span class="prelude-val">Ok</span>(BlockingLister::new(pager))
     }
 }
diff --git a/docs/rust/src/opendal/types/operator/metadata.rs.html b/docs/rust/src/opendal/types/operator/metadata.rs.html
index 6d97aef3..2e6e9aa4 100644
--- a/docs/rust/src/opendal/types/operator/metadata.rs.html
+++ b/docs/rust/src/opendal/types/operator/metadata.rs.html
@@ -92,11 +92,6 @@
 <a href="#92" id="92">92</a>
 <a href="#93" id="93">93</a>
 <a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -176,11 +171,6 @@
         <span class="self">self</span>.<span class="number">0</span>.capability().list
     }
 
-    <span class="doccomment">/// Check if current backend supports [`Accessor::scan`] or not.
-    </span><span class="kw">pub fn </span>can_scan(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; bool {
-        <span class="self">self</span>.<span class="number">0</span>.capability().scan
-    }
-
     <span class="doccomment">/// Check if current backend supports [`Accessor::presign`] or not.
     </span><span class="kw">pub fn </span>can_presign(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; bool {
         <span class="self">self</span>.<span class="number">0</span>.capability().presign
diff --git a/docs/rust/src/opendal/types/operator/operator.rs.html b/docs/rust/src/opendal/types/operator/operator.rs.html
index d5f84243..160e78b2 100644
--- a/docs/rust/src/opendal/types/operator/operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator.rs.html
@@ -1372,6 +1372,44 @@
 <a href="#1372" id="1372">1372</a>
 <a href="#1373" id="1373">1373</a>
 <a href="#1374" id="1374">1374</a>
+<a href="#1375" id="1375">1375</a>
+<a href="#1376" id="1376">1376</a>
+<a href="#1377" id="1377">1377</a>
+<a href="#1378" id="1378">1378</a>
+<a href="#1379" id="1379">1379</a>
+<a href="#1380" id="1380">1380</a>
+<a href="#1381" id="1381">1381</a>
+<a href="#1382" id="1382">1382</a>
+<a href="#1383" id="1383">1383</a>
+<a href="#1384" id="1384">1384</a>
+<a href="#1385" id="1385">1385</a>
+<a href="#1386" id="1386">1386</a>
+<a href="#1387" id="1387">1387</a>
+<a href="#1388" id="1388">1388</a>
+<a href="#1389" id="1389">1389</a>
+<a href="#1390" id="1390">1390</a>
+<a href="#1391" id="1391">1391</a>
+<a href="#1392" id="1392">1392</a>
+<a href="#1393" id="1393">1393</a>
+<a href="#1394" id="1394">1394</a>
+<a href="#1395" id="1395">1395</a>
+<a href="#1396" id="1396">1396</a>
+<a href="#1397" id="1397">1397</a>
+<a href="#1398" id="1398">1398</a>
+<a href="#1399" id="1399">1399</a>
+<a href="#1400" id="1400">1400</a>
+<a href="#1401" id="1401">1401</a>
+<a href="#1402" id="1402">1402</a>
+<a href="#1403" id="1403">1403</a>
+<a href="#1404" id="1404">1404</a>
+<a href="#1405" id="1405">1405</a>
+<a href="#1406" id="1406">1406</a>
+<a href="#1407" id="1407">1407</a>
+<a href="#1408" id="1408">1408</a>
+<a href="#1409" id="1409">1409</a>
+<a href="#1410" id="1410">1410</a>
+<a href="#1411" id="1411">1411</a>
+<a href="#1412" id="1412">1412</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1774,7 +1812,7 @@
             .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path));
         }
 
-        <span class="self">self</span>.inner().create_dir(<span class="kw-2">&amp;</span>path, OpCreate::new()).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="self">self</span>.inner().create_dir(<span class="kw-2">&amp;</span>path, OpCreateDir::new()).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="prelude-val">Ok</span>(())
     }
@@ -2473,6 +2511,8 @@
     ///
     /// # Examples
     ///
+    /// ## List current dir
+    ///
     /// ```no_run
     /// # use anyhow::Result;
     /// # use futures::io;
@@ -2500,6 +2540,38 @@
     /// # Ok(())
     /// # }
     /// ```
+    ///
+    /// ## List all files recursively
+    ///
+    /// We can use `op.scan()` as a shorter alias.
+    ///
+    /// ```no_run
+    /// # use anyhow::Result;
+    /// # use futures::io;
+    /// use futures::TryStreamExt;
+    /// use opendal::ops::OpList;
+    /// use opendal::EntryMode;
+    /// use opendal::Metakey;
+    /// use opendal::Operator;
+    /// # #[tokio::main]
+    /// # async fn test(op: Operator) -&gt; Result&lt;()&gt; {
+    /// let option = OpList::new().with_delimiter(&quot;&quot;);
+    /// let mut ds = op.list_with(&quot;path/to/dir/&quot;, option).await?;
+    /// while let Some(mut de) = ds.try_next().await? {
+    ///     let meta = op.metadata(&amp;de, Metakey::Mode).await?;
+    ///     match meta.mode() {
+    ///         EntryMode::FILE =&gt; {
+    ///             println!(&quot;Handling file&quot;)
+    ///         }
+    ///         EntryMode::DIR =&gt; {
+    ///             println!(&quot;Handling dir like start a new list via meta.path()&quot;)
+    ///         }
+    ///         EntryMode::Unknown =&gt; continue,
+    ///     }
+    /// }
+    /// # Ok(())
+    /// # }
+    /// ```
     </span><span class="kw">pub async fn </span>list_with(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, op: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;Lister&gt; {
         <span class="kw">let </span>path = normalize_path(path);
 
@@ -2527,6 +2599,7 @@
     /// # Notes
     ///
     /// - `scan` will not return the prefix itself.
+    /// - `scan` is an alias of `list_with(OpList::new().with_delimiter(&quot;&quot;))`
     ///
     /// # Examples
     ///
@@ -2564,12 +2637,15 @@
                 ErrorKind::NotADirectory,
                 <span class="string">&quot;the path trying to scan should end with `/`&quot;</span>,
             )
-            .with_operation(<span class="string">&quot;scan&quot;</span>)
+            .with_operation(<span class="string">&quot;list&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
             .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path));
         }
 
-        <span class="kw">let </span>(<span class="kw">_</span>, pager) = <span class="self">self</span>.inner().scan(<span class="kw-2">&amp;</span>path, OpScan::new()).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>(<span class="kw">_</span>, pager) = <span class="self">self
+            </span>.inner()
+            .list(<span class="kw-2">&amp;</span>path, OpList::new().with_delimiter(<span class="string">&quot;&quot;</span>))
+            .<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="prelude-val">Ok</span>(Lister::new(pager))
     }
diff --git a/docs/rust/src/opendal/types/ops.rs.html b/docs/rust/src/opendal/types/ops.rs.html
index 387676dd..32c0ee64 100644
--- a/docs/rust/src/opendal/types/ops.rs.html
+++ b/docs/rust/src/opendal/types/ops.rs.html
@@ -418,32 +418,6 @@
 <a href="#418" id="418">418</a>
 <a href="#419" id="419">419</a>
 <a href="#420" id="420">420</a>
-<a href="#421" id="421">421</a>
-<a href="#422" id="422">422</a>
-<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -473,10 +447,10 @@
 ///
 /// The path must be normalized.
 </span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>OpCreate {}
+</span><span class="kw">pub struct </span>OpCreateDir {}
 
-<span class="kw">impl </span>OpCreate {
-    <span class="doccomment">/// Create a new `OpCreate`.
+<span class="kw">impl </span>OpCreateDir {
+    <span class="doccomment">/// Create a new `OpCreateDir`.
     </span><span class="kw">pub fn </span>new() -&gt; <span class="self">Self </span>{
         <span class="self">Self</span>::default()
     }
@@ -560,32 +534,6 @@
     }
 }
 
-<span class="doccomment">/// Args for `scan` operation.
-</span><span class="attr">#[derive(Debug, Default, Clone)]
-</span><span class="kw">pub struct </span>OpScan {
-    <span class="doccomment">/// The limit passed to underlying service to specify the max results
-    /// that could return.
-    </span>limit: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-}
-
-<span class="kw">impl </span>OpScan {
-    <span class="doccomment">/// Create a new `OpList`.
-    </span><span class="kw">pub fn </span>new() -&gt; <span class="self">Self </span>{
-        <span class="self">Self</span>::default()
-    }
-
-    <span class="doccomment">/// Change the limit of this list operation.
-    </span><span class="kw">pub fn </span>with_limit(<span class="kw-2">mut </span><span class="self">self</span>, limit: usize) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.limit = <span class="prelude-val">Some</span>(limit);
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Get the limit of list operation.
-    </span><span class="kw">pub fn </span>limit(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;usize&gt; {
-        <span class="self">self</span>.limit
-    }
-}
-
 <span class="doccomment">/// Args for `presign` operation.
 ///
 /// The path must be normalized.
diff --git a/docs/vision/index.html b/docs/vision/index.html
index adb4d35d..9e97cabb 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 2dfce836..0495fdb4 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.818cbf68.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.ca1a7582.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hid [...]
-<script src="/assets/js/runtime~main.818cbf68.js"></script>
+<script src="/assets/js/runtime~main.ca1a7582.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file