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/08/20 08:18:13 UTC

[incubator-opendal] branch gh-pages updated: deploy: 5afec91831524b755bc703ee1d05942f4042b176

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 d6c9fa432 deploy: 5afec91831524b755bc703ee1d05942f4042b176
d6c9fa432 is described below

commit d6c9fa432a58795aec567704e2a12a8873118c5e
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sun Aug 20 08:18:09 2023 +0000

    deploy: 5afec91831524b755bc703ee1d05942f4042b176
---
 404.html                                           |   4 +-
 .../{054cd2fb.14a4e53d.js => 054cd2fb.3e5e0344.js} |   2 +-
 .../{136e1c50.6a7e017e.js => 136e1c50.32f53e8f.js} |   2 +-
 .../{1957547a.12aabe1e.js => 1957547a.5abff174.js} |   2 +-
 .../{1db64337.07a43f6d.js => 1db64337.265b35ed.js} |   2 +-
 assets/js/209227ae.b4b413b1.js                     |   1 -
 assets/js/209227ae.fde3d3f7.js                     |   1 +
 .../{22d8fa67.dc155ca8.js => 22d8fa67.e95ff6fc.js} |   2 +-
 .../{2cbf1097.b0d26f09.js => 2cbf1097.2d356f73.js} |   2 +-
 .../{434bbc94.61f3c745.js => 434bbc94.c0beac80.js} |   2 +-
 .../{57a16c1d.85f43ad5.js => 57a16c1d.7295589e.js} |   2 +-
 assets/js/5a65e608.49f1b26c.js                     |   1 +
 assets/js/5a65e608.dddd286e.js                     |   1 -
 .../{62a401e9.291fb6d9.js => 62a401e9.562dcbee.js} |   2 +-
 assets/js/6eb7fe18.8336b918.js                     |   1 -
 assets/js/6eb7fe18.e5758923.js                     |   1 +
 .../{8cc9519e.b417f651.js => 8cc9519e.692769cb.js} |   2 +-
 .../{8f4159f2.e094a109.js => 8f4159f2.34527bb0.js} |   2 +-
 .../{a0405932.91aded4f.js => a0405932.0c3d78cd.js} |   2 +-
 .../{ab10c306.2debf377.js => ab10c306.1e4b8705.js} |   2 +-
 assets/js/ae4554eb.51d12c7a.js                     |   1 -
 assets/js/ae4554eb.6f8629a8.js                     |   1 +
 .../{b56f9725.c39b4d1b.js => b56f9725.db68df01.js} |   2 +-
 .../{bb5b2057.4d142543.js => bb5b2057.c5e47497.js} |   2 +-
 .../{c6ab695b.76e86988.js => c6ab695b.4eb7938f.js} |   2 +-
 .../{cc62039a.bdd8d466.js => cc62039a.293d6e0d.js} |   2 +-
 assets/js/d5c31a96.5e5b1a76.js                     |   1 +
 assets/js/d5c31a96.cded60df.js                     |   1 -
 .../{e892cec6.981219c7.js => e892cec6.f8adb52d.js} |   2 +-
 .../{f1ca5a39.15af91eb.js => f1ca5a39.936973c9.js} |   2 +-
 assets/js/runtime~main.918b9b82.js                 |   1 -
 assets/js/runtime~main.9d9369c2.js                 |   1 +
 blog/archive/index.html                            |   4 +-
 blog/how-opendal-read-data/index.html              |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-access-data-freely/index.html         |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 blog/tags/internal/index.html                      |   4 +-
 docs/category/contributing/index.html              |   4 +-
 docs/category/reference/index.html                 |   4 +-
 docs/category/services/index.html                  |   4 +-
 .../reference/generate_release_note/index.html     |   6 +-
 docs/contributing/reference/setup_gpg/index.html   |   6 +-
 docs/contributing/release/index.html               |   6 +-
 docs/contributing/verify/index.html                |   6 +-
 docs/lua/classes/opendal.metadata.html             |   2 +-
 docs/lua/classes/opendal.operator.html             |   2 +-
 docs/lua/index.html                                |   2 +-
 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                  |  58 +--
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/overview/index.html                           |   6 +-
 docs/python/opendal.html                           |  50 +-
 docs/python/search.js                              |   2 +-
 docs/rust/implementors/core/clone/trait.Clone.js   |   2 +-
 docs/rust/implementors/core/cmp/trait.Eq.js        |   2 +-
 docs/rust/implementors/core/cmp/trait.PartialEq.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/fmt/trait.Display.js   |   2 +-
 .../core/future/future/trait.Future.js             |   2 +-
 docs/rust/implementors/core/hash/trait.Hash.js     |   2 +-
 docs/rust/implementors/core/marker/trait.Copy.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Freeze.js |   2 +-
 docs/rust/implementors/core/marker/trait.Send.js   |   2 +-
 .../implementors/core/marker/trait.StructuralEq.js |   2 +-
 .../core/marker/trait.StructuralPartialEq.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 +-
 .../futures_io/if_std/trait.AsyncWrite.js          |   2 +-
 .../opendal/raw/oio/append/api/trait.Append.js     |   3 -
 .../tokio/io/async_write/trait.AsyncWrite.js       |   2 +-
 docs/rust/opendal/all.html                         |   2 +-
 docs/rust/opendal/index.html                       |   3 +-
 docs/rust/opendal/layers/struct.MadsimServer.html  |   6 +-
 .../rust/opendal/layers/struct.MinitraceLayer.html |   4 +-
 docs/rust/opendal/layers/struct.RetryLayer.html    |  18 +-
 docs/rust/opendal/layers/struct.TimeoutLayer.html  |  12 +-
 .../opendal/layers/trait.RetryInterceptor.html     |   4 +-
 docs/rust/opendal/operator_futures/index.html      |   4 +-
 .../rust/opendal/operator_futures/sidebar-items.js |   2 +-
 .../operator_futures/struct.FutureAppend.html      | 145 ------
 .../operator_futures/struct.FutureAppender.html    | 145 ------
 .../operator_futures/struct.FutureDelete.html      |   6 +-
 .../operator_futures/struct.FutureList.html        |  10 +-
 .../operator_futures/struct.FutureLister.html      |  12 +-
 .../operator_futures/struct.FuturePresignRead.html |  16 +-
 .../struct.FuturePresignWrite.html                 |  12 +-
 .../operator_futures/struct.FutureRead.html        |  18 +-
 .../operator_futures/struct.FutureReader.html      |  16 +-
 .../operator_futures/struct.FutureWrite.html       |  16 +-
 .../operator_futures/struct.FutureWriter.html      |  16 +-
 .../opendal/raw/adapters/kv/struct.Backend.html    |  38 +-
 .../raw/adapters/typed_kv/struct.Backend.html      |  38 +-
 docs/rust/opendal/raw/enum.Operation.html          |  10 +-
 docs/rust/opendal/raw/index.html                   |   2 +-
 .../opendal/raw/oio/append/api/type.Appender.html  |  11 -
 .../rust/opendal/raw/oio/enum.AppendOperation.html |  40 --
 docs/rust/opendal/raw/oio/enum.TwoWaysWriter.html  |  49 ++
 docs/rust/opendal/raw/oio/index.html               |  10 +-
 docs/rust/opendal/raw/oio/sidebar-items.js         |   2 +-
 .../opendal/raw/oio/struct.AppendObjectWriter.html |  52 +++
 docs/rust/opendal/raw/oio/struct.VectorCursor.html |   7 +-
 docs/rust/opendal/raw/oio/trait.Append.html        |  50 --
 .../opendal/raw/oio/trait.AppendObjectWrite.html   |  39 ++
 docs/rust/opendal/raw/oio/trait.Write.html         |   3 +-
 docs/rust/opendal/raw/oio/type.Appender.html       |   2 -
 .../struct.AppendObjectWriter.html                 |  11 +
 .../trait.AppendObjectWrite.html}                  |   6 +-
 .../two_ways_write/enum.TwoWaysWriter.html}        |   6 +-
 docs/rust/opendal/raw/ops/struct.OpAppend.html     |  11 -
 docs/rust/opendal/raw/rps/struct.RpAppend.html     |  11 -
 docs/rust/opendal/raw/sidebar-items.js             |   2 +-
 docs/rust/opendal/raw/struct.AccessorInfo.html     |  24 +-
 docs/rust/opendal/raw/struct.OpAppend.html         |  29 --
 docs/rust/opendal/raw/struct.OpCopy.html           |   6 +-
 docs/rust/opendal/raw/struct.OpRename.html         |   6 +-
 docs/rust/opendal/raw/struct.OpWrite.html          |  26 +-
 docs/rust/opendal/raw/struct.RpAppend.html         |  23 -
 docs/rust/opendal/raw/struct.RpCopy.html           |   6 +-
 docs/rust/opendal/raw/struct.RpRename.html         |   6 +-
 docs/rust/opendal/raw/trait.Accessor.html          | 119 ++---
 docs/rust/opendal/raw/trait.Layer.html             |  13 +-
 docs/rust/opendal/raw/trait.LayeredAccessor.html   |  52 +--
 docs/rust/opendal/raw/type.FusedAccessor.html      |   2 +-
 docs/rust/opendal/services/struct.Azblob.html      |  30 +-
 docs/rust/opendal/services/struct.Cos.html         |  20 +-
 docs/rust/opendal/services/struct.Fs.html          |  10 +-
 docs/rust/opendal/services/struct.Hdfs.html        |  12 +-
 docs/rust/opendal/services/struct.Obs.html         |  18 +-
 docs/rust/opendal/services/struct.Oss.html         |  26 +-
 docs/rust/opendal/sidebar-items.js                 |   2 +-
 docs/rust/opendal/struct.Appender.html             | 150 ------
 docs/rust/opendal/struct.Capability.html           |  70 ++-
 docs/rust/opendal/struct.Error.html                |   2 +-
 docs/rust/opendal/struct.Operator.html             | 153 +++----
 docs/rust/opendal/trait.Builder.html               |   2 +-
 .../opendal/types/appender/struct.Appender.html    |  11 -
 .../operator_futures/struct.FutureAppend.html      |  11 -
 .../operator_futures/struct.FutureAppender.html    |  11 -
 docs/rust/search-index.js                          |   2 +-
 docs/rust/source-files.js                          |   2 +-
 .../src/opendal/layers/async_backtrace.rs.html     |  12 -
 docs/rust/src/opendal/layers/await_tree.rs.html    |  16 -
 docs/rust/src/opendal/layers/blocking.rs.html      |  10 -
 docs/rust/src/opendal/layers/chaos.rs.html         |  10 -
 docs/rust/src/opendal/layers/complete.rs.html      | 134 ------
 .../src/opendal/layers/concurrent_limit.rs.html    |  52 ---
 docs/rust/src/opendal/layers/error_context.rs.html |  84 ----
 .../src/opendal/layers/immutable_index.rs.html     |  10 -
 docs/rust/src/opendal/layers/logging.rs.html       | 248 ----------
 docs/rust/src/opendal/layers/madsim.rs.html        |  24 -
 docs/rust/src/opendal/layers/metrics.rs.html       |  10 -
 docs/rust/src/opendal/layers/minitrace.rs.html     |  80 ----
 docs/rust/src/opendal/layers/oteltrace.rs.html     |  10 -
 docs/rust/src/opendal/layers/prometheus.rs.html    |  10 -
 docs/rust/src/opendal/layers/retry.rs.html         | 168 -------
 docs/rust/src/opendal/layers/throttle.rs.html      |  82 ----
 docs/rust/src/opendal/layers/timeout.rs.html       |  84 +---
 docs/rust/src/opendal/layers/tracing.rs.html       |  10 -
 docs/rust/src/opendal/layers/type_eraser.rs.html   |  16 -
 docs/rust/src/opendal/raw/accessor.rs.html         |  52 ---
 .../src/opendal/raw/adapters/kv/backend.rs.html    |   2 -
 .../opendal/raw/adapters/typed_kv/backend.rs.html  |   2 -
 docs/rust/src/opendal/raw/layer.rs.html            |  28 --
 docs/rust/src/opendal/raw/oio/append/api.rs.html   | 217 ---------
 docs/rust/src/opendal/raw/oio/append/mod.rs.html   |  39 --
 docs/rust/src/opendal/raw/oio/cursor.rs.html       |   4 +
 docs/rust/src/opendal/raw/oio/mod.rs.html          |   6 -
 .../opendal/raw/oio/page/into_flat_page.rs.html    |   2 -
 .../oio/read/into_seekable_read_by_range.rs.html   |   2 -
 .../raw/oio/write/append_object_write.rs.html      | 353 ++++++++++++++
 docs/rust/src/opendal/raw/oio/write/mod.rs.html    |  14 +
 .../opendal/raw/oio/write/two_ways_write.rs.html   | 129 ++++++
 docs/rust/src/opendal/raw/operation.rs.html        |   6 -
 docs/rust/src/opendal/raw/ops.rs.html              |  96 +---
 docs/rust/src/opendal/raw/rps.rs.html              |  22 -
 .../src/opendal/services/azblob/appender.rs.html   | 291 ------------
 .../src/opendal/services/azblob/backend.rs.html    |  40 +-
 docs/rust/src/opendal/services/azblob/core.rs.html |   2 +-
 docs/rust/src/opendal/services/azblob/mod.rs.html  |   2 -
 .../src/opendal/services/azblob/writer.rs.html     | 250 +++++++++-
 .../src/opendal/services/azdfs/backend.rs.html     |   2 -
 .../rust/src/opendal/services/cos/appender.rs.html | 325 -------------
 docs/rust/src/opendal/services/cos/backend.rs.html |  38 +-
 docs/rust/src/opendal/services/cos/core.rs.html    |   4 +-
 docs/rust/src/opendal/services/cos/mod.rs.html     |   2 -
 docs/rust/src/opendal/services/cos/writer.rs.html  |  84 +++-
 .../src/opendal/services/dropbox/backend.rs.html   |   2 -
 docs/rust/src/opendal/services/fs/appender.rs.html |  99 ----
 docs/rust/src/opendal/services/fs/backend.rs.html  |  46 +-
 docs/rust/src/opendal/services/fs/mod.rs.html      |   2 -
 docs/rust/src/opendal/services/ftp/backend.rs.html |   2 +-
 docs/rust/src/opendal/services/gcs/backend.rs.html |   2 -
 .../src/opendal/services/gdrive/backend.rs.html    |   2 -
 .../rust/src/opendal/services/ghac/backend.rs.html |   2 -
 .../src/opendal/services/hdfs/appender.rs.html     |  97 ----
 .../rust/src/opendal/services/hdfs/backend.rs.html |  80 +---
 docs/rust/src/opendal/services/hdfs/mod.rs.html    |   2 -
 .../rust/src/opendal/services/http/backend.rs.html |   2 -
 .../rust/src/opendal/services/ipfs/backend.rs.html |   2 -
 .../src/opendal/services/ipmfs/backend.rs.html     |   2 -
 .../rust/src/opendal/services/obs/appender.rs.html | 283 ------------
 docs/rust/src/opendal/services/obs/backend.rs.html |  38 +-
 docs/rust/src/opendal/services/obs/core.rs.html    |   6 +-
 docs/rust/src/opendal/services/obs/mod.rs.html     |   2 -
 docs/rust/src/opendal/services/obs/writer.rs.html  | 220 +++------
 .../src/opendal/services/onedrive/backend.rs.html  |   2 -
 .../rust/src/opendal/services/oss/appender.rs.html | 285 ------------
 docs/rust/src/opendal/services/oss/backend.rs.html |  38 +-
 docs/rust/src/opendal/services/oss/core.rs.html    |   4 +-
 docs/rust/src/opendal/services/oss/mod.rs.html     |   2 -
 docs/rust/src/opendal/services/oss/writer.rs.html  |  84 +++-
 docs/rust/src/opendal/services/s3/backend.rs.html  |   2 -
 .../rust/src/opendal/services/sftp/backend.rs.html |  42 +-
 docs/rust/src/opendal/services/sftp/writer.rs.html |  26 --
 .../src/opendal/services/supabase/backend.rs.html  |   2 -
 .../services/vercel_artifacts/backend.rs.html      |   2 -
 .../src/opendal/services/wasabi/backend.rs.html    |   2 -
 .../src/opendal/services/webdav/backend.rs.html    |   2 -
 .../src/opendal/services/webhdfs/backend.rs.html   |   2 -
 docs/rust/src/opendal/types/appender.rs.html       | 505 ---------------------
 docs/rust/src/opendal/types/capability.rs.html     |  80 ++--
 docs/rust/src/opendal/types/mod.rs.html            |   6 -
 .../src/opendal/types/operator/operator.rs.html    | 320 -------------
 .../types/operator/operator_futures.rs.html        | 152 +------
 docs/services/azblob/index.html                    |   6 +-
 docs/services/azdfs/index.html                     |   6 +-
 docs/services/cos/index.html                       |   6 +-
 docs/services/dashmap/index.html                   |   6 +-
 docs/services/fs/index.html                        |   6 +-
 docs/services/ftp/index.html                       |   6 +-
 docs/services/hdfs/index.html                      |   6 +-
 docs/services/ipfs/index.html                      |   6 +-
 docs/services/ipmfs/index.html                     |   6 +-
 docs/services/memory/index.html                    |   6 +-
 docs/services/oss/index.html                       |   6 +-
 docs/services/redis/index.html                     |   6 +-
 docs/services/rocksdb/index.html                   |   6 +-
 docs/services/s3/index.html                        |   6 +-
 docs/services/sftp/index.html                      |   6 +-
 docs/services/sled/index.html                      |   6 +-
 docs/services/webhdfs/index.html                   |   6 +-
 docs/vision/index.html                             |   6 +-
 download/index.html                                |   6 +-
 index.html                                         |   4 +-
 254 files changed, 1906 insertions(+), 5781 deletions(-)

diff --git a/404.html b/404.html
index 7c0c0fc1c..205158aa2 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.14a4e53d.js b/assets/js/054cd2fb.3e5e0344.js
similarity index 84%
rename from assets/js/054cd2fb.14a4e53d.js
rename to assets/js/054cd2fb.3e5e0344.js
index de1c8f10c..63258812e 100644
--- a/assets/js/054cd2fb.14a4e53d.js
+++ b/assets/js/054cd2fb.3e5e0344.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.6a7e017e.js b/assets/js/136e1c50.32f53e8f.js
similarity index 83%
rename from assets/js/136e1c50.6a7e017e.js
rename to assets/js/136e1c50.32f53e8f.js
index 96d9c5dc7..494d8a731 100644
--- a/assets/js/136e1c50.6a7e017e.js
+++ b/assets/js/136e1c50.32f53e8f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.12aabe1e.js b/assets/js/1957547a.5abff174.js
similarity index 74%
rename from assets/js/1957547a.12aabe1e.js
rename to assets/js/1957547a.5abff174.js
index e3d53607d..4aae1337f 100644
--- a/assets/js/1957547a.12aabe1e.js
+++ b/assets/js/1957547a.5abff174.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.07a43f6d.js b/assets/js/1db64337.265b35ed.js
similarity index 50%
rename from assets/js/1db64337.07a43f6d.js
rename to assets/js/1db64337.265b35ed.js
index 066b62669..9f50c762a 100644
--- a/assets/js/1db64337.07a43f6d.js
+++ b/assets/js/1db64337.265b35ed.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{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)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/209227ae.b4b413b1.js b/assets/js/209227ae.b4b413b1.js
deleted file mode 100644
index b9305df21..000000000
--- a/assets/js/209227ae.b4b413b1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6611],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/209227ae.fde3d3f7.js b/assets/js/209227ae.fde3d3f7.js
new file mode 100644
index 000000000..b596bbed8
--- /dev/null
+++ b/assets/js/209227ae.fde3d3f7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6611],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.dc155ca8.js b/assets/js/22d8fa67.e95ff6fc.js
similarity index 85%
rename from assets/js/22d8fa67.dc155ca8.js
rename to assets/js/22d8fa67.e95ff6fc.js
index 3f35546f7..4e0bdc78c 100644
--- a/assets/js/22d8fa67.dc155ca8.js
+++ b/assets/js/22d8fa67.e95ff6fc.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.b0d26f09.js b/assets/js/2cbf1097.2d356f73.js
similarity index 91%
rename from assets/js/2cbf1097.b0d26f09.js
rename to assets/js/2cbf1097.2d356f73.js
index 12821b5c8..884aed0f5 100644
--- a/assets/js/2cbf1097.b0d26f09.js
+++ b/assets/js/2cbf1097.2d356f73.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.61f3c745.js b/assets/js/434bbc94.c0beac80.js
similarity index 86%
rename from assets/js/434bbc94.61f3c745.js
rename to assets/js/434bbc94.c0beac80.js
index a35b8aee0..f392e92e9 100644
--- a/assets/js/434bbc94.61f3c745.js
+++ b/assets/js/434bbc94.c0beac80.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.85f43ad5.js b/assets/js/57a16c1d.7295589e.js
similarity index 83%
rename from assets/js/57a16c1d.85f43ad5.js
rename to assets/js/57a16c1d.7295589e.js
index 5d783c836..309fbbee0 100644
--- a/assets/js/57a16c1d.85f43ad5.js
+++ b/assets/js/57a16c1d.7295589e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.49f1b26c.js b/assets/js/5a65e608.49f1b26c.js
new file mode 100644
index 000000000..8f1d7aee8
--- /dev/null
+++ b/assets/js/5a65e608.49f1b26c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.dddd286e.js b/assets/js/5a65e608.dddd286e.js
deleted file mode 100644
index ae7968dd4..000000000
--- a/assets/js/5a65e608.dddd286e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/62a401e9.291fb6d9.js b/assets/js/62a401e9.562dcbee.js
similarity index 84%
rename from assets/js/62a401e9.291fb6d9.js
rename to assets/js/62a401e9.562dcbee.js
index 6d5ab0c4f..f554066c0 100644
--- a/assets/js/62a401e9.291fb6d9.js
+++ b/assets/js/62a401e9.562dcbee.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6089],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.8336b918.js b/assets/js/6eb7fe18.8336b918.js
deleted file mode 100644
index 4fb138a23..000000000
--- a/assets/js/6eb7fe18.8336b918.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.e5758923.js b/assets/js/6eb7fe18.e5758923.js
new file mode 100644
index 000000000..10b341447
--- /dev/null
+++ b/assets/js/6eb7fe18.e5758923.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.b417f651.js b/assets/js/8cc9519e.692769cb.js
similarity index 89%
rename from assets/js/8cc9519e.b417f651.js
rename to assets/js/8cc9519e.692769cb.js
index 7207068a9..864d29b65 100644
--- a/assets/js/8cc9519e.b417f651.js
+++ b/assets/js/8cc9519e.692769cb.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.e094a109.js b/assets/js/8f4159f2.34527bb0.js
similarity index 89%
rename from assets/js/8f4159f2.e094a109.js
rename to assets/js/8f4159f2.34527bb0.js
index 3d980911f..00bceb116 100644
--- a/assets/js/8f4159f2.e094a109.js
+++ b/assets/js/8f4159f2.34527bb0.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.91aded4f.js b/assets/js/a0405932.0c3d78cd.js
similarity index 84%
rename from assets/js/a0405932.91aded4f.js
rename to assets/js/a0405932.0c3d78cd.js
index 7aad817dd..cf6bb8614 100644
--- a/assets/js/a0405932.91aded4f.js
+++ b/assets/js/a0405932.0c3d78cd.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ab10c306.2debf377.js b/assets/js/ab10c306.1e4b8705.js
similarity index 68%
rename from assets/js/ab10c306.2debf377.js
rename to assets/js/ab10c306.1e4b8705.js
index 03a353186..6fbcebeee 100644
--- a/assets/js/ab10c306.2debf377.js
+++ b/assets/js/ab10c306.1e4b8705.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});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
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});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.51d12c7a.js b/assets/js/ae4554eb.51d12c7a.js
deleted file mode 100644
index e9493f45c..000000000
--- a/assets/js/ae4554eb.51d12c7a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.6f8629a8.js b/assets/js/ae4554eb.6f8629a8.js
new file mode 100644
index 000000000..fe4a0c481
--- /dev/null
+++ b/assets/js/ae4554eb.6f8629a8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.c39b4d1b.js b/assets/js/b56f9725.db68df01.js
similarity index 84%
rename from assets/js/b56f9725.c39b4d1b.js
rename to assets/js/b56f9725.db68df01.js
index cf3bb9ea4..77490d16c 100644
--- a/assets/js/b56f9725.c39b4d1b.js
+++ b/assets/js/b56f9725.db68df01.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.4d142543.js b/assets/js/bb5b2057.c5e47497.js
similarity index 80%
rename from assets/js/bb5b2057.4d142543.js
rename to assets/js/bb5b2057.c5e47497.js
index 9c0b11c7c..6e9e198d8 100644
--- a/assets/js/bb5b2057.4d142543.js
+++ b/assets/js/bb5b2057.c5e47497.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.76e86988.js b/assets/js/c6ab695b.4eb7938f.js
similarity index 72%
rename from assets/js/c6ab695b.76e86988.js
rename to assets/js/c6ab695b.4eb7938f.js
index 43fa0bfa1..8ba3043a7 100644
--- a/assets/js/c6ab695b.76e86988.js
+++ b/assets/js/c6ab695b.4eb7938f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.bdd8d466.js b/assets/js/cc62039a.293d6e0d.js
similarity index 89%
rename from assets/js/cc62039a.bdd8d466.js
rename to assets/js/cc62039a.293d6e0d.js
index 8805d1809..6c34e4891 100644
--- a/assets/js/cc62039a.bdd8d466.js
+++ b/assets/js/cc62039a.293d6e0d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.5e5b1a76.js b/assets/js/d5c31a96.5e5b1a76.js
new file mode 100644
index 000000000..0b9c6e04d
--- /dev/null
+++ b/assets/js/d5c31a96.5e5b1a76.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.cded60df.js b/assets/js/d5c31a96.cded60df.js
deleted file mode 100644
index 1c713a3d6..000000000
--- a/assets/js/d5c31a96.cded60df.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});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)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.981219c7.js b/assets/js/e892cec6.f8adb52d.js
similarity index 86%
rename from assets/js/e892cec6.981219c7.js
rename to assets/js/e892cec6.f8adb52d.js
index 3eea3daa9..1f2b74b82 100644
--- a/assets/js/e892cec6.981219c7.js
+++ b/assets/js/e892cec6.f8adb52d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.15af91eb.js b/assets/js/f1ca5a39.936973c9.js
similarity index 87%
rename from assets/js/f1ca5a39.15af91eb.js
rename to assets/js/f1ca5a39.936973c9.js
index 23f6e0625..64a4c9c02 100644
--- a/assets/js/f1ca5a39.15af91eb.js
+++ b/assets/js/f1ca5a39.936973c9.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.918b9b82.js b/assets/js/runtime~main.918b9b82.js
deleted file mode 100644
index 23354ebfa..000000000
--- a/assets/js/runtime~main.918b9b82.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,c,t,f,r={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={exports:{}};return r[e].call(c.exports,c,c.exports,d),c.exports}d.m=r,e=[],d.O=(a,c,t,f)=>{if(!c){var r=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],f=e[i][2];for(var b=!0,o=0;o<c.length;o++)(!1&f||r>=f)&&Object.keys(d.O).every((e=>d.O[e](c[o])))?c.splice(o--,1):(b=!1,f<r&&(r=f));if(b){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.9d9369c2.js b/assets/js/runtime~main.9d9369c2.js
new file mode 100644
index 000000000..6397e2367
--- /dev/null
+++ b/assets/js/runtime~main.9d9369c2.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,t,r,f={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var c=d[e]={exports:{}};return f[e].call(c.exports,c,c.exports,b),c.exports}b.m=f,e=[],b.O=(a,c,t,r)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],r=e[i][2];for(var d=!0,o=0;o<c.length;o++)(!1&r||f>=r)&&Object.keys(b.O).every((e=>b.O[e](c[o])))?c.splice(o--,1):(d=!1,r<f&&(f=r));if(d){e.splice(i--,1);var n=t();void 0!==n&&(a=n)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 9cb29568e..fa7f541e2 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index bddfadf1e..7f4ec0eef 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OpenDAL Internal: Data Reading | 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/how-opendal-read-data"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:la [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 47820d63e..f81ea4b71 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 36ac7040b..5681f3b7d 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | 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-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.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 a65b61076..010bcc302 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.4.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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.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 05fc39211..1cd57b013 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">2 posts 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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 50a63f98c..52b73ac96 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.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.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 19951406d..655376650 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;internal&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/internal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:tit [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/contributing/index.html b/docs/category/contributing/index.html
index 1f2e7fde1..97eada484 100644
--- a/docs/category/contributing/index.html
+++ b/docs/category/contributing/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Contributing | 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/category/contributing"><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="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/reference/index.html b/docs/category/reference/index.html
index 1e949312e..e6913d8c8 100644
--- a/docs/category/reference/index.html
+++ b/docs/category/reference/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Reference | 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/category/reference"><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" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index 2681d2990..b9c63444e 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Services | 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/category/services"><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">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/reference/generate_release_note/index.html b/docs/contributing/reference/generate_release_note/index.html
index 2e7cd5477..d08f8b4c2 100644
--- a/docs/contributing/reference/generate_release_note/index.html
+++ b/docs/contributing/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Generate Release Note | 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/contributing/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.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="ro [...]
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/reference/setup_gpg/index.html b/docs/contributing/reference/setup_gpg/index.html
index 69a91bd56..706510c26 100644
--- a/docs/contributing/reference/setup_gpg/index.html
+++ b/docs/contributing/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Setup GPG Key | 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/contributing/reference/setup_gpg"><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" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.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="ro [...]
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/release/index.html b/docs/contributing/release/index.html
index d5617c595..76eeed845 100644
--- a/docs/contributing/release/index.html
+++ b/docs/contributing/release/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Release | 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/contributing/release"><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" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -14,8 +14,8 @@
 how the release manager releases a new version in accordance with the Apache requirements.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p><code>Source Release</code> is the key point which Apache values, also, is necessary for a release. And OpenDAL will only have source release.</p><p>Please remember that publishing software [...]
 we will abandon that version and prepare for the next one.
 Our release page will only display ASF releases instead of GitHub Releases.</p><blockquote><ul><li><code>opendal_version</code>: the version for opendal, like <code>0.36.0</code>.</li><li><code>release_version</code>: the version for voting, like <code>0.36.0-rc1</code>.</li><li><code>rc_version</code>: the minor version for voting, like <code>rc1</code>.</li></ul></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-asf-release">Create an ASF Release<a href="#create- [...]
-please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><blockquote><ul><li><code>op [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><blockquote><ul><li><code>op [...]
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/verify/index.html b/docs/contributing/verify/index.html
index 776d04f2e..b57bfd054 100644
--- a/docs/contributing/verify/index.html
+++ b/docs/contributing/verify/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Verify | 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/contributing/verify"><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">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
 You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
-or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.918b9b82.js"></script>
+or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index a103f466b..96a9bdb69 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-19 13:24:54 </i>
+<i style="float:right;">Last updated 2023-08-20 08:09:36 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index 5ff9aa556..d39e29249 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-19 13:24:54 </i>
+<i style="float:right;">Last updated 2023-08-20 08:09:36 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index d1b24bf4b..9a5b5e6ba 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-08-19 13:24:54 </i>
+<i style="float:right;">Last updated 2023-08-20 08:09:36 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 335dd5fd4..6e9c59630 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/2048ee9/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L435">index.d.ts:435</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 tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2048ee9/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index c38dd1c8a..edd859efe 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/2048ee9/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L398">index.d.ts:398</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/2048ee9/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 52bb5ccb3..37d3b2bd6 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/2048ee9/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L424">index.d.ts:424</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">
@@ -57,7 +57,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 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/2048ee9/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index ec471a9bb..0b036f5eb 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/2048ee9/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L402">index.d.ts:402</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/2048ee9/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L422">index.d.ts:422</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"><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/2048ee9/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -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/2048ee9/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index dd0e46e8b..67c1c41e7 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/2048ee9/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/5afec91/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">
@@ -79,7 +79,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <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 tsd-kind-class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2048ee9/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L35">index.d.ts:35</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"><a id="append" class="tsd-anchor"></a>
@@ -104,7 +104,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>check</span><a href="#check" 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">
@@ -117,7 +117,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/2048ee9/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -136,7 +136,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -155,7 +155,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -172,7 +172,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -189,7 +189,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -207,7 +207,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -224,7 +224,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -241,7 +241,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -258,7 +258,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -277,7 +277,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 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/2048ee9/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -296,7 +296,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2048ee9/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -316,7 +316,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <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 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/2048ee9/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -336,7 +336,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <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 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/2048ee9/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/5afec91/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -356,7 +356,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <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 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/2048ee9/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -373,7 +373,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -390,7 +390,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -408,7 +408,7 @@
 <h5><span class="tsd-kind-parameter">paths</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -426,7 +426,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -446,7 +446,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -466,7 +466,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -485,7 +485,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 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/2048ee9/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -504,7 +504,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2048ee9/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -527,7 +527,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 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/2048ee9/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -544,7 +544,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <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 tsd-kind-class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2048ee9/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -563,7 +563,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><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">
@@ -582,7 +582,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <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/2048ee9/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/5afec91/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 89785e74e..b1bf2a3f6 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/2048ee9/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/5afec91/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/2048ee9/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/5afec91/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><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"><span class="tsd-kind-property">method</span><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/2048ee9/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/5afec91/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><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"><span class="tsd-kind-property">url</span><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/2048ee9/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/5afec91/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 37a411874..8cf9e6f25 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.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/overview"><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 [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.918b9b82.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.9d9369c2.js" as="script">
 <link rel="preload" href="/assets/js/main.d1ac33ca.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=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||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="ro [...]
-<script src="/assets/js/runtime~main.918b9b82.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="ro [...]
+<script src="/assets/js/runtime~main.9d9369c2.js"></script>
 <script src="/assets/js/main.d1ac33ca.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index b337fa9ae..e56e8534d 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -159,20 +159,20 @@
                                 <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
-                        </li>
-                        <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
+                        <li>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                        </li>
                 </ul>
 
             </li>
@@ -866,67 +866,67 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
 
                             </div>
-                            <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_md5" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</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.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>Content Type 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.etag" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</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.etag"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</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 c818001c7..eb062fe7f 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 f65e6d4d8..284718a39 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.71.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct opendal [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct opendal [...]
 };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/cmp/trait.Eq.js b/docs/rust/implementors/core/cmp/trait.Eq.js
index 18572af7d..5c9aba3fd 100644
--- a/docs/rust/implementors/core/cmp/trait.Eq.js
+++ b/docs/rust/implementors/core/cmp/trait.Eq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"opendal/enum.ErrorKind.html\" title=\"enum opendal::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContent [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"opendal/enum.ErrorKind.html\" title=\"enum opendal::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContent [...]
 };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/cmp/trait.PartialEq.js b/docs/rust/implementors/core/cmp/trait.PartialEq.js
index 008e43aff..f28dcc1ab 100644
--- a/docs/rust/implementors/core/cmp/trait.PartialEq.js
+++ b/docs/rust/implementors/core/cmp/trait.PartialEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a>&lt;<a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::WriteOperation\">WriteOperation</a>&gt; for <a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::WriteOperation\">WriteOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.ru [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a>&lt;<a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::WriteOperation\">WriteOperation</a>&gt; for <a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::WriteOperation\">WriteOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.ru [...]
 };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 a1fe7f207..6c748658d 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.71.1/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" href=\"opendal/enum.ErrorKind.html\" title=\"enum opendal::ErrorKind\">ErrorKind</a>&gt; for &amp;'static <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.71.1/std/primitive.str.html\">str</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/convert/trait.From.html\" title=\"trait cor [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" href=\"opendal/enum.ErrorKind.html\" title=\"enum opendal::ErrorKind\">ErrorKind</a>&gt; for &amp;'static <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.71.1/std/primitive.str.html\">str</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/convert/trait.From.html\" title=\"trait cor [...]
 };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 e376013b4..3880ec155 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.71.1/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpRename.html\" title=\"struct opendal::raw::RpRename\">RpRename</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpCreate [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/layers/struct.RetryLayer.html\" [...]
 };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 2275b6e4c..1df0fac6b 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.71.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct opendal::services::Azdfs\">AzdfsBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/oio/struct.Entry.html\" title=\"str [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct opendal::services::Azdfs\">AzdfsBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/oio/struct.Entry.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/fmt/trait.Display.js b/docs/rust/implementors/core/fmt/trait.Display.js
index 3f0c3e174..64028dcaf 100644
--- a/docs/rust/implementors/core/fmt/trait.Display.js
+++ b/docs/rust/implementors/core/fmt/trait.Display.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/raw/enum.Operation.html\" title=\"enum opendal::raw::Operation\">Operation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.AppendOperation.html\" titl [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/raw/enum.Operation.html\" title=\"enum opendal::raw::Operation\">Operation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opend [...]
 };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/future/future/trait.Future.js b/docs/rust/implementors/core/future/future/trait.Future.js
index 3cd76682a..16b72102e 100644
--- a/docs/rust/implementors/core/future/future/trait.Future.js
+++ b/docs/rust/implementors/core/future/future/trait.Future.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a class=\"struct\" href=\"opendal/operator_futures/struct.FutureWriter.html\" title=\"struct opendal::operator_futures::FutureWriter\">FutureWriter</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a>  [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a class=\"struct\" href=\"opendal/operator_futures/struct.FutureList.html\" title=\"struct opendal::operator_futures::FutureList\">FutureList</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a [...]
 };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/hash/trait.Hash.js b/docs/rust/implementors/core/hash/trait.Hash.js
index 0729c290b..615bc27cd 100644
--- a/docs/rust/implementors/core/hash/trait.Hash.js
+++ b/docs/rust/implementors/core/hash/trait.Hash.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/enum.Scheme.html\" title=\"enum opendal::Scheme\">Scheme</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.AppendOperation.html\" title=\"enum opendal::raw::oio::Appe [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/enum.Scheme.html\" title=\"enum opendal::Scheme\">Scheme</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::Write [...]
 };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.Copy.js b/docs/rust/implementors/core/marker/trait.Copy.js
index 925643f6b..7d7d038bf 100644
--- a/docs/rust/implementors/core/marker/trait.Copy.js
+++ b/docs/rust/implementors/core/marker/trait.Copy.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.AppendOperat [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"opendal/struct.Capability.html\ [...]
 };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 acffdda67..f4b55f683 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 d3b662eeb..d7f989535 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.71.1/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.71.1/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.71.1/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.71.1/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.StructuralEq.js b/docs/rust/implementors/core/marker/trait.StructuralEq.js
index 6226cc79e..7f2a8df6a 100644
--- a/docs/rust/implementors/core/marker/trait.StructuralEq.js
+++ b/docs/rust/implementors/core/marker/trait.StructuralEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/enum.Scheme.html\" title=\"enum opendal::Scheme\">Scheme</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.Rea [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/enum.Scheme.html\" title=\"enum opendal::Scheme\">Scheme</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.Rea [...]
 };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.StructuralPartialEq.js b/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
index 635d8238c..7c42fcea6 100644
--- a/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
+++ b/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesRange.html\" title=\"struct opendal::raw::BytesRange\">BytesRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">Structur [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesRange.html\" title=\"struct opendal::raw::BytesRange\">BytesRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">Structur [...]
 };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 e825181a8..bd6bc62e8 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.71.1/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.71.1/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.71.1/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.71.1/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 8d8feaf37..f0fbca9ae 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.71.1/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.71.1/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.71.1/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.71.1/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 74280cb4f..b01220eb1 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.71.1/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.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.71.1/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.71.1/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 f68261ca3..b83614dc2 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.71.1/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.71.1/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.71.1/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.71.1/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/implementors/futures_io/if_std/trait.AsyncWrite.js b/docs/rust/implementors/futures_io/if_std/trait.AsyncWrite.js
index d26032541..3ab267c20 100644
--- a/docs/rust/implementors/futures_io/if_std/trait.AsyncWrite.js
+++ b/docs/rust/implementors/futures_io/if_std/trait.AsyncWrite.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Writer.html\" title=\"struct opendal::Writer\">Writer</a>"],["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Appender.html\" title=\"struct opendal::Appender\">Appender</a>"]]
+"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Writer.html\" title=\"struct opendal::Writer\">Writer</a>"]]
 };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/opendal/raw/oio/append/api/trait.Append.js b/docs/rust/implementors/opendal/raw/oio/append/api/trait.Append.js
deleted file mode 100644
index 52a1d0def..000000000
--- a/docs/rust/implementors/opendal/raw/oio/append/api/trait.Append.js
+++ /dev/null
@@ -1,3 +0,0 @@
-(function() {var implementors = {
-"opendal":[]
-};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/tokio/io/async_write/trait.AsyncWrite.js b/docs/rust/implementors/tokio/io/async_write/trait.AsyncWrite.js
index d26032541..3ab267c20 100644
--- a/docs/rust/implementors/tokio/io/async_write/trait.AsyncWrite.js
+++ b/docs/rust/implementors/tokio/io/async_write/trait.AsyncWrite.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Writer.html\" title=\"struct opendal::Writer\">Writer</a>"],["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Appender.html\" title=\"struct opendal::Appender\">Appender</a>"]]
+"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.Writer.html\" title=\"struct opendal::Writer\">Writer</a>"]]
 };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 17e3fad5b..f71b0b3a7 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/index.html b/docs/rust/opendal/index.html
index 63181898f..1206e2f61 100644
--- a/docs/rust/opendal/index.html
+++ b/docs/rust/opendal/index.html
@@ -39,8 +39,7 @@
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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="docs/index.html" title="mod opendal::docs">docs</a></div><div class="desc docblock-short">This module holds documentation for OpenDAL.</div></li><li><div class="item-name"><a class="mod" href="layers/index.html" title="mod opendal::layers">layers</a></div><div class="desc docblock-short"><code>Layer</code> is the mechanism [...]
-manner.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingLister.html" title="struct opendal::BlockingLister">BlockingLister</a></div><div class="desc docblock-short">BlockingLister is designed to list entries at given path in a blocking
+</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="docs/index.html" title="mod opendal::docs">docs</a></div><div class="desc docblock-short">This module holds documentation for OpenDAL.</div></li><li><div class="item-name"><a class="mod" href="layers/index.html" title="mod opendal::layers">layers</a></div><div class="desc docblock-short"><code>Layer</code> is the mechanism [...]
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></div><div class="desc docblock-short">BlockingOperator is the entry for all public blocking APIs.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingReader.html" title="struct opendal::BlockingReader">BlockingReader</a></div><div class="desc docblock-short">BlockingReader is designed to read data from giv [...]
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingWriter.html" title="struct opendal::BlockingWriter">BlockingWriter</a></div><div class="desc docblock-short">BlockingWriter is designed to write data into given path in an blocking
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.Capability.html" title="struct opendal::Capability">Capability</a></div><div class="desc docblock-short">Capability is used to describe what operations are supported
diff --git a/docs/rust/opendal/layers/struct.MadsimServer.html b/docs/rust/opendal/layers/struct.MadsimServer.html
index 2f1ec26b5..3f70fc2d2 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#362-396">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#359">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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/layers/struct.MinitraceLayer.html b/docs/rust/opendal/layers/struct.MinitraceLayer.html
index 616898e1b..b48b4e4cd 100644
--- a/docs/rust/opendal/layers/struct.MinitraceLayer.html
+++ b/docs/rust/opendal/layers/struct.MinitraceLayer.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="Add minitrace for every operations."><title>MinitraceLayer 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="font" type="font/woff2" crossorigin hr [...]
+<!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="Add minitrace for every operations."><title>MinitraceLayer 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="font" type="font/woff2" crossorigin hr [...]
 <h2 id="examples"><a href="#examples">Examples</a></h2><h3 id="basic-setup"><a href="#basic-setup">Basic Setup</a></h3>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
 <span class="kw">use </span>opendal::layers::MinitraceLayer;
@@ -64,7 +64,7 @@
         .unwrap();
 minitrace::set_reporter(reporter, Config::default());</code></pre></div>
 <p>For real-world usage, please take a look at <a href="https://crates.io/crates/minitrace-datadog"><code>minitrace-datadog</code></a> or <a href="https://crates.io/crates/minitrace-jaeger"><code>minitrace-jaeger</code></a> .</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-Layer%3CA%3E-for-MinitraceLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/minitrace.rs.html#120-126">source</a><a href="#impl-Layer%3CA%3E-for-MinitraceLayer" class="anchor">§</a><h3 class="co [...]
+</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-Layer%3CA%3E-for-MinitraceLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/minitrace.rs.html#119-125">source</a><a href="#impl-Layer%3CA%3E-for-MinitraceLayer" class="anchor">§</a><h3 class="co [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/layers/struct.RetryLayer.html b/docs/rust/opendal/layers/struct.RetryLayer.html
index 51e722389..69c3276fa 100644
--- a/docs/rust/opendal/layers/struct.RetryLayer.html
+++ b/docs/rust/opendal/layers/struct.RetryLayer.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="Add retry for temporary failed operations."><title>RetryLayer 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="font" type="font/woff2" crossorigin [...]
+<!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="Add retry for temporary failed operations."><title>RetryLayer 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="font" type="font/woff2" crossorigin [...]
 <h2 id="notes"><a href="#notes">Notes</a></h2>
 <p>This layer will retry failed operations when <a href="../struct.Error.html#method.is_temporary" title="method opendal::Error::is_temporary"><code>Error::is_temporary</code></a>
 returns true. If operation still failed, this layer will set error to
@@ -41,7 +41,7 @@ their own retry interceptor logic.</p>
     .expect(<span class="string">&quot;must init&quot;</span>)
     .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
     .finish();</code></pre></div>
-</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-RetryLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#122-214">source</a><a href="#impl-RetryLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RetryLayer.html" title= [...]
+</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-RetryLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#121-213">source</a><a href="#impl-RetryLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RetryLayer.html" title= [...]
 <h5 id="examples-1"><a href="#examples-1">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
 <span class="kw">use </span>opendal::layers::RetryLayer;
@@ -52,7 +52,7 @@ their own retry interceptor logic.</p>
 <span class="kw">let _ </span>= Operator::new(services::Memory::default())
     .expect(<span class="string">&quot;must init&quot;</span>)
     .layer(RetryLayer::new());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_notify" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#167-172">source</a><h4 class="code-header">pub fn <a href="#method.with_notify" class="fn">with_notify</a>&lt;I: <a class="trait" href="trait.RetryInterceptor.html" title="trait opendal::layers::RetryInterceptor">RetryInterceptor</a>&gt;(self, notify: I) -&gt; <a class="struct" href="struct.RetryLayer [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_notify" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#166-171">source</a><h4 class="code-header">pub fn <a href="#method.with_notify" class="fn">with_notify</a>&lt;I: <a class="trait" href="trait.RetryInterceptor.html" title="trait opendal::layers::RetryInterceptor">RetryInterceptor</a>&gt;(self, notify: I) -&gt; <a class="struct" href="struct.RetryLayer [...]
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::time::Duration;
 
@@ -76,18 +76,18 @@ their own retry interceptor logic.</p>
     .expect(<span class="string">&quot;must init&quot;</span>)
     .layer(RetryLayer::new().with_notify(MyRetryInterceptor))
     .finish();</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_jitter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#178-181">source</a><h4 class="code-header">pub fn <a href="#method.with_jitter" class="fn">with_jitter</a>(self) -&gt; Self</h4></section></summary><div class="docblock"><p>Set jitter of current backoff.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_jitter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#177-180">source</a><h4 class="code-header">pub fn <a href="#method.with_jitter" class="fn">with_jitter</a>(self) -&gt; Self</h4></section></summary><div class="docblock"><p>Set jitter of current backoff.</p>
 <p>If jitter is enabled, ExponentialBackoff will add a random jitter in `[0, min_delay)
 to current delay.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_factor" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#188-191">source</a><h4 class="code-header">pub fn <a href="#method.with_factor" class="fn">with_factor</a>(self, factor: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f32.html">f32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set factor of current backoff.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_factor" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#187-190">source</a><h4 class="code-header">pub fn <a href="#method.with_factor" class="fn">with_factor</a>(self, factor: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f32.html">f32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set factor of current backoff.</p>
 <h5 id="panics"><a href="#panics">Panics</a></h5>
 <p>This function will panic if input factor smaller than <code>1.0</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_min_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#194-197">source</a><h4 class="code-header">pub fn <a href="#method.with_min_delay" class="fn">with_min_delay</a>(self, min_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></sum [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#202-205">source</a><h4 class="code-header">pub fn <a href="#method.with_max_delay" class="fn">with_max_delay</a>(self, max_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_min_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#193-196">source</a><h4 class="code-header">pub fn <a href="#method.with_min_delay" class="fn">with_min_delay</a>(self, min_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_delay" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#201-204">source</a><h4 class="code-header">pub fn <a href="#method.with_max_delay" class="fn">with_max_delay</a>(self, max_delay: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></sum [...]
 <p>Delay will not increasing if current delay is larger than max_delay.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_times" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#210-213">source</a><h4 class="code-header">pub fn <a href="#method.with_max_times" class="fn">with_max_times</a>(self, max_times: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set max_time [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_max_times" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#209-212">source</a><h4 class="code-header">pub fn <a href="#method.with_max_times" class="fn">with_max_times</a>(self, max_times: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set max_time [...]
 <p>Backoff will return <code>None</code> if max times is reaching.</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-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#104-111">source</a><a href="#impl-Clone-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 [...]
+</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-RetryLayer%3CI%3E" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#103-110">source</a><a href="#impl-Clone-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 [...]
     I: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Send-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> [...]
     I: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Sync-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Sync-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I&gt; <a class="trait" href="https://doc.rust-lang.or [...]
     I: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Unpin-for-RetryLayer%3CI%3E" class="impl"><a href="#impl-Unpin-for-RetryLayer%3CI%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I&gt; <a class="trait" href="https://doc.rust-lang. [...]
diff --git a/docs/rust/opendal/layers/struct.TimeoutLayer.html b/docs/rust/opendal/layers/struct.TimeoutLayer.html
index ada67e51c..cc51b03ac 100644
--- a/docs/rust/opendal/layers/struct.TimeoutLayer.html
+++ b/docs/rust/opendal/layers/struct.TimeoutLayer.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="Add timeout for every operations."><title>TimeoutLayer 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="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="Add timeout for every operations."><title>TimeoutLayer 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="font" type="font/woff2" crossorigin href=" [...]
 <h2 id="notes"><a href="#notes">Notes</a></h2>
 <ul>
-<li>For IO operations like <code>read</code>, <code>write</code>, and <code>append</code>, we will set a timeout
+<li>For IO operations like <code>read</code>, <code>write</code>, we will set a timeout
 for each single IO operation.</li>
 <li>For other operations like <code>stat</code>, and <code>delete</code>, the timeout is for the whole
 operation.</li>
@@ -36,19 +36,19 @@ instead of kept waiting for it.</p>
     .expect(<span class="string">&quot;must init&quot;</span>)
     .layer(TimeoutLayer::default())
     .finish();</code></pre></div>
-</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-TimeoutLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#89-120">source</a><a href="#impl-TimeoutLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.TimeoutLayer.html" [...]
+</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-TimeoutLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#88-119">source</a><a href="#impl-TimeoutLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.TimeoutLayer.html" [...]
 <ul>
 <li>timeout: 60 seconds</li>
 <li>speed: 1024 bytes per second, aka, 1KiB/s.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_timeout" class="method"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#99-102">source</a><h4 class="code-header">pub fn <a href="#method.with_timeout" class="fn">with_timeout</a>(self, timeout: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></summary><d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_speed" class="method"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#114-119">source</a><h4 class="code-header">pub fn <a href="#method.with_speed" class="fn">with_speed</a>(self, speed: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set speed for TimeoutLayer wit [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_timeout" class="method"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#98-101">source</a><h4 class="code-header">pub fn <a href="#method.with_timeout" class="fn">with_timeout</a>(self, timeout: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; Self</h4></section></summary><d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_speed" class="method"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#113-118">source</a><h4 class="code-header">pub fn <a href="#method.with_speed" class="fn">with_speed</a>(self, speed: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set speed for TimeoutLayer wit [...]
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>The speed should be the lower bound of the IO speed. Set this value too
 large could result in all write operations failing.</p>
 <h5 id="panics"><a href="#panics">Panics</a></h5>
 <p>This function will panic if speed is 0.</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-TimeoutLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#74">source</a><a href="#impl-Clone-for-TimeoutLayer" class="anchor">§</a><h3 class="code- [...]
+</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-TimeoutLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/timeout.rs.html#73">source</a><a href="#impl-Clone-for-TimeoutLayer" class="anchor">§</a><h3 class="code- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/layers/trait.RetryInterceptor.html b/docs/rust/opendal/layers/trait.RetryInterceptor.html
index d514e98d9..c3e3d4164 100644
--- a/docs/rust/opendal/layers/trait.RetryInterceptor.html
+++ b/docs/rust/opendal/layers/trait.RetryInterceptor.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="RetryInterceptor is used to intercept while retry happened."><title>RetryInterceptor 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="font" type=" [...]
+<!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="RetryInterceptor is used to intercept while retry happened."><title>RetryInterceptor 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="font" type=" [...]
     // Required method
     fn <a href="#tymethod.intercept" class="fn">intercept</a>(&amp;self, err: &amp;<a class="struct" href="../struct.Error.html" title="struct opendal::Error">Error</a>, dur: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>, ctx: &amp;[(&amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std [...]
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>RetryInterceptor is used to intercept while retry happened.</p>
-</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.intercept" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#246">source</a><h4 class="code-header">fn <a href="#tymethod.intercept" class="fn">intercept</a>(&amp;self, err: &amp;<a class="struct" href="../struct.Error [...]
+</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.intercept" class="method"><a class="srclink rightside" href="../../src/opendal/layers/retry.rs.html#245">source</a><h4 class="code-header">fn <a href="#tymethod.intercept" class="fn">intercept</a>(&amp;self, err: &amp;<a class="struct" href="../struct.Error [...]
 <h5 id="timing"><a href="#timing">Timing</a></h5>
 <p>just before the retry sleep.</p>
 <h5 id="inputs"><a href="#inputs">Inputs</a></h5>
diff --git a/docs/rust/opendal/operator_futures/index.html b/docs/rust/opendal/operator_futures/index.html
index 43f8bedad..fd25c4daa 100644
--- a/docs/rust/opendal/operator_futures/index.html
+++ b/docs/rust/opendal/operator_futures/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="Futures provides the futures generated by `Operator`"><title>opendal::operator_futures - 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" cross [...]
+<!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="Futures provides the futures generated by `Operator`"><title>opendal::operator_futures - 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" cross [...]
 <p>By using futures, users can add more options 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.FutureAppend.html" title="struct opendal::operator_futures::FutureAppend">FutureAppend</a></div><div class="desc docblock-short">Future that generated by <a href="../struct.Operator.html#method.append_with" title="method opendal::Operator::append_with"><code>Operator::append_with</code></a>.</div></li><li><div cl [...]
\ 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.FutureDelete.html" title="struct opendal::operator_futures::FutureDelete">FutureDelete</a></div><div class="desc docblock-short">Future that generated by <a href="../struct.Operator.html#method.delete_with" title="method opendal::Operator::delete_with"><code>Operator::delete_with</code></a>.</div></li><li><div cl [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/sidebar-items.js b/docs/rust/opendal/operator_futures/sidebar-items.js
index 115d45abe..c7373c573 100644
--- a/docs/rust/opendal/operator_futures/sidebar-items.js
+++ b/docs/rust/opendal/operator_futures/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"struct":["FutureAppend","FutureAppender","FutureDelete","FutureList","FutureLister","FuturePresignRead","FuturePresignWrite","FutureRead","FutureReader","FutureStat","FutureWrite","FutureWriter"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"struct":["FutureDelete","FutureList","FutureLister","FuturePresignRead","FuturePresignWrite","FutureRead","FutureReader","FutureStat","FutureWrite","FutureWriter"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/struct.FutureAppend.html b/docs/rust/opendal/operator_futures/struct.FutureAppend.html
deleted file mode 100644
index 0145da2f4..000000000
--- a/docs/rust/opendal/operator_futures/struct.FutureAppend.html
+++ /dev/null
@@ -1,145 +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="Future that generated by `Operator::append_with`."><title>FutureAppend in opendal::operator_futures - 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 [...]
-<p>Users can add more options by public functions provided by this struct.</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-FutureAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#156-180">source</a><a href="#impl-FutureAppend" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#166-171">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#174-179">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FutureAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#182-188">source</a><a href="#impl-Future-for-FutureAppend" class="ancho [...]
-the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureAppend" class="impl"><a href="#impl-RefUnwindSafe [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppend" class="impl"><a href="#impl-FutureExt-for-FutureAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.map" class="method trait-impl"><a href="#method.map" class="anchor">§</a><h4 [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>) -&gt; U,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Map this future’s output to a different type, returning a new future of
-the resulting type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_into" class="method trait-impl"><a href="#method.map_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_into</a>&lt;U&gt;(self) -&gt; MapInto&lt;Self, U&gt;<span class="where fmt-newline">where
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Map this future’s output to a different type, returning a new future of
-the resulting type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.then" class="method trait-impl"><a href="#method.then" class="anchor">§</a><h4 class="code-header">fn <a class="fn">then</a>&lt;Fut, F&gt;(self, f: F) -&gt; Then&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>) -&gt; Fut,
-    Fut: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Chain on a computation for when a future finished, passing the result of
-the future to the provided closure <code>f</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.left_future" class="method trait-impl"><a href="#method.left_future" class="anchor">§</a><h4 class="code-header">fn <a class="fn">left_future</a>&lt;B&gt;(self) -&gt; Either&lt;Self, B&gt;<span class="where fmt-newline">where
-    B: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wrap this future in an <code>Either</code> future, making it the left-hand variant
-of that <code>Either</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.right_future" class="method trait-impl"><a href="#method.right_future" class="anchor">§</a><h4 class="code-header">fn <a class="fn">right_future</a>&lt;A&gt;(self) -&gt; Either&lt;A, Self&gt;<span class="where fmt-newline">where
-    A: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wrap this future in an <code>Either</code> future, making it the right-hand variant
-of that <code>Either</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_stream" class="method trait-impl"><a href="#method.into_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_stream</a>(self) -&gt; IntoStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Convert this future into a single element stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flatten" class="method trait-impl"><a href="#method.flatten" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten</a>(self) -&gt [...]
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the output of this
-future is itself another future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flatten_stream" class="method trait-impl"><a href="#method.flatten_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten_stream</a>(self) -&gt; FlattenStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: Stream,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is a stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.fuse" class="method trait-impl"><a href="#method.fuse" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fuse</a>(self) -&gt; Fuse&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Fuse a future such that <code>poll</code> will never again be called once it has
-completed. This method can be used to turn any <code>Future</code> into a
-<code>FusedFuture</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect" class="method trait-impl"><a href="#method.inspect" class="anchor">§</a><h4 class="code-header">fn <a class="fn">inspect</a>&lt;F&gt;(self, f: F) -&gt; Inspect&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the output of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.catch_unwind" class="method trait-impl"><a href="#method.catch_unwind" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h4></section></summary><div class='docblock'>Catches unwinding panics while polling the future. <a>Read more</a></div></details><details class="toggle method-toggle" open><s [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section></summary><div class='docblock'>Create a cloneable handle to this future where all handles will resolve
-to the same result. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.remote_handle" class="method trait-impl"><a href="#method.remote_handle" class="anchor">§</a><h4 class="code-header">fn <a class="fn">remote_handle</a>(self) -&gt; (Remote&lt;Self&gt;, RemoteHandle&lt;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Fu [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turn this future into a future that yields <code>()</code> on completion and sends
-its output to another future on a separate task. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.boxed" class="method trait-impl"><a href="#method.boxed" class="anchor">§</a><h4 class="code-header">fn <a class="fn">boxed</a>&lt;'a&gt;(
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a,</span></h4></section></summary><div class='docblock'>Wrap the future in a Box, pinning it. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.boxed_local" class="me [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'a,</span></h4></section></summary><div class='docblock'>Wrap the future in a Box, pinning it. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.unit_error" class="method trait-impl"><a href="#method.unit_error" class="anchor">§</a><h4 class="code-header">fn <a class="fn">unit_error</a>(self) -& [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turns a <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future&lt;Output = T&gt;</code></a> into a
-<a href="futures_core::future::TryFuture"><code>TryFuture&lt;Ok = T, Error = ()</code>&gt;</a>.</div></details><details class="toggle method-toggle" open><summary><section id="method.never_error" class="method trait-impl"><a href="#method.never_error" class="anchor">§</a><h4 class="code-header">fn <a class="fn">never_error</a>(self) -&gt; NeverError&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turns a <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future&lt;Output = T&gt;</code></a> into a
-<a href="futures_core::future::TryFuture"><code>TryFuture&lt;Ok = T, Error = Never</code>&gt;</a>.</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_unpin" class="method trait-impl"><a href="#method.poll_unpin" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_unpin</a>(&amp;mut self, cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">C [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience for calling <code>Future::poll</code> on <code>Unpin</code> future types.</div></details><details class="toggle method-toggle" open><summary><section id="method.now_or_never" class="method trait-impl"><a href="#method.now_or_never" class="anchor">§</a><h4 class="code-header">fn <a cl [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Evaluates and consumes the future, returning the resulting output if
-the future is ready after the first call to <code>Future::poll</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppend-1" class="impl"><a href="#impl-FutureExt-for-FutureAppend-1" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.in_span" class="method trait-impl"><a href="#method.in_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_span</a>(self, span: Span) -&gt; InSpan&lt;Self&gt;</h4></section></summary><div cla [...]
-times, it will create multiple <em>short</em> spans. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppend-2" class="impl"><a href="#impl-FutureExt-for-FutureAppend-2" 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 [...]
-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-FutureExt-for-FutureAppend-4" class="impl"><a href="#impl-FutureExt-for-FutureAppend-4" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; FutureExt for F<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.poll-1" class="method trait-impl"><a href="#method.poll-1" class="anchor">§< [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience for calling <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll" title="method core::future::future::Future::poll"><code>Future::poll()</code></a> on <code>!</code><a href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title=" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,</span></h4></section></summary><div class='docblock'>Returns the result of <code>self</code> or <code>other</code> future, prefe [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,</span></h4></section></summary><div class='docblock'>Returns the result of <code>self</code> or <code>other</code> future, with  [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h4></section></summary><div class='docblock'>Catches panics while polling the future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><se [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a,</span></h4></section></summary><div class='docblock'>Boxes the future and changes its type to <code>dyn Future + Send + 'a</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><s [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'a,</span></h4></section></summary><div class='docblock'>Boxes the future and changes its type to <code>dyn Future + 'a</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-FutureAppend" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0. [...]
-<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-InstrumentAwait-for-FutureAppend" class="impl"><a href="#impl-InstrumentAwait-for-FutureAppend" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; InstrumentAwait for F<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument_await" class="method trait-impl"><a href="#method.instrument_await" class="anchor">§</a><h4 class="code-header">fn <a class="fn">instrument_await</a>(self, span: impl <a class="trait" href="https:// [...]
-    self,
-    span: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Span&gt;
-) -&gt; Instrumented&lt;Self, true&gt;</h4></section></summary><div class='docblock'>Instrument the future with a verbose span, which is optionally enabled based on the registry
-configuration.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-FutureAppend" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-FutureAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert:: [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoFuture-for-FutureAppend" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/future/into_future.rs.html#133">source</a><a href="#impl-IntoFuture-for-FutureAppend" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/into_future/trait.IntoFuture.html" title="trait core::futu [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output-1" class="associatedtype trait-impl"><a href="#associatedtype.Output-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/future/into_future/trait.IntoFuture.html [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, E&gt;&gt; + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="im [...]
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut F</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;&lt;F as <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt [...]
-    Fut: TryFuture + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.flatten_sink" class="method trait-impl"><a href="#method.flatten_sink" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten_sink</a>&lt;Item&gt;(self) -&gt; FlattenSink&lt;Self, Self::Ok&gt;<span  [...]
-    Self::Ok: Sink&lt;Item, Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flattens the execution of this future when the successful result of this
-future is a [<code>Sink</code>]. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_ok" class="method trait-impl"><a href="#method.map_ok" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_ok</a>&lt;T, F&gt;(self, f: F) -&gt; MapOk&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; T,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s success value to a different value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_ok_or_else" class="method trait-impl"><a href="#method.map_ok_or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; T,
-    E: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; T,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s success value to a different value, and permits for error handling resulting in the same type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_err" class="method trait-impl"><a href="#method.map_err" class="anchor">§</a [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; E,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s error value to a different value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.err_into" class="method trait-impl"><a href="#method.err_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">err_into</a>&lt;E [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::Error: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;E&gt;,</span></h4></section></summary><div class='docblock'>Maps this future’s <a href="TryFuture::Error"><code>Error</code></a> to a new error type
-using the <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into"><code>Into</code></a> trait. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.ok_into" class="method trait-impl"><a href="#method.ok_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">ok_into</a>&lt;U&gt;(self) -&gt; OkInto&lt;Self, U&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::Ok: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt;,</span></h4></section></summary><div class='docblock'>Maps this future’s <a href="TryFuture::Ok"><code>Ok</code></a> to a new type
-using the <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into"><code>Into</code></a> trait.</div></details><details class="toggle method-toggle" open><summary><section id="method.and_then" class="method trait-impl"><a href="#method.and_then" class="anchor">§</a><h4 class="code-header">fn <a class="fn">and_then</a>&lt;Fut, F&gt;(self, f: F) -&gt; AndThen&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; Fut,
-    Fut: TryFuture&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Executes another future after this one resolves successfully. The
-success value is passed to a closure to create this subsequent future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.or_else" class="method trait-impl"><a href="#method.or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">or_else</a>&lt;Fut, F&gt;(self, f: F) -&gt; OrElse&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; Fut,
-    Fut: TryFuture&lt;Ok = Self::Ok&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Executes another future if this one resolves to an error. The
-error value is passed to a closure to create this subsequent future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect_ok" class="method trait-impl"><a href="#method.inspect_ok" class="anchor">§</a><h4 class="code-header">fn <a class="fn">inspect_ok</a>&lt;F&gt;(self, f: F) -&gt; InspectOk&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::Ok),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the success value of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect_err" class="method trait-impl"><a href="#method.inspect_err" class="anchor">§</a><h4 class="code-header">fn <a class [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::Error),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the error value of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_flatten" class="method trait-impl"><a href="#method.try_flatten" class="anchor">§</a><h4 class="code-header">fn <a class=" [...]
-    Self::Ok: TryFuture&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is another future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_flatten_stream" class="method trait-impl"><a href="#method.try_flatten_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_flatten_stream</a>(self) -&gt; TryFlattenStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self::Ok: TryStream&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is a stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.unwrap_or_else" class="method trait-impl"><a href="#method.unwrap_or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">unwrap_or_else</a>&lt;F&gt;(self, f: F) -&gt; UnwrapOrElse&lt;Self, F&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; Self::Ok,</span></h4></section></summary><div class='docblock'>Unwraps this future’s output, producing a future with this future’s
-<a href="TryFuture::Ok"><code>Ok</code></a> type as its
-<a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="associated type core::future::future::Future::Output"><code>Output</code></a> type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_future-1" class="method trait-impl"><a href="#method.into_future-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_future</a>(self) -&gt; IntoFuture&lt;Self&gt;<span class [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wraps a [<code>TryFuture</code>] into a type that implements
-<a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future</code></a>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_poll_unpin" class="method trait-impl"><a href="#method.try_poll_unpin" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_poll_unpin</a>(
-    &amp;mut self,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::Ok, Self::Error&gt;&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience method for calling [<code>TryFuture::try_poll</code>] on <a href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin"><code>Unpin</code></a>
-future types.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-FutureAppend" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#748">source</a><a href="#impl-TryInto%3CU%3E-for-FutureAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html" title="trait core::c [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-FutureAppend" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">so [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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-FutureExt-for-FutureAppend-3" class="impl"><a href="#impl-FutureExt-for-FutureAppend-3" class="anchor">§</a><h3 class="code-header">impl&lt [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/struct.FutureAppender.html b/docs/rust/opendal/operator_futures/struct.FutureAppender.html
deleted file mode 100644
index 5b41ccea9..000000000
--- a/docs/rust/opendal/operator_futures/struct.FutureAppender.html
+++ /dev/null
@@ -1,145 +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="Future that generated by [`Operation.appender_with`]."><title>FutureAppender in opendal::operator_futures - 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 [...]
-<p>Users can add more options by public functions provided by this struct.</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-FutureAppender" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#195-217">source</a><a href="#impl-FutureAppender" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="str [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#203-208">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#211-216">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docb [...]
-</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-Future-for-FutureAppender" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#219-225">source</a><a href="#impl-Future-for-FutureAppender" class="a [...]
-the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureAppender" class="impl"><a href="#impl-RefUnwindSa [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppender" class="impl"><a href="#impl-FutureExt-for-FutureAppender" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.map" class="method trait-impl"><a href="#method.map" class="anchor">§</a><h4 [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>) -&gt; U,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Map this future’s output to a different type, returning a new future of
-the resulting type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_into" class="method trait-impl"><a href="#method.map_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_into</a>&lt;U&gt;(self) -&gt; MapInto&lt;Self, U&gt;<span class="where fmt-newline">where
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Map this future’s output to a different type, returning a new future of
-the resulting type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.then" class="method trait-impl"><a href="#method.then" class="anchor">§</a><h4 class="code-header">fn <a class="fn">then</a>&lt;Fut, F&gt;(self, f: F) -&gt; Then&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>) -&gt; Fut,
-    Fut: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Chain on a computation for when a future finished, passing the result of
-the future to the provided closure <code>f</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.left_future" class="method trait-impl"><a href="#method.left_future" class="anchor">§</a><h4 class="code-header">fn <a class="fn">left_future</a>&lt;B&gt;(self) -&gt; Either&lt;Self, B&gt;<span class="where fmt-newline">where
-    B: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wrap this future in an <code>Either</code> future, making it the left-hand variant
-of that <code>Either</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.right_future" class="method trait-impl"><a href="#method.right_future" class="anchor">§</a><h4 class="code-header">fn <a class="fn">right_future</a>&lt;A&gt;(self) -&gt; Either&lt;A, Self&gt;<span class="where fmt-newline">where
-    A: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wrap this future in an <code>Either</code> future, making it the right-hand variant
-of that <code>Either</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_stream" class="method trait-impl"><a href="#method.into_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_stream</a>(self) -&gt; IntoStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Convert this future into a single element stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flatten" class="method trait-impl"><a href="#method.flatten" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten</a>(self) -&gt [...]
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the output of this
-future is itself another future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flatten_stream" class="method trait-impl"><a href="#method.flatten_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten_stream</a>(self) -&gt; FlattenStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: Stream,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is a stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.fuse" class="method trait-impl"><a href="#method.fuse" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fuse</a>(self) -&gt; Fuse&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Fuse a future such that <code>poll</code> will never again be called once it has
-completed. This method can be used to turn any <code>Future</code> into a
-<code>FusedFuture</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect" class="method trait-impl"><a href="#method.inspect" class="anchor">§</a><h4 class="code-header">fn <a class="fn">inspect</a>&lt;F&gt;(self, f: F) -&gt; Inspect&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the output of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.catch_unwind" class="method trait-impl"><a href="#method.catch_unwind" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h4></section></summary><div class='docblock'>Catches unwinding panics while polling the future. <a>Read more</a></div></details><details class="toggle method-toggle" open><s [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section></summary><div class='docblock'>Create a cloneable handle to this future where all handles will resolve
-to the same result. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.remote_handle" class="method trait-impl"><a href="#method.remote_handle" class="anchor">§</a><h4 class="code-header">fn <a class="fn">remote_handle</a>(self) -&gt; (Remote&lt;Self&gt;, RemoteHandle&lt;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Fu [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turn this future into a future that yields <code>()</code> on completion and sends
-its output to another future on a separate task. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.boxed" class="method trait-impl"><a href="#method.boxed" class="anchor">§</a><h4 class="code-header">fn <a class="fn">boxed</a>&lt;'a&gt;(
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a,</span></h4></section></summary><div class='docblock'>Wrap the future in a Box, pinning it. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.boxed_local" class="me [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'a,</span></h4></section></summary><div class='docblock'>Wrap the future in a Box, pinning it. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.unit_error" class="method trait-impl"><a href="#method.unit_error" class="anchor">§</a><h4 class="code-header">fn <a class="fn">unit_error</a>(self) -& [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turns a <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future&lt;Output = T&gt;</code></a> into a
-<a href="futures_core::future::TryFuture"><code>TryFuture&lt;Ok = T, Error = ()</code>&gt;</a>.</div></details><details class="toggle method-toggle" open><summary><section id="method.never_error" class="method trait-impl"><a href="#method.never_error" class="anchor">§</a><h4 class="code-header">fn <a class="fn">never_error</a>(self) -&gt; NeverError&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Turns a <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future&lt;Output = T&gt;</code></a> into a
-<a href="futures_core::future::TryFuture"><code>TryFuture&lt;Ok = T, Error = Never</code>&gt;</a>.</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_unpin" class="method trait-impl"><a href="#method.poll_unpin" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_unpin</a>(&amp;mut self, cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">C [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience for calling <code>Future::poll</code> on <code>Unpin</code> future types.</div></details><details class="toggle method-toggle" open><summary><section id="method.now_or_never" class="method trait-impl"><a href="#method.now_or_never" class="anchor">§</a><h4 class="code-header">fn <a cl [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Evaluates and consumes the future, returning the resulting output if
-the future is ready after the first call to <code>Future::poll</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppender-1" class="impl"><a href="#impl-FutureExt-for-FutureAppender-1" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.in_span" class="method trait-impl"><a href="#method.in_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_span</a>(self, span: Span) -&gt; InSpan&lt;Self&gt;</h4></section></summary><div cla [...]
-times, it will create multiple <em>short</em> spans. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-FutureAppender-2" class="impl"><a href="#impl-FutureExt-for-FutureAppender-2" 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- [...]
-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-FutureExt-for-FutureAppender-4" class="impl"><a href="#impl-FutureExt-for-FutureAppender-4" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; FutureExt for F<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.poll-1" class="method trait-impl"><a href="#method.poll-1" class="anchor">§< [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience for calling <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll" title="method core::future::future::Future::poll"><code>Future::poll()</code></a> on <code>!</code><a href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title=" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,</span></h4></section></summary><div class='docblock'>Returns the result of <code>self</code> or <code>other</code> future, prefe [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;,</span></h4></section></summary><div class='docblock'>Returns the result of <code>self</code> or <code>other</code> future, with  [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h4></section></summary><div class='docblock'>Catches panics while polling the future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><se [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a,</span></h4></section></summary><div class='docblock'>Boxes the future and changes its type to <code>dyn Future + Send + 'a</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><s [...]
-    self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + 'a,</span></h4></section></summary><div class='docblock'>Boxes the future and changes its type to <code>dyn Future + 'a</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-FutureAppender" class="impl"><a class="srclink rightside" href="https://docs.rs/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-InstrumentAwait-for-FutureAppender" class="impl"><a href="#impl-InstrumentAwait-for-FutureAppender" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; InstrumentAwait for F<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument_await" class="method trait-impl"><a href="#method.instrument_await" class="anchor">§</a><h4 class="code-header">fn <a class="fn">instrument_await</a>(self, span: impl <a class="trait" href="https:// [...]
-    self,
-    span: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Span&gt;
-) -&gt; Instrumented&lt;Self, true&gt;</h4></section></summary><div class='docblock'>Instrument the future with a verbose span, which is optionally enabled based on the registry
-configuration.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-FutureAppender" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-FutureAppender" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::conve [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoFuture-for-FutureAppender" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/future/into_future.rs.html#133">source</a><a href="#impl-IntoFuture-for-FutureAppender" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/into_future/trait.IntoFuture.html" title="trait core:: [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output-1" class="associatedtype trait-impl"><a href="#associatedtype.Output-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/future/into_future/trait.IntoFuture.html [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, E&gt;&gt; + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="im [...]
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut F</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;&lt;F as <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt [...]
-    Fut: TryFuture + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.flatten_sink" class="method trait-impl"><a href="#method.flatten_sink" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flatten_sink</a>&lt;Item&gt;(self) -&gt; FlattenSink&lt;Self, Self::Ok&gt;<span  [...]
-    Self::Ok: Sink&lt;Item, Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flattens the execution of this future when the successful result of this
-future is a [<code>Sink</code>]. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_ok" class="method trait-impl"><a href="#method.map_ok" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_ok</a>&lt;T, F&gt;(self, f: F) -&gt; MapOk&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; T,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s success value to a different value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_ok_or_else" class="method trait-impl"><a href="#method.map_ok_or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; T,
-    E: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; T,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s success value to a different value, and permits for error handling resulting in the same type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_err" class="method trait-impl"><a href="#method.map_err" class="anchor">§</a [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; E,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Maps this future’s error value to a different value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.err_into" class="method trait-impl"><a href="#method.err_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">err_into</a>&lt;E [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::Error: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;E&gt;,</span></h4></section></summary><div class='docblock'>Maps this future’s <a href="TryFuture::Error"><code>Error</code></a> to a new error type
-using the <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into"><code>Into</code></a> trait. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.ok_into" class="method trait-impl"><a href="#method.ok_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">ok_into</a>&lt;U&gt;(self) -&gt; OkInto&lt;Self, U&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    Self::Ok: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt;,</span></h4></section></summary><div class='docblock'>Maps this future’s <a href="TryFuture::Ok"><code>Ok</code></a> to a new type
-using the <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into"><code>Into</code></a> trait.</div></details><details class="toggle method-toggle" open><summary><section id="method.and_then" class="method trait-impl"><a href="#method.and_then" class="anchor">§</a><h4 class="code-header">fn <a class="fn">and_then</a>&lt;Fut, F&gt;(self, f: F) -&gt; AndThen&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Ok) -&gt; Fut,
-    Fut: TryFuture&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Executes another future after this one resolves successfully. The
-success value is passed to a closure to create this subsequent future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.or_else" class="method trait-impl"><a href="#method.or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">or_else</a>&lt;Fut, F&gt;(self, f: F) -&gt; OrElse&lt;Self, Fut, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; Fut,
-    Fut: TryFuture&lt;Ok = Self::Ok&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Executes another future if this one resolves to an error. The
-error value is passed to a closure to create this subsequent future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect_ok" class="method trait-impl"><a href="#method.inspect_ok" class="anchor">§</a><h4 class="code-header">fn <a class="fn">inspect_ok</a>&lt;F&gt;(self, f: F) -&gt; InspectOk&lt;Self, F&gt;<span class="where fmt-newline">where
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::Ok),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the success value of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.inspect_err" class="method trait-impl"><a href="#method.inspect_err" class="anchor">§</a><h4 class="code-header">fn <a class [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&amp;Self::Error),
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Do something with the error value of a future before passing it on. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_flatten" class="method trait-impl"><a href="#method.try_flatten" class="anchor">§</a><h4 class="code-header">fn <a class=" [...]
-    Self::Ok: TryFuture&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is another future. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_flatten_stream" class="method trait-impl"><a href="#method.try_flatten_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_flatten_stream</a>(self) -&gt; TryFlattenStream&lt;Self&gt;<span class="where fmt-newline">where
-    Self::Ok: TryStream&lt;Error = Self::Error&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Flatten the execution of this future when the successful result of this
-future is a stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.unwrap_or_else" class="method trait-impl"><a href="#method.unwrap_or_else" class="anchor">§</a><h4 class="code-header">fn <a class="fn">unwrap_or_else</a>&lt;F&gt;(self, f: F) -&gt; UnwrapOrElse&lt;Self, F&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::Error) -&gt; Self::Ok,</span></h4></section></summary><div class='docblock'>Unwraps this future’s output, producing a future with this future’s
-<a href="TryFuture::Ok"><code>Ok</code></a> type as its
-<a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#associatedtype.Output" title="associated type core::future::future::Future::Output"><code>Output</code></a> type. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_future-1" class="method trait-impl"><a href="#method.into_future-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_future</a>(self) -&gt; IntoFuture&lt;Self&gt;<span class [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Wraps a [<code>TryFuture</code>] into a type that implements
-<a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future"><code>Future</code></a>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_poll_unpin" class="method trait-impl"><a href="#method.try_poll_unpin" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_poll_unpin</a>(
-    &amp;mut self,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self::Ok, Self::Error&gt;&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>A convenience method for calling [<code>TryFuture::try_poll</code>] on <a href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin"><code>Unpin</code></a>
-future types.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-FutureAppender" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#748">source</a><a href="#impl-TryInto%3CU%3E-for-FutureAppender" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html" title="trait cor [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-FutureAppender" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334"> [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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-FutureExt-for-FutureAppender-3" class="impl"><a href="#impl-FutureExt-for-FutureAppender-3" class="anchor">§</a><h3 class="code-header">imp [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/struct.FutureDelete.html b/docs/rust/opendal/operator_futures/struct.FutureDelete.html
index 09ba69fd4..17e8a9554 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureDelete.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureDelete.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="Future that generated by `Operator::delete_with`."><title>FutureDelete in opendal::operator_futures - 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="Future that generated by `Operator::delete_with`."><title>FutureDelete in opendal::operator_futures - 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 [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#553-559">source</a><a href="#impl-FutureDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
-</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-Future-for-FutureDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#561-567">source</a><a href="#impl-Future-for-FutureDelete" class="ancho [...]
+</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-FutureDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#501-507">source</a><a href="#impl-FutureDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+</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-Future-for-FutureDelete" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#509-515">source</a><a href="#impl-Future-for-FutureDelete" class="ancho [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureDelete" class="impl"><a href="#impl-RefUnwindSafe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureList.html b/docs/rust/opendal/operator_futures/struct.FutureList.html
index 5c77b642e..96ed7dc6e 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureList.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureList.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="Future that generated by `Operator::list_with`."><title>FutureList in opendal::operator_futures - 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/wof [...]
+<!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="Future that generated by `Operator::list_with`."><title>FutureList in opendal::operator_futures - 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/wof [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureList" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#574-592">source</a><a href="#impl-FutureList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Futu [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delimiter" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#582-585">source</a><h4 class="code-header">pub fn <a href="#method.delimiter" class="fn">delimiter</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the deli [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#588-591">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.M [...]
-</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-Future-for-FutureList" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#594-600">source</a><a href="#impl-Future-for-FutureList" class="anchor">§ [...]
+</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-FutureList" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#522-540">source</a><a href="#impl-FutureList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Futu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delimiter" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#530-533">source</a><h4 class="code-header">pub fn <a href="#method.delimiter" class="fn">delimiter</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the deli [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#536-539">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.M [...]
+</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-Future-for-FutureList" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#542-548">source</a><a href="#impl-Future-for-FutureList" class="anchor">§ [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureList" class="impl"><a href="#impl-RefUnwindSafe-f [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureLister.html b/docs/rust/opendal/operator_futures/struct.FutureLister.html
index fde771af6..b40a39223 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureLister.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureLister.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="Future that generated by `Operator::lister_with`."><title>FutureLister in opendal::operator_futures - 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="Future that generated by `Operator::lister_with`."><title>FutureLister in opendal::operator_futures - 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 [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureLister" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#607-631">source</a><a href="#impl-FutureLister" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#615-618">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delimiter" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#621-624">source</a><h4 class="code-header">pub fn <a href="#method.delimiter" class="fn">delimiter</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the deli [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#627-630">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.M [...]
-</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-Future-for-FutureLister" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#633-639">source</a><a href="#impl-Future-for-FutureLister" class="ancho [...]
+</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-FutureLister" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#555-579">source</a><a href="#impl-FutureLister" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#563-566">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delimiter" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#569-572">source</a><h4 class="code-header">pub fn <a href="#method.delimiter" class="fn">delimiter</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the deli [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#575-578">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.M [...]
+</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-Future-for-FutureLister" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#581-587">source</a><a href="#impl-Future-for-FutureLister" class="ancho [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureLister" class="impl"><a href="#impl-RefUnwindSafe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FuturePresignRead.html b/docs/rust/opendal/operator_futures/struct.FuturePresignRead.html
index b1502c6fe..8b9c79eb2 100644
--- a/docs/rust/opendal/operator_futures/struct.FuturePresignRead.html
+++ b/docs/rust/opendal/operator_futures/struct.FuturePresignRead.html
@@ -1,12 +1,12 @@
-<!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="Future that generated by `Operator::presign_read_with`."><title>FuturePresignRead in opendal::operator_futures - 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="Future that generated by `Operator::presign_read_with`."><title>FuturePresignRead in opendal::operator_futures - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" [...]
 <p>Users can add more options by public functions provided by this struct.</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-FuturePresignRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#232-276">source</a><a href="#impl-FuturePresignRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" hre [...]
-</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/operator/operator_futures.rs.html#240-245">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></s [...]
-</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/operator/operator_futures.rs.html#248-253">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#256-261">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#264-267">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/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_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#270-275">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FuturePresignRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#278-284">source</a><a href="#impl-Future-for-FuturePresignRead" cl [...]
+</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-FuturePresignRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#156-200">source</a><a href="#impl-FuturePresignRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" hre [...]
+</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/operator/operator_futures.rs.html#164-169">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></s [...]
+</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/operator/operator_futures.rs.html#172-177">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#180-185">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#188-191">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/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_none_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#194-199">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</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-Future-for-FuturePresignRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#202-208">source</a><a href="#impl-Future-for-FuturePresignRead" cl [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FuturePresignRead" class="impl"><a href="#impl-RefUnwin [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FuturePresignWrite.html b/docs/rust/opendal/operator_futures/struct.FuturePresignWrite.html
index d941e9db0..c7cdc0a38 100644
--- a/docs/rust/opendal/operator_futures/struct.FuturePresignWrite.html
+++ b/docs/rust/opendal/operator_futures/struct.FuturePresignWrite.html
@@ -1,12 +1,12 @@
-<!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="Future that generated by `Operator::presign_read_with`."><title>FuturePresignWrite in opendal::operator_futures - 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="Future that generated by `Operator::presign_read_with`."><title>FuturePresignWrite in opendal::operator_futures - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
 <p>Users can add more options by public functions provided by this struct.</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-FuturePresignWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#291-326">source</a><a href="#impl-FuturePresignWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" h [...]
+</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-FuturePresignWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#215-250">source</a><a href="#impl-FuturePresignWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" h [...]
 <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/operator/operator_futures.rs.html#304-309">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#312-317">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#320-325">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FuturePresignWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#328-334">source</a><a href="#impl-Future-for-FuturePresignWrite"  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#228-233">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#236-241">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#244-249">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</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-Future-for-FuturePresignWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#252-258">source</a><a href="#impl-Future-for-FuturePresignWrite"  [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FuturePresignWrite" class="impl"><a href="#impl-RefUnwi [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureRead.html b/docs/rust/opendal/operator_futures/struct.FutureRead.html
index cd1ab8770..f089ff761 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureRead.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureRead.html
@@ -1,13 +1,13 @@
-<!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="Future that generated by `Operator::read_with`."><title>FutureRead in opendal::operator_futures - 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/wof [...]
+<!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="Future that generated by `Operator::read_with`."><title>FutureRead in opendal::operator_futures - 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/wof [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#341-389">source</a><a href="#impl-FutureRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Futu [...]
-</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/operator/operator_futures.rs.html#349-354">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>)  [...]
-</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/operator/operator_futures.rs.html#357-362">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#365-370">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#373-376">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match f [...]
-</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/operator/operator_futures.rs.html#379-382">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#385-388">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for t [...]
-</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-Future-for-FutureRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#391-397">source</a><a href="#impl-Future-for-FutureRead" class="anchor">§ [...]
+</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-FutureRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#265-313">source</a><a href="#impl-FutureRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Futu [...]
+</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/operator/operator_futures.rs.html#273-278">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>)  [...]
+</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/operator/operator_futures.rs.html#281-286">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#289-294">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#297-300">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match f [...]
+</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/operator/operator_futures.rs.html#303-306">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#309-312">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for t [...]
+</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-Future-for-FutureRead" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#315-321">source</a><a href="#impl-Future-for-FutureRead" class="anchor">§ [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureRead" class="impl"><a href="#impl-RefUnwindSafe-f [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureReader.html b/docs/rust/opendal/operator_futures/struct.FutureReader.html
index 388f9ec11..be709b5a7 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureReader.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureReader.html
@@ -1,12 +1,12 @@
-<!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="Future that generated by `Operator::reader_with`."><title>FutureReader in opendal::operator_futures - 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="Future that generated by `Operator::reader_with`."><title>FutureReader in opendal::operator_futures - 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 [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureReader" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#404-446">source</a><a href="#impl-FutureReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
-</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/operator/operator_futures.rs.html#412-417">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>)  [...]
-</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/operator/operator_futures.rs.html#420-425">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#428-433">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#436-439">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match f [...]
-</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/operator/operator_futures.rs.html#442-445">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FutureReader" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#448-454">source</a><a href="#impl-Future-for-FutureReader" class="ancho [...]
+</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-FutureReader" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#328-370">source</a><a href="#impl-FutureReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+</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/operator/operator_futures.rs.html#336-341">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(self, content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>)  [...]
+</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/operator/operator_futures.rs.html#344-349">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#352-357">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#360-363">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match f [...]
+</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/operator/operator_futures.rs.html#366-369">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</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-Future-for-FutureReader" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#372-378">source</a><a href="#impl-Future-for-FutureReader" class="ancho [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureReader" class="impl"><a href="#impl-RefUnwindSafe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureWrite.html b/docs/rust/opendal/operator_futures/struct.FutureWrite.html
index d155b8211..652088bf7 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureWrite.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureWrite.html
@@ -1,12 +1,16 @@
-<!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="Future that generated by `Operator::write_with`."><title>FutureWrite in opendal::operator_futures - 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/w [...]
+<!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="Future that generated by `Operator::write_with`."><title>FutureWrite in opendal::operator_futures - 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/w [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#461-496">source</a><a href="#impl-FutureWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Fu [...]
+</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-FutureWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#385-432">source</a><a href="#impl-FutureWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Fu [...]
+<p>If the append mode is set, the data will be appended to the end of the file.</p>
+<h5 id="notes"><a href="#notes">Notes</a></h5>
+<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</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/operator/operator_futures.rs.html#402-407">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
 <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/operator/operator_futures.rs.html#474-479">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#482-487">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#490-495">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FutureWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#498-504">source</a><a href="#impl-Future-for-FutureWrite" class="anchor" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#410-415">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#418-423">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#426-431">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</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-Future-for-FutureWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#434-440">source</a><a href="#impl-Future-for-FutureWrite" class="anchor" [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureWrite" class="impl"><a href="#impl-RefUnwindSafe- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/operator_futures/struct.FutureWriter.html b/docs/rust/opendal/operator_futures/struct.FutureWriter.html
index ae7aea82d..d36e98a6a 100644
--- a/docs/rust/opendal/operator_futures/struct.FutureWriter.html
+++ b/docs/rust/opendal/operator_futures/struct.FutureWriter.html
@@ -1,12 +1,16 @@
-<!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="Future that generated by `Operator::writer_with`."><title>FutureWriter in opendal::operator_futures - 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="Future that generated by `Operator::writer_with`."><title>FutureWriter in opendal::operator_futures - 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 [...]
 <p>Users can add more options by public functions provided by this struct.</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-FutureWriter" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#511-538">source</a><a href="#impl-FutureWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+</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-FutureWriter" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#447-486">source</a><a href="#impl-FutureWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+<p>If the append mode is set, the data will be appended to the end of the file.</p>
+<h5 id="notes"><a href="#notes">Notes</a></h5>
+<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</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/operator/operator_futures.rs.html#464-467">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
 <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/operator/operator_futures.rs.html#522-525">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#528-531">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#534-537">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</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-Future-for-FutureWriter" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#540-546">source</a><a href="#impl-Future-for-FutureWriter" class="ancho [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#470-473">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#476-479">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#482-485">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</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-Future-for-FutureWriter" class="impl"><a class="srclink rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#488-494">source</a><a href="#impl-Future-for-FutureWriter" class="ancho [...]
 the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.71.1/core/future/future/trait.Future.html#tymethod.poll">Read more</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-FutureWriter" class="impl"><a href="#impl-RefUnwindSafe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/raw/adapters/kv/struct.Backend.html b/docs/rust/opendal/raw/adapters/kv/struct.Backend.html
index 10683349f..e2bee03d8 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#40-57">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#45-50">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#53-56">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.71.1/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#60-303">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#60-302">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.Appender" class="associatedtype trait-impl"><a href="#associatedtype.Appender" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Appender" class="associatedtype">Appender</a> = <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.unit.html">()</a></h4></section></summary><div class='docblock'>Appender [...]
-<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-99">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  [...]
+<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#68-98">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.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#107-112">source</a><a href="#method.blocking_create_dir"  [...]
+    '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#106-111">source</a><a href="#method.blocking_create_dir"  [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpRead.html" title="struct opendal::raw::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#128-138">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#127-137">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpRead.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpWrite.html" title="struct opendal::raw::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#153-164">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#152-163">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpWrite.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#182-196">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#181-195">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.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#205-210">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#204-209">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.blocking_list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#227-240">source</a><a href="#method.blocking_list" 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#226-239">source</a><a href="#method.blocking_list" class="anchor">§</a [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpList.html" title="struct opendal::raw::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= [...]
+) -&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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -74,7 +74,7 @@ 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.blocking_rename" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#258-272">source</a><a [...]
+    '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.blocking_rename" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/kv/backend.rs.html#257-271">source</a><a [...]
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -83,22 +83,14 @@ 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>copy</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.copy">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/adapters/kv/backend.rs.html#289-302">source</a><a href= [...]
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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>append</code> operation on the specified path, returns a
-appended size if operate successful. <a href="../../trait.Accessor.html#method.append">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#247-254">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'asy [...]
+    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>copy</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.copy">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/adapters/kv/backend.rs.html#288-301">source</a><a href= [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpPresign.html" title="struct opendal::raw::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#259-266">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#240-247">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
     &amp;'life0 self,
     args: <a class="struct" href="../../struct.OpBatch.html" title="struct opendal::raw::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 [...]
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 b0f0e00d9..faa837e59 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#36-53">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#41-46">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#49-52">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.71.1/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#56-292">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#56-291">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.Appender" class="associatedtype trait-impl"><a href="#associatedtype.Appender" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Appender" class="associatedtype">Appender</a> = <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.unit.html">()</a></h4></section></summary><div class='docblock'>Appender [...]
-<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-106">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=" [...]
+<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#64-105">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=" [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#114-119">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#113-118">source</a><a href="#method.blocking_create [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpRead.html" title="struct opendal::raw::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#136-147">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#135-146">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpRead.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpWrite.html" title="struct opendal::raw::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#155-159">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#154-158">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpWrite.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#175-187">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#174-186">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.71.1/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#196-201">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#195-200">source</a><a href="#method.blocking_delete" class [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.blocking_list" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#218-231">source</a><a href="#method.blocking_list" 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#217-230">source</a><a href="#method.blocking_list" class="anchor [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpList.html" title="struct opendal::raw::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= [...]
+) -&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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -70,7 +70,7 @@ 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.blocking_rename" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#248-261">source [...]
+    '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.blocking_rename" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#247-260">source [...]
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -79,22 +79,14 @@ 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>copy</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.copy">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/adapters/typed_kv/backend.rs.html#278-291">source</a><a [...]
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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>append</code> operation on the specified path, returns a
-appended size if operate successful. <a href="../../trait.Accessor.html#method.append">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#247-254">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.presign" class="fn">presign</a>&lt;'life0, 'life1, 'asy [...]
+    'life2: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>copy</code> operation on the specified <code>from</code> path and <code>to</code> path. <a href="../../trait.Accessor.html#method.copy">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/adapters/typed_kv/backend.rs.html#277-290">source</a><a [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../struct.OpPresign.html" title="struct opendal::raw::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#259-266">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#240-247">source</a><a href="#method.batch" class="anchor">§</a><h4 class="code-head [...]
     &amp;'life0 self,
     args: <a class="struct" href="../../struct.OpBatch.html" title="struct opendal::raw::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 [...]
diff --git a/docs/rust/opendal/raw/enum.Operation.html b/docs/rust/opendal/raw/enum.Operation.html
index b98681b58..96f073f5c 100644
--- a/docs/rust/opendal/raw/enum.Operation.html
+++ b/docs/rust/opendal/raw/enum.Operation.html
@@ -1,9 +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="Operation is the name for APIs in `Accessor`."><title>Operation 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  [...]
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 20 variants</span></summary>    Info,
+<!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="Operation is the name for APIs in `Accessor`."><title>Operation 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  [...]
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 19 variants</span></summary>    Info,
     CreateDir,
     Read,
     Write,
-    Append,
     Copy,
     Rename,
     Stat,
@@ -24,7 +23,6 @@
 </div><section id="variant.CreateDir" class="variant"><a href="#variant.CreateDir" class="anchor">§</a><h3 class="code-header">CreateDir</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.create_dir" title="method opendal::raw::Accessor::create_dir"><code>crate::raw::Accessor::create_dir</code></a></p>
 </div><section id="variant.Read" class="variant"><a href="#variant.Read" class="anchor">§</a><h3 class="code-header">Read</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.read" title="method opendal::raw::Accessor::read"><code>crate::raw::Accessor::read</code></a></p>
 </div><section id="variant.Write" class="variant"><a href="#variant.Write" class="anchor">§</a><h3 class="code-header">Write</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.write" title="method opendal::raw::Accessor::write"><code>crate::raw::Accessor::write</code></a></p>
-</div><section id="variant.Append" class="variant"><a href="#variant.Append" class="anchor">§</a><h3 class="code-header">Append</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.append" title="method opendal::raw::Accessor::append"><code>crate::raw::Accessor::append</code></a></p>
 </div><section id="variant.Copy" class="variant"><a href="#variant.Copy" class="anchor">§</a><h3 class="code-header">Copy</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.copy" title="method opendal::raw::Accessor::copy"><code>crate::raw::Accessor::copy</code></a></p>
 </div><section id="variant.Rename" class="variant"><a href="#variant.Rename" class="anchor">§</a><h3 class="code-header">Rename</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.rename" title="method opendal::raw::Accessor::rename"><code>crate::raw::Accessor::rename</code></a></p>
 </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>
@@ -40,8 +38,8 @@
 </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></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#68-73">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" [...]
+</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#66-71">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.71.1/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></det [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.71.1/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.71.1/core/cmp/trait.PartialEq.html#method.ne" clas [...]
diff --git a/docs/rust/opendal/raw/index.html b/docs/rust/opendal/raw/index.html
index 89f0f7497..1739a85a8 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/append/api/type.Appender.html b/docs/rust/opendal/raw/oio/append/api/type.Appender.html
deleted file mode 100644
index ef527a148..000000000
--- a/docs/rust/opendal/raw/oio/append/api/type.Appender.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/type.Appender.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../../../opendal/raw/oio/type.Appender.html">../../../../../opendal/raw/oio/type.Appender.html</a>...</p>
-    <script>location.replace("../../../../../opendal/raw/oio/type.Appender.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/enum.AppendOperation.html b/docs/rust/opendal/raw/oio/enum.AppendOperation.html
deleted file mode 100644
index 5442b6be5..000000000
--- a/docs/rust/opendal/raw/oio/enum.AppendOperation.html
+++ /dev/null
@@ -1,40 +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="AppendOperation is the name for APIs of Append."><title>AppendOperation 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/wof [...]
-    Append,
-    Close,
-}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>AppendOperation is the name for APIs of Append.</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><section id="variant.Close" class="variant"><a href="#variant.Close" class="anchor">§</a><h3 class="code-header">Close</h3></section><div class="docblock"><p>Operation for <a href="trait.Append.html#tymethod.close" title="method opendal::raw::oio::Append::close"><code>Append::close</code></a></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-AppendOperation" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#36-41">source</a><a href="#impl-AppendOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.AppendOperatio [...]
-</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-AppendOperation" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#27">source</a><a href="#impl-Clone-for-AppendOperation" class="anchor">§</a><h3 [...]
-    H: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></det [...]
-by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.71.1/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.71.1/core/cmp/trait.PartialEq.html#method.ne" clas [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-AppendOperation" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#27">source</a><a href="#impl-Copy-for-AppendOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" hre [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_hash</a>&lt;H, B&gt;(valu [...]
-    H: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    B: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</span></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CompatExt-for-AppendOperation" class="impl"><a href="#impl-CompatExt-for-AppendOperation" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; CompatExt for T</h3></section></summary><div class="impl-items"><details class="togg [...]
-    Q: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    K: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;Q&gt; + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.equivalent" class="method trait-impl"><a class="srclink rightside" href="https://d [...]
-    Q: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    K: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;Q&gt; + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.equivalent-1" class="method trait-impl"><a href="#method.equivalent-1" class="anch [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FromRef%3CT%3E-for-AppendOperation" class="impl"><a href="#impl-FromRef%3CT%3E-for-AppendOperation" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FromRef&lt;T&gt; for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from_ref" class="method trait-impl"><a href="#method.from_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">from_ref</a>(input: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.h [...]
-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-AppendOperation" 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-AppendOperation" 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= [...]
-<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-AppendOperation" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-AppendOperation" class="anchor">§</a><h3 class= [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-AppendOperation" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-AppendOperation" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::request::I [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a> + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.to_string" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang. [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-AppendOperation" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334" [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/enum.TwoWaysWriter.html b/docs/rust/opendal/raw/oio/enum.TwoWaysWriter.html
new file mode 100644
index 000000000..3ae4c4b5c
--- /dev/null
+++ b/docs/rust/opendal/raw/oio/enum.TwoWaysWriter.html
@@ -0,0 +1,49 @@
+<!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="TwoWaysWrite is used to implement [`Write`] based on two ways."><title>TwoWaysWriter 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" t [...]
+    Left(L),
+    Right(R),
+}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>TwoWaysWrite is used to implement [<code>Write</code>] based on two ways.</p>
+<p>Users can wrap two different writers together.</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.Left" class="variant"><a href="#variant.Left" class="anchor">§</a><h3 class="code-header">Left(L)</h3></section><div class="docblock"><p>The left side for the <a href="enum.TwoWaysWriter.html" title="enum opendal::raw::oio::TwoWaysWriter"><code>TwoWaysWriter</code></a>.</p>
+</div><section id="variant.Right" class="variant"><a href="#variant.Right" class="anchor">§</a><h3 class="code-header">Right(R)</h3></section><div class="docblock"><p>The right side for the <a href="enum.TwoWaysWriter.html" title="enum opendal::raw::oio::TwoWaysWriter"><code>TwoWaysWriter</code></a>.</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-Write-for-TwoWaysWriter%3CL,+R%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/two_ways_write.rs.html#36-64">source</a><a href="#impl-Write-for-TwoWaysWriter%3CL,+R%3E" class="anchor">§</a> [...]
+    &amp;'life0 mut self,
+    bs: Bytes
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Write given bytes into writer. <a href="trait.Write.html#tymethod.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sink" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/two_ways_write.rs.html#44-49">source</a><a href="#method.sink" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write.html#t [...]
+    &amp;'life0 mut self,
+    size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+    s: <a class="type" href="type.Streamer.html" title="type opendal::raw::oio::Streamer">Streamer</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Sink given stream into writer.</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/two_ways_write.rs.html#51-56">source</a><a href="#method.abort" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write.html#tymethod.abort" class="fn">abort</a>&lt;'life0, 'async_ [...]
+    &amp;'life0 mut self
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Abort the pending writer.</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/two_ways_write.rs.html#58-63">source</a><a href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write.html#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
+    &amp;'life0 mut self
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Close the writer and make sure all data has been flushed.</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-TwoWaysWriter%3CL,+R%3E" class="impl"><a href="#impl-RefUnwindSafe-for-TwoWaysWriter%3CL, [...]
+    L: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,
+    R: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-TwoWaysWriter%3CL,+R%3E" class="impl"><a href="#impl-Send-for-TwoWaysWriter%3CL,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;L, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker: [...]
+    L: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,
+    R: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</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-TwoWaysWriter%3CL,+R%3E" c [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-TwoWaysWriter%3CL,+R%3E" class="impl"><a href="#impl-FutureExt-for-TwoWaysWriter%3CL,+R%3E" 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">§</ [...]
+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-TwoWaysWriter%3CL,+R%3E" 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-TwoWaysWriter%3CL,+R%3E" 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.Instrum [...]
+<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-TwoWaysWriter%3CL,+R%3E" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-TwoWaysWriter%3CL,+R%3E" class="anchor" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-TwoWaysWriter%3CL,+R%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-TwoWaysWriter%3CL,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait t [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
+    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-TwoWaysWriter%3CL,+R%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.h [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
+<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></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/index.html b/docs/rust/opendal/raw/oio/index.html
index 4a3071801..3f4899e32 100644
--- a/docs/rust/opendal/raw/oio/index.html
+++ b/docs/rust/opendal/raw/oio/index.html
@@ -1,11 +1,13 @@
-<!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="`oio` provides OpenDAL’s raw traits and types that opendal returns as output."><title>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" typ [...]
+<!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="`oio` provides OpenDAL’s raw traits and types that opendal returns as output."><title>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" typ [...]
 output.</p>
 <p>Those types should only be used internally and we don’t want users to
 depend on them. So we should also implement trait like <code>AsyncRead</code> for
 our <code>output</code> traits.</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.ByRangeSeekableReader.html" title="struct opendal::raw::oio::ByRangeSeekableReader">ByRangeSeekableReader</a></div><div class="desc docblock-short">ByRangeReader that can do seek on non-seekable reader.</div></li><li><div class="item-name"><a class="struct" href="struct.Cursor.html" title="struct opendal::raw::oi [...]
+</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.AppendObjectWriter.html" title="struct opendal::raw::oio::AppendObjectWriter">AppendObjectWriter</a></div><div class="desc docblock-short">AppendObjectWriter will implements [<code>Write</code>] based on append object.</div></li><li><div class="item-name"><a class="struct" href="struct.ByRangeSeekableReader.html" [...]
 not needed entries.</div></li><li><div class="item-name"><a class="struct" href="struct.MultipartUploadPart.html" title="struct opendal::raw::oio::MultipartUploadPart">MultipartUploadPart</a></div><div class="desc docblock-short">The result of <a href="trait.MultipartUploadWrite.html#tymethod.write_part" title="method opendal::raw::oio::MultipartUploadWrite::write_part"><code>MultipartUploadWrite::write_part</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct. [...]
-uploads.</div></li><li><div class="item-name"><a class="struct" href="struct.StreamableReader.html" title="struct opendal::raw::oio::StreamableReader">StreamableReader</a></div><div class="desc docblock-short">Make given read streamable.</div></li><li><div class="item-name"><a class="struct" href="struct.VectorCursor.html" title="struct opendal::raw::oio::VectorCursor">VectorCursor</a></div><div class="desc docblock-short">VectorCursor is the cursor for <a href="https://doc.rust-lang.org [...]
+uploads.</div></li><li><div class="item-name"><a class="struct" href="struct.StreamableReader.html" title="struct opendal::raw::oio::StreamableReader">StreamableReader</a></div><div class="desc docblock-short">Make given read streamable.</div></li><li><div class="item-name"><a class="struct" href="struct.VectorCursor.html" title="struct opendal::raw::oio::VectorCursor">VectorCursor</a></div><div class="desc docblock-short">VectorCursor is the cursor for <a href="https://doc.rust-lang.org [...]
+object. By implementing AppendObjectWrite, services don’t need to
+care about the details of buffering and uploading parts.</div></li><li><div class="item-name"><a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a></div><div class="desc docblock-short">BlockingPage is the blocking version of <a href="trait.Page.html" title="trait opendal::raw::oio::Page"><code>Page</code></a>.</div></li><li><div class="item-name"><a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::Block [...]
 uploads. By implementing MultipartUploadWrite, services don’t need to
 care about the details of buffering and uploading parts.</div></li><li><div class="item-name"><a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a></div><div class="desc docblock-short">Page trait is used by <a href="../trait.Accessor.html" title="trait opendal::raw::Accessor"><code>raw::Accessor</code></a> to implement <code>list</code>
-or <code>scan</code> operation.</div></li><li><div class="item-name"><a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a></div><div class="desc docblock-short">Read is the trait that OpenDAL returns to callers.</div></li><li><div class="item-name"><a class="trait" href="trait.ReadExt.html" title="trait opendal::raw::oio::ReadExt">ReadExt</a></div><div class="desc docblock-short">Extension of <a href="trait.Read.html" title="trait opendal::raw::oio::Read" [...]
\ No newline at end of file
+or <code>scan</code> operation.</div></li><li><div class="item-name"><a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a></div><div class="desc docblock-short">Read is the trait that OpenDAL returns to callers.</div></li><li><div class="item-name"><a class="trait" href="trait.ReadExt.html" title="trait opendal::raw::oio::ReadExt">ReadExt</a></div><div class="desc docblock-short">Extension of <a href="trait.Read.html" title="trait opendal::raw::oio::Read" [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/sidebar-items.js b/docs/rust/opendal/raw/oio/sidebar-items.js
index b363caeaf..06e3b4fed 100644
--- a/docs/rust/opendal/raw/oio/sidebar-items.js
+++ b/docs/rust/opendal/raw/oio/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["AppendOperation","PageOperation","ReadOperation","WriteOperation"],"fn":["into_flat_page","into_hierarchy_page","into_read_from_file","into_seekable_read_by_range","into_stream","into_stream_from_reader","into_streamable_read"],"struct":["ByRangeSeekableReader","Cursor","Entry","FlatPager","FromFileReader","HierarchyPager","MultipartUploadPart","MultipartUploadWriter","StreamableReader","VectorCursor"],"trait":["Append","BlockingPage","BlockingRead","Bloc [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["PageOperation","ReadOperation","TwoWaysWriter","WriteOperation"],"fn":["into_flat_page","into_hierarchy_page","into_read_from_file","into_seekable_read_by_range","into_stream","into_stream_from_reader","into_streamable_read"],"struct":["AppendObjectWriter","ByRangeSeekableReader","Cursor","Entry","FlatPager","FromFileReader","HierarchyPager","MultipartUploadPart","MultipartUploadWriter","StreamableReader","VectorCursor"],"trait":["AppendObjectWrite","Bloc [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/struct.AppendObjectWriter.html b/docs/rust/opendal/raw/oio/struct.AppendObjectWriter.html
new file mode 100644
index 000000000..474bc9ee1
--- /dev/null
+++ b/docs/rust/opendal/raw/oio/struct.AppendObjectWriter.html
@@ -0,0 +1,52 @@
+<!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="AppendObjectWriter will implements [`Write`] based on append object."><title>AppendObjectWriter 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"  [...]
+<h3 id="todo"><a href="#todo">TODO</a></h3>
+<ul>
+<li>Allow users to switch to un-buffered mode if users write 16MiB every time.</li>
+</ul>
+</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-AppendObjectWriter%3CW%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#60-94">source</a><a href="#impl-AppendObjectWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl&lt [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_write_min_size" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#79-82">source</a><h4 class="code-header">pub fn <a href="#method.with_write_min_size" class="fn">with_write_min_size</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div cla [...]
+<p>write_min_size is used to control the size of internal buffer.</p>
+<p>AppendObjectWriter will flush the buffer to storage when
+the size of buffer is larger than write_min_size.</p>
+<p>This value is default to 8 MiB.</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-Write-for-AppendObjectWriter%3CW%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#97-176">source</a><a href="#impl-Write-for-AppendObjec [...]
+    W: <a class="trait" href="trait.AppendObjectWrite.html" title="trait opendal::raw::oio::AppendObjectWrite">AppendObjectWrite</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#101-135">source</a><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a href="t [...]
+    &amp;'life0 mut self,
+    bs: Bytes
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Write given bytes into writer. <a href="trait.Write.html#tymethod.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sink" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#137-153">source</a><a href="#method.sink" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write [...]
+    &amp;'life0 mut self,
+    size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+    s: <a class="type" href="type.Streamer.html" title="type opendal::raw::oio::Streamer">Streamer</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Sink given stream into writer.</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#155-171">source</a><a href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write.html#tymethod.close" class="fn">close</a>&lt;'life0,  [...]
+    &amp;'life0 mut self
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Close the writer and make sure all data has been flushed.</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#173-175">source</a><a href="#method.abort" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Write.html#tymethod.abort" class [...]
+    &amp;'life0 mut self
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class='docblock'>Abort the pending writer.</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-AppendObjectWriter%3CW%3E" class="impl"><a href="#impl-RefUnwindSafe-for-AppendObjectWriter%3CW%3E" class="anchor">§</a>< [...]
+    W: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-AppendObjectWriter%3CW%3E" class="impl"><a href="#impl-Send-for-AppendObjectWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl&lt;W&gt; <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker [...]
+    W: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</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-AppendObjectWriter%3CW%3E" [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-AppendObjectWriter%3CW%3E" class="impl"><a href="#impl-FutureExt-for-AppendObjectWriter%3CW%3E" 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" [...]
+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-AppendObjectWriter%3CW%3E" 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-AppendObjectWriter%3CW%3E" 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.Ins [...]
+<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-AppendObjectWriter%3CW%3E" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-AppendObjectWriter%3CW%3E" class="anc [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-AppendObjectWriter%3CW%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-AppendObjectWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="tra [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
+    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-AppendObjectWriter%3CW%3E" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
+<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></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/struct.VectorCursor.html b/docs/rust/opendal/raw/oio/struct.VectorCursor.html
index 0a8df88b1..49b538b35 100644
--- a/docs/rust/opendal/raw/oio/struct.VectorCursor.html
+++ b/docs/rust/opendal/raw/oio/struct.VectorCursor.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="VectorCursor is the cursor for `Vec&lt;Bytes&gt;` that implements `oio::Read`"><title>VectorCursor 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="preloa [...]
-</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-VectorCursor" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#163-307">source</a><a href="#impl-VectorCursor" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.VectorCursor.h [...]
+</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-VectorCursor" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#163-309">source</a><a href="#impl-VectorCursor" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.VectorCursor.h [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#173-175">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if current ve [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#178-180">source</a><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Return current bytes size of current vector.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.push" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#183-186">source</a><h4 class="code-header">pub fn <a href="#method.push" class="fn">push</a>(&amp;mut self, bs: Bytes)</h4></section></summary><div class="docblock"><p>Push a new bytes into vector cursor.</p>
@@ -21,9 +21,10 @@ returning bytes is larger.</p>
 <p>Panics if n is larger than current size.</p>
 <h5 id="todo-1"><a href="#todo-1">TODO</a></h5>
 <p>Optimize to avoid data copy.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.peak_all" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#270-281">source</a><h4 class="code-header">pub fn <a href="#method.peak_all" class="fn">peak_all</a>(&amp;self) -&gt; Bytes</h4></section></summary><div class="docblock"><p>peak all will read and copy all bytes from current cursor
+</div></details><details class="toggle method-toggle" open><summary><section id="method.peak_all" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#272-283">source</a><h4 class="code-header">pub fn <a href="#method.peak_all" class="fn">peak_all</a>(&amp;self) -&gt; Bytes</h4></section></summary><div class="docblock"><p>peak all will read and copy all bytes from current cursor
 without change it’s content.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#288-306">source</a><h4 class="code-header">pub fn <a href="#method.take" class="fn">take</a>(&amp;mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Take will consume n bytes from current cursor.</p>
+<p>TODO: we need to find a way to avoid copy all content here.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#290-308">source</a><h4 class="code-header">pub fn <a href="#method.take" class="fn">take</a>(&amp;mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Take will consume n bytes from current cursor.</p>
 <h5 id="panics-2"><a href="#panics-2">Panics</a></h5>
 <p>Panics if n is larger than current size.</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-Default-for-VectorCursor" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/cursor.rs.html#157-161">source</a><a href="#impl-Default-for-VectorCursor" class="anchor">§</a><h3  [...]
diff --git a/docs/rust/opendal/raw/oio/trait.Append.html b/docs/rust/opendal/raw/oio/trait.Append.html
deleted file mode 100644
index 9410e8b02..000000000
--- a/docs/rust/opendal/raw/oio/trait.Append.html
+++ /dev/null
@@ -1,50 +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="Append is the trait that OpenDAL returns to callers."><title>Append 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"  [...]
-    // Required methods
-    fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'async_trait&gt;(
-        &amp;'life0 mut self,
-        bs: Bytes
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 open [...]
-       <span class="where">where Self: 'async_trait,
-             'life0: 'async_trait</span>;
-<span class="item-spacer"></span>    fn <a href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
-        &amp;'life0 mut self
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 open [...]
-       <span class="where">where Self: 'async_trait,
-             'life0: 'async_trait</span>;
-}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Append is the trait that OpenDAL returns to callers.</p>
-<h2 id="notes"><a href="#notes">Notes</a></h2>
-<p>Users will call <code>append</code> multiple times.</p>
-</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.append" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#74">source</a><h4 class="code-header">fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'async_trait&gt;(
-    &amp;'life0 mut self,
-    bs: Bytes
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class="docblock"><p>Append data to the end of file.</p>
-<p>Users will call <code>append</code> multiple times.
-Please make sure <code>append</code> is safe to re-enter.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.close" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#77">source</a><h4 class="code-header">fn <a href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
-    &amp;'life0 mut self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class="docblock"><p>Seal the file to mark it as unmodifiable.</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-Append-for-Box%3CT%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#100-108">source</a><a href="#impl-Append-for-Box%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="trait.Appen [...]
-<p>To make Appender work as expected, we must add this impl.</p>
-</div><div class="impl-items"><section id="method.append" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#101-103">source</a><a href="#method.append" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'async_trait&gt;(
-    &amp;'life0 mut self,
-    bs: Bytes
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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><section id="method.close" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#105-107">source</a><a href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
-    &amp;'life0 mut self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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><details class="toggle implementors-toggle"><summary><section id="impl-Append-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#81-94">source</a><a href="#impl-Append-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Append.html" title="trait opendal::raw::oio::Append">Append</a> for <a class="primitive" href="https://doc.rust-lang.org/1 [...]
-    &amp;'life0 mut self,
-    bs: Bytes
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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><section id="method.close-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/append/api.rs.html#88-93">source</a><a href="#method.close-1" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
-    &amp;'life0 mut self
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"></div><script src="../../../implementors/opendal/raw/oio/append/api/trait.Append.js" data-ignore-extern-crates="alloc,std" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.AppendObjectWrite.html b/docs/rust/opendal/raw/oio/trait.AppendObjectWrite.html
new file mode 100644
index 000000000..6773296ad
--- /dev/null
+++ b/docs/rust/opendal/raw/oio/trait.AppendObjectWrite.html
@@ -0,0 +1,39 @@
+<!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="AppendObjectWrite is used to implement [`Write`] based on append object. By implementing AppendObjectWrite, services don’t need to care about the details of buffering and uploading parts."><title>AppendObjectWrite in opendal::raw::oio - Rust</title><link rel="preload" as="font" type="fon [...]
+    // Required methods
+    fn <a href="#tymethod.offset" class="fn">offset</a>&lt;'life0, 'async_trait&gt;(
+        &amp;'life0 self
+    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 open [...]
+       <span class="where">where Self: 'async_trait,
+             'life0: 'async_trait</span>;
+<span class="item-spacer"></span>    fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'async_trait&gt;(
+        &amp;'life0 self,
+        offset: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+        size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+        body: <a class="enum" href="../enum.AsyncBody.html" title="enum opendal::raw::AsyncBody">AsyncBody</a>
+    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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 open [...]
+       <span class="where">where Self: 'async_trait,
+             'life0: 'async_trait</span>;
+}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>AppendObjectWrite is used to implement [<code>Write</code>] based on append
+object. By implementing AppendObjectWrite, services don’t need to
+care about the details of buffering and uploading parts.</p>
+<p>The layout after adopting <a href="trait.AppendObjectWrite.html" title="trait opendal::raw::oio::AppendObjectWrite"><code>AppendObjectWrite</code></a>:</p>
+<ul>
+<li>Services impl <code>AppendObjectWrite</code></li>
+<li><code>AppendObjectWriter</code> impl <code>Write</code></li>
+<li>Expose <code>AppendObjectWriter</code> as <code>Accessor::Writer</code></li>
+</ul>
+</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.offset" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#41">source</a><h4 class="code-header">fn <a href="#tymethod.offset" class="fn">offset</a>&lt;'life0, 'async_trait&gt;(
+    &amp;'life0 self
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class="docblock"><p>Get the current offset of the append object.</p>
+<p>Returns <code>0</code> if the object is not exist.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.append" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/append_object_write.rs.html#44">source</a><h4 class="code-header">fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'async_trait&gt;(
+    &amp;'life0 self,
+    offset: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+    size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>,
+    body: <a class="enum" href="../enum.AsyncBody.html" title="enum opendal::raw::AsyncBody">AsyncBody</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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></summary><div class="docblock"><p>Append the data to the end of this object.</p>
+</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../implementors/opendal/raw/oio/write/append_object_write/trait.AppendObjectWrite.js" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Write.html b/docs/rust/opendal/raw/oio/trait.Write.html
index a8dab9d2a..bdbb89f82 100644
--- a/docs/rust/opendal/raw/oio/trait.Write.html
+++ b/docs/rust/opendal/raw/oio/trait.Write.html
@@ -100,5 +100,6 @@ content length. And users will call write multiple times.</p>
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-Write-for-MultipartUploadWriter%3CW%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/multipart_upload_write.rs.html#134-266">source</a><a href="#impl-Write-for-MultipartUploadWriter%3CW%3E" class="anchor">§</a><h3 class="code-header" [...]
+    '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-Write-for-TwoWaysWriter%3CL,+R%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/two_ways_write.rs.html#36-64">source</a><a href="#impl-Write-for-TwoWaysWriter%3CL,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;L: <a class [...]
+    W: <a class="trait" href="trait.AppendObjectWrite.html" title="trait opendal::raw::oio::AppendObjectWrite">AppendObjectWrite</a>,</span></h3></section><section id="impl-Write-for-MultipartUploadWriter%3CW%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/write/multipart_upload_write.rs.html#134-266">source</a><a href="#impl-Write-for-MultipartUploadWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl&lt;W&gt; <a class="trait" href="trait.Writ [...]
     W: <a class="trait" href="trait.MultipartUploadWrite.html" title="trait opendal::raw::oio::MultipartUploadWrite">MultipartUploadWrite</a>,</span></h3></section></div><script src="../../../implementors/opendal/raw/oio/write/api/trait.Write.js" data-ignore-extern-crates="std,alloc" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/type.Appender.html b/docs/rust/opendal/raw/oio/type.Appender.html
deleted file mode 100644
index 1f22863bd..000000000
--- a/docs/rust/opendal/raw/oio/type.Appender.html
+++ /dev/null
@@ -1,2 +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="Appender is a type erased `Append`"><title>Appender 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" crossorigin href [...]
-</div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/write/append_object_write/struct.AppendObjectWriter.html b/docs/rust/opendal/raw/oio/write/append_object_write/struct.AppendObjectWriter.html
new file mode 100644
index 000000000..53447e7f6
--- /dev/null
+++ b/docs/rust/opendal/raw/oio/write/append_object_write/struct.AppendObjectWriter.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/struct.AppendObjectWriter.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../../../opendal/raw/oio/struct.AppendObjectWriter.html">../../../../../opendal/raw/oio/struct.AppendObjectWriter.html</a>...</p>
+    <script>location.replace("../../../../../opendal/raw/oio/struct.AppendObjectWriter.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/append/api/trait.Append.html b/docs/rust/opendal/raw/oio/write/append_object_write/trait.AppendObjectWrite.html
similarity index 56%
rename from docs/rust/opendal/raw/oio/append/api/trait.Append.html
rename to docs/rust/opendal/raw/oio/write/append_object_write/trait.AppendObjectWrite.html
index 46c4c6a39..f99abe9a8 100644
--- a/docs/rust/opendal/raw/oio/append/api/trait.Append.html
+++ b/docs/rust/opendal/raw/oio/write/append_object_write/trait.AppendObjectWrite.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/trait.Append.html">
+    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/trait.AppendObjectWrite.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../../../opendal/raw/oio/trait.Append.html">../../../../../opendal/raw/oio/trait.Append.html</a>...</p>
-    <script>location.replace("../../../../../opendal/raw/oio/trait.Append.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../../../opendal/raw/oio/trait.AppendObjectWrite.html">../../../../../opendal/raw/oio/trait.AppendObjectWrite.html</a>...</p>
+    <script>location.replace("../../../../../opendal/raw/oio/trait.AppendObjectWrite.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/append/api/enum.AppendOperation.html b/docs/rust/opendal/raw/oio/write/two_ways_write/enum.TwoWaysWriter.html
similarity index 57%
rename from docs/rust/opendal/raw/oio/append/api/enum.AppendOperation.html
rename to docs/rust/opendal/raw/oio/write/two_ways_write/enum.TwoWaysWriter.html
index 9ba9a421c..849046167 100644
--- a/docs/rust/opendal/raw/oio/append/api/enum.AppendOperation.html
+++ b/docs/rust/opendal/raw/oio/write/two_ways_write/enum.TwoWaysWriter.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/enum.AppendOperation.html">
+    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/enum.TwoWaysWriter.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../../../opendal/raw/oio/enum.AppendOperation.html">../../../../../opendal/raw/oio/enum.AppendOperation.html</a>...</p>
-    <script>location.replace("../../../../../opendal/raw/oio/enum.AppendOperation.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../../../opendal/raw/oio/enum.TwoWaysWriter.html">../../../../../opendal/raw/oio/enum.TwoWaysWriter.html</a>...</p>
+    <script>location.replace("../../../../../opendal/raw/oio/enum.TwoWaysWriter.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/ops/struct.OpAppend.html b/docs/rust/opendal/raw/ops/struct.OpAppend.html
deleted file mode 100644
index cabd276f9..000000000
--- a/docs/rust/opendal/raw/ops/struct.OpAppend.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.OpAppend.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../opendal/raw/struct.OpAppend.html">../../../opendal/raw/struct.OpAppend.html</a>...</p>
-    <script>location.replace("../../../opendal/raw/struct.OpAppend.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/rps/struct.RpAppend.html b/docs/rust/opendal/raw/rps/struct.RpAppend.html
deleted file mode 100644
index 2633bd0ca..000000000
--- a/docs/rust/opendal/raw/rps/struct.RpAppend.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.RpAppend.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../opendal/raw/struct.RpAppend.html">../../../opendal/raw/struct.RpAppend.html</a>...</p>
-    <script>location.replace("../../../opendal/raw/struct.RpAppend.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 a5f6d204b..1597069d7 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","BatchOperation","BatchedReply","Operation","PresignOperation"],"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_err [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"constant":["VERSION"],"enum":["AsyncBody","BatchOperation","BatchedReply","Operation","PresignOperation"],"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_err [...]
\ 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 f1a76fc62..4dbfc44bf 100644
--- a/docs/rust/opendal/raw/struct.AccessorInfo.html
+++ b/docs/rust/opendal/raw/struct.AccessorInfo.html
@@ -1,21 +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="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#517-578">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#524-527">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.71.1/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#530-532">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.71.1/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#537-540">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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/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#491-552">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#498-501">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.71.1/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#504-506">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.71.1/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#511-514">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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/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#548-550">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.71.1/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#522-524">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.71.1/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#553-556">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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.refer [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.native_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#559-561">source</a><h4 class="code-header">pub fn <a href="#method.native_capability" class="fn">native_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 backen [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.full_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#564-566">source</a><h4 class="code-header">pub fn <a href="#method.full_capability" class="fn">full_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 service’s fu [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.full_capability_mut" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#569-571">source</a><h4 class="code-header">pub fn <a href="#method.full_capability_mut" class="fn">full_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="docb [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_full_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#574-577">source</a><h4 class="code-header">pub fn <a href="#method.set_full_capability" class="fn">set_full_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://d [...]
-</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#507">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#527-530">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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.refer [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.native_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#533-535">source</a><h4 class="code-header">pub fn <a href="#method.native_capability" class="fn">native_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 backen [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.full_capability" 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.full_capability" class="fn">full_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 service’s fu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.full_capability_mut" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#543-545">source</a><h4 class="code-header">pub fn <a href="#method.full_capability_mut" class="fn">full_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="docb [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_full_capability" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#548-551">source</a><h4 class="code-header">pub fn <a href="#method.set_full_capability" class="fn">set_full_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://d [...]
+</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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/struct.OpAppend.html b/docs/rust/opendal/raw/struct.OpAppend.html
deleted file mode 100644
index fb9fa4d99..000000000
--- a/docs/rust/opendal/raw/struct.OpAppend.html
+++ /dev/null
@@ -1,29 +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 `append` operation."><title>OpAppend 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-OpAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#479-517">source</a><a href="#impl-OpAppend" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpAppend.html" title="struct ope [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#486-488">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rus [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#491-494">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#497-499">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.71.1/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/raw/ops.rs.html#502-505">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.71.1/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/raw/ops.rs.html#508-510">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc. [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#513-516">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><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-OpAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#472">source</a><a href="#impl-Clone-for-OpAppend" class="anchor">§</a><h3 class="code-header">impl < [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FromRef%3CT%3E-for-OpAppend" class="impl"><a href="#impl-FromRef%3CT%3E-for-OpAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FromRef&lt;T&gt; for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from_ref" class="method trait-impl"><a href="#method.from_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">from_ref</a>(input: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.h [...]
-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-OpAppend" 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-OpAppend" 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-OpAppend" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-OpAppend" class="anchor">§</a><h3 class="code-header"> [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-OpAppend" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-OpAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::request::IntoRequest">In [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-OpAppend" 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.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.OpCopy.html b/docs/rust/opendal/raw/struct.OpCopy.html
index 2018333e0..29a86bf7c 100644
--- a/docs/rust/opendal/raw/struct.OpCopy.html
+++ b/docs/rust/opendal/raw/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::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.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/raw/ops.rs.html#523-528">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/raw/ops.rs.html#520">source</a><a href="#impl-Clone-for-OpCopy" 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="Args for `copy` operation."><title>OpCopy 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.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/raw/ops.rs.html#496-501">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/raw/ops.rs.html#493">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/struct.OpRename.html b/docs/rust/opendal/raw/struct.OpRename.html
index 00c73a7ed..f6d1887f0 100644
--- a/docs/rust/opendal/raw/struct.OpRename.html
+++ b/docs/rust/opendal/raw/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::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-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#534-539">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.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-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#531">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::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-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#507-512">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.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-OpRename" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#504">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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/struct.OpWrite.html b/docs/rust/opendal/raw/struct.OpWrite.html
index bdb44b1c4..0f9744bce 100644
--- a/docs/rust/opendal/raw/struct.OpWrite.html
+++ b/docs/rust/opendal/raw/struct.OpWrite.html
@@ -1,17 +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 `write` operation."><title>OpWrite 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.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/raw/ops.rs.html#413-469">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct openda [...]
+<!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::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.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/raw/ops.rs.html#415-490">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct openda [...]
 <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/raw/ops.rs.html#424-426">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#426-428">source</a><h4 class="code-header">pub fn <a href="#method.append" class="fn">append</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the append from op.</p>
+<p>The append is the flag to indicate that this write operation is an append operation.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_append" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#437-440">source</a><h4 class="code-header">pub fn <a href="#method.with_append" class="fn">with_append</a>(self, append: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the append mode of op.</p>
+<p>If the append mode is set, the data will be appended to the end of the file.</p>
+<h5 id="notes"><a href="#notes">Notes</a></h5>
+<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_length" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#445-447">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.ru [...]
 <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/raw/ops.rs.html#432-435">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.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>S [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_length" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#453-456">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.71.1/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>S [...]
 <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/raw/ops.rs.html#438-440">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rus [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#443-446">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#449-451">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.71.1/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/raw/ops.rs.html#454-457">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.71.1/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/raw/ops.rs.html#460-462">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc. [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#465-468">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#459-461">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rus [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#464-467">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#470-472">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.71.1/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/raw/ops.rs.html#475-478">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.71.1/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/raw/ops.rs.html#481-483">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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#486-489">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.71.1/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><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-OpWrite" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#405">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/raw/struct.RpAppend.html b/docs/rust/opendal/raw/struct.RpAppend.html
deleted file mode 100644
index ad6b53cac..000000000
--- a/docs/rust/opendal/raw/struct.RpAppend.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="Reply for `append` operation."><title>RpAppend 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-RpAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#202-207">source</a><a href="#impl-RpAppend" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RpAppend.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-RpAppend" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/rps.rs.html#199">source</a><a href="#impl-Clone-for-RpAppend" class="anchor">§</a><h3 class="code-header">impl < [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FromRef%3CT%3E-for-RpAppend" class="impl"><a href="#impl-FromRef%3CT%3E-for-RpAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FromRef&lt;T&gt; for T<span class="where fmt-newline">where
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from_ref" class="method trait-impl"><a href="#method.from_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">from_ref</a>(input: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.h [...]
-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-RpAppend" 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-RpAppend" 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-RpAppend" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-RpAppend" class="anchor">§</a><h3 class="code-header"> [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-RpAppend" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-RpAppend" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::request::IntoRequest">In [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-RpAppend" 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.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.RpCopy.html b/docs/rust/opendal/raw/struct.RpCopy.html
index 38ec77f66..a8e6dafc0 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#213-218">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#210">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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/struct.RpRename.html b/docs/rust/opendal/raw/struct.RpRename.html
index 9c030009a..462780bb5 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#224-229">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#221">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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/trait.Accessor.html b/docs/rust/opendal/raw/trait.Accessor.html
index b449c413f..f0ee1f3f1 100644
--- a/docs/rust/opendal/raw/trait.Accessor.html
+++ b/docs/rust/opendal/raw/trait.Accessor.html
@@ -1,13 +1,12 @@
-<!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>;
     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>;
     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>;
-    type <a href="#associatedtype.Appender" class="associatedtype">Appender</a>: <a class="trait" href="oio/trait.Append.html" title="trait opendal::raw::oio::Append">Append</a>;
 
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 20 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
@@ -35,14 +34,6 @@
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span> { ... }
-<span class="item-spacer"></span>    fn <a href="#method.append" class="fn">append</a>&lt;'life0, 'life1, 'async_trait&gt;(
-        &amp;'life0 self,
-        path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.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.71.1/std/primitive.str.html">str</a>,
@@ -178,8 +169,7 @@ basic operations.
 </div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#69">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#72">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> operation.</p>
-</div></details><details class="toggle" open><summary><section id="associatedtype.Appender" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#74">source</a><h4 class="code-header">type <a href="#associatedtype.Appender" class="associatedtype">Appender</a>: <a class="trait" href="oio/trait.Append.html" title="trait opendal::raw::oio::Append">Append</a></h4></section></summary><div class="docblock"><p>Appender is the associated appender that could ret [...]
-</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#87">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 [...]
+</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#85">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>
 <p>By returning AccessorInfo, underlying services can declare
@@ -188,7 +178,7 @@ some useful information about it self.</p>
 <li>scheme: declare the scheme of backend.</li>
 <li>capabilities: declare the capabilities of current backend.</li>
 </ul>
-</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#97-104">source</a><h4 class="code-header">fn <a href="#method.create_dir" class="fn">create_dir</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</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#95-102">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
@@ -202,7 +192,7 @@ some useful information about it self.</p>
 <li>Input path MUST match with EntryMode, DON’T NEED to check mode.</li>
 <li>Create on existing dir SHOULD succeed.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#115-122">source</a><h4 class="code-header">fn <a href="#method.read" class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#113-120">source</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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>
@@ -217,7 +207,7 @@ some useful information about it self.</p>
 <li>Input path MUST be file path, DON’T NEED to check mode.</li>
 <li>The returning content length may be smaller than the range specified.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#132-139">source</a><h4 class="code-header">fn <a href="#method.write" class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#130-137">source</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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>
@@ -231,21 +221,7 @@ written size if operate successful.</p>
 <ul>
 <li>Input path MUST be file path, DON’T NEED to check mode.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#149-156">source</a><h4 class="code-header">fn <a href="#method.append" class="fn">append</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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>append</code> operation on the specified path, returns a
-appended size if operate successful.</p>
-<p>Require <a href="../struct.Capability.html#structfield.append" title="field opendal::Capability::append"><code>Capability::append</code></a></p>
-<h5 id="behavior-3"><a href="#behavior-3">Behavior</a></h5>
-<ul>
-<li>Input path MUST be file path, DON’T NEED to check mode.</li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#167-174">source</a><h4 class="code-header">fn <a href="#method.copy" class="fn">copy</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#148-155">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -262,7 +238,7 @@ appended size if operate successful.</p>
 <li>Copy on existing file SHOULD succeed.</li>
 <li>Copy on existing file SHOULD overwrite and truncate.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#179-186">source</a><h4 class="code-header">fn <a href="#method.rename" class="fn">rename</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#160-167">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -273,7 +249,7 @@ appended size if operate successful.</p>
     'life1: 'async_trait,
     'life2: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>rename</code> operation on the specified <code>from</code> path and <code>to</code> path.</p>
 <p>Require <a href="../struct.Capability.html#structfield.rename" title="field opendal::Capability::rename">Capability::rename</a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#197-204">source</a><h4 class="code-header">fn <a href="#method.stat" class="fn">stat</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#178-185">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>
@@ -282,13 +258,13 @@ appended size if operate successful.</p>
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>stat</code> operation on the specified path.</p>
 <p>Require <a href="../struct.Capability.html#structfield.stat" title="field opendal::Capability::stat"><code>Capability::stat</code></a></p>
-<h5 id="behavior-4"><a href="#behavior-4">Behavior</a></h5>
+<h5 id="behavior-3"><a href="#behavior-3">Behavior</a></h5>
 <ul>
 <li><code>stat</code> empty path means stat backend’s root path.</li>
 <li><code>stat</code> a path endswith “/” means stating a dir.</li>
 <li><code>mode</code> and <code>content_length</code> must be set.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#214-221">source</a><h4 class="code-header">fn <a href="#method.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#195-202">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>
@@ -297,12 +273,12 @@ appended size if operate successful.</p>
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>delete</code> operation on the specified path.</p>
 <p>Require <a href="../struct.Capability.html#structfield.delete" title="field opendal::Capability::delete"><code>Capability::delete</code></a></p>
-<h5 id="behavior-5"><a href="#behavior-5">Behavior</a></h5>
+<h5 id="behavior-4"><a href="#behavior-4">Behavior</a></h5>
 <ul>
 <li><code>delete</code> is an idempotent operation, it’s safe to call <code>Delete</code> on the same path multiple times.</li>
 <li><code>delete</code> SHOULD return <code>Ok(())</code> if the path is deleted successfully or not exist.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#231-238">source</a><h4 class="code-header">fn <a href="#method.list" class="fn">list</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#212-219">source</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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
@@ -311,12 +287,12 @@ appended size if operate successful.</p>
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>list</code> operation on the specified path.</p>
 <p>Require <a href="../struct.Capability.html#structfield.list" title="field opendal::Capability::list"><code>Capability::list</code></a></p>
-<h5 id="behavior-6"><a href="#behavior-6">Behavior</a></h5>
+<h5 id="behavior-5"><a href="#behavior-5">Behavior</a></h5>
 <ul>
 <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.presign" class="method"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#247-254">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#228-235">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpPresign.html" title="struct opendal::raw::OpPresign">OpPresign</a>
@@ -325,42 +301,42 @@ appended size if operate successful.</p>
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Invoke the <code>presign</code> operation on the specified path.</p>
 <p>Require <a href="../struct.Capability.html#structfield.presign" title="field opendal::Capability::presign"><code>Capability::presign</code></a></p>
-<h5 id="behavior-7"><a href="#behavior-7">Behavior</a></h5>
+<h5 id="behavior-6"><a href="#behavior-6">Behavior</a></h5>
 <ul>
 <li>This API is optional, return <a href="https://doc.rust-lang.org/1.71.1/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#259-266">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#240-247">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="struct.OpBatch.html" title="struct opendal::raw::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#273-280">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+</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#254-261">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::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#287-294">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#268-275">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::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#301-308">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#282-289">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::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#315-322">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.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/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#296-303">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.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/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#329-336">source</a><h4 class="code-header">fn <a href="#method.blocking_rename" class="fn">blocking_rename</a>(
+</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#310-317">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -368,55 +344,48 @@ appended size if operate successful.</p>
 ) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpRename.html" title="struct opendal::raw::RpRename">RpRename</a>&gt;</h4></section></summary><div class="docblock"><p>Invoke the <code>blocking_rename</code> operation on the specified <code>from</code> path and <code>to</code> path.</p>
 <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#343-350">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.71.1/std/primitive.str.html">str</a>, args: <a class="struct" href="struct.OpStat.html" title="struct opendal::raw:: [...]
+</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#324-331">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.71.1/std/primitive.str.html">str</a>, args: <a class="struct" href="struct.OpStat.html" title="struct opendal::raw:: [...]
 <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#357-364">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.71.1/std/primitive.str.html">str</a>, args: <a class="struct" href="struct.OpDelete.html" title="struct openda [...]
+</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#338-345">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.71.1/std/primitive.str.html">str</a>, args: <a class="struct" href="struct.OpDelete.html" title="struct openda [...]
 <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#375-382">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#356-363">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::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"><p>Invoke the <code>blocking_list</code> operation on the specified path.</p>
 <p>This operation is the blocking version of <a href="trait.Accessor.html#method.list" title="method opendal::raw::Accessor::list"><code>Accessor::list</code></a></p>
 <p>Require <a href="../struct.Capability.html#structfield.list" title="field opendal::Capability::list"><code>Capability::list</code></a> and <a href="../struct.Capability.html#structfield.blocking" title="field opendal::Capability::blocking"><code>Capability::blocking</code></a></p>
-<h5 id="behavior-8"><a href="#behavior-8">Behavior</a></h5>
+<h5 id="behavior-7"><a href="#behavior-7">Behavior</a></h5>
 <ul>
 <li>List non-exist dir should return Empty.</li>
 </ul>
-</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#387-405">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.71.1/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#368-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.71.1/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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#427-429">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#430-432">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.append-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#434-436">source</a><a href="#method.append-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.append" class="fn">append</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#438-440">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -425,7 +394,7 @@ appended 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#442-444">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -434,58 +403,58 @@ appended 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#446-448">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#449-451">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#452-454">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#456-458">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="struct.OpBatch.html" title="struct opendal::raw::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#460-462">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpPresign.html" title="struct opendal::raw::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#464-466">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>(
+    '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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::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#467-469">source</a><a href="#method.blocking_read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_read" class [...]
+) -&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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::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,
     from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRename.html" title="struct opendal::raw::OpRename">OpRename</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpRename.html" title="struct opendal::raw::RpRename">RpRename</a>&gt;</h4></section><section id="method.blocking_stat-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#482-484">source</a><a href="#method.blocking_stat-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_stat" class="fn">blo [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpRename.html" title="struct opendal::raw::RpRename">RpRename</a>&gt;</h4></section><section id="method.blocking_stat-1" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#457-459">source</a><a href="#method.blocking_stat-1" class="anchor">§</a><h4 class="code-header">fn <a href="#method.blocking_stat" class="fn">blo [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::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></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 5ab3a12cb..883909d26 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
@@ -32,7 +32,6 @@ requires <code>Send</code> and <code>Sync</code>.</p>
     <span class="kw">type </span>BlockingReader = A::BlockingReader;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -64,10 +63,6 @@ requires <code>Send</code> and <code>Sync</code>.</p>
         <span class="self">self</span>.inner.blocking_write(path, args)
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(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, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
         <span class="self">self</span>.inner.list(path, args).<span class="kw">await
     </span>}
@@ -89,6 +84,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#124">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#127">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-AsyncBacktraceLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/async_backtrace.rs.html#48-54">source</a><a href="#impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="anchor">§</a><h3 class="code-header">impl&lt;A: [...]
\ No newline at end of file
+</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#119">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#122">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-AsyncBacktraceLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/async_backtrace.rs.html#48-54">source</a><a href="#impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="anchor">§</a><h3 class="code-header">impl&lt;A: [...]
\ 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 fac2d174e..2a688a8dd 100644
--- a/docs/rust/opendal/raw/trait.LayeredAccessor.html
+++ b/docs/rust/opendal/raw/trait.LayeredAccessor.html
@@ -1,14 +1,13 @@
-<!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>;
     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>;
     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>;
-    type <a href="#associatedtype.Appender" class="associatedtype">Appender</a>: <a class="trait" href="oio/trait.Append.html" title="trait opendal::raw::oio::Append">Append</a>;
     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 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,
@@ -26,14 +25,6 @@
        <span class="where">where Self: 'async_trait,
              'life0: 'async_trait,
              'life1: 'async_trait</span>;
-<span class="item-spacer"></span>    fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'life1, 'async_trait&gt;(
-        &amp;'life0 self,
-        path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-        args: <a class="struct" href="struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.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.71.1/std/primitive.str.html">str</a>,
@@ -139,54 +130,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.71.1/std/primitive.str.html">str</a>, args: <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::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::raw::Rp [...]
 </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#135">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#130">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#156">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#150">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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.append" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#158">source</a><h4 class="code-header">fn <a href="#tymethod.append" class="fn">append</a>&lt;'life0, 'life1, 'async_trait&gt;(
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="struct.OpAppend.html" title="struct opendal::raw::OpAppend">OpAppend</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#176">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#168">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#190">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#182">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::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></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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#160-162">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#152-154">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -195,7 +179,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#164-166">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#156-158">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.71.1/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
@@ -204,39 +188,39 @@ 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#168-170">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#160-162">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#172-174">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#164-166">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#178-180">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#170-172">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="struct.OpBatch.html" title="struct opendal::raw::OpBatch">OpBatch</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#182-184">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#174-176">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpPresign.html" title="struct opendal::raw::OpPresign">OpPresign</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.71.1/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#186-188">source</a><h4 class="code-header">fn <a href="#method.blocking_create_dir" class="fn">blocking_create_dir</a>(
+    '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#178-180">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.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::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#194-196">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 [...]
+) -&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#186-188">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 [...]
     &amp;self,
     from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpRename.html" title="struct opendal::raw::OpRename">OpRename</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.RpRename.html" title="struct opendal::raw::RpRename">RpRename</a>&gt;</h4></section><section id="method.blocking_stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#202-204">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: [...]
\ 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.RpRename.html" title="struct opendal::raw::RpRename">RpRename</a>&gt;</h4></section><section id="method.blocking_stat" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#194-196">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: [...]
\ 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 abdc5d298..4af6b8631 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></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.Azblob.html b/docs/rust/opendal/services/struct.Azblob.html
index eba514287..48cede276 100644
--- a/docs/rust/opendal/services/struct.Azblob.html
+++ b/docs/rust/opendal/services/struct.Azblob.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="Azure Storage Blob services support."><title>Azblob in opendal::services - 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="Azure Storage Blob services support."><title>Azblob in opendal::services - 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=". [...]
 <h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
 <p>This service can be used to:</p>
 <ul>
@@ -75,47 +75,47 @@ az storage container create --name test --connection-string &quot;DefaultEndpoin
     </span><span class="kw">let </span>op: Operator = Operator::new(builder)<span class="question-mark">?</span>.finish();
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#95-350">source</a><a href="#impl-AzblobBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Azblob. [...]
+</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-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#94-349">source</a><a href="#impl-AzblobBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Azblob. [...]
 <p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.container" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#108-112">source</a><h4 class="code-header">pub fn <a href="#method.container" class="fn">container</a>(&amp;mut self, container: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#120-127">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.container" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#107-111">source</a><h4 class="code-header">pub fn <a href="#method.container" class="fn">container</a>(&amp;mut self, container: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#119-126">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/ [...]
 <p>Endpoint must be full uri, e.g.</p>
 <ul>
 <li>Azblob: <code>https://accountname.blob.core.windows.net</code></li>
 <li>Azurite: <code>http://127.0.0.1:10000/devstoreaccount1</code></li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.account_name" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#133-139">source</a><h4 class="code-header">pub fn <a href="#method.account_name" class="fn">account_name</a>(&amp;mut self, account_name: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.account_name" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#132-138">source</a><h4 class="code-header">pub fn <a href="#method.account_name" class="fn">account_name</a>(&amp;mut self, account_name: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang [...]
 <ul>
 <li>If account_name is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.account_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#145-151">source</a><h4 class="code-header">pub fn <a href="#method.account_key" class="fn">account_key</a>(&amp;mut self, account_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.account_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#144-150">source</a><h4 class="code-header">pub fn <a href="#method.account_key" class="fn">account_key</a>(&amp;mut self, account_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org [...]
 <ul>
 <li>If account_key is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#165-171">source</a><h4 class="code-header">pub fn <a href="#method.encryption_key" class="fn">encryption_key</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#164-170">source</a><h4 class="code-header">pub fn <a href="#method.encryption_key" class="fn">encryption_key</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/ [...]
 <h5 id="args"><a href="#args">Args</a></h5>
 <p><code>v</code>: Base64-encoded key that matches algorithm specified in <code>encryption_algorithm</code>.</p>
 <h5 id="note"><a href="#note">Note</a></h5>
 <p>This function is the low-level setting for SSE related features.</p>
 <p>SSE related options should be set carefully to make them works.
 Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_key_sha256" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#185-191">source</a><h4 class="code-header">pub fn <a href="#method.encryption_key_sha256" class="fn">encryption_key_sha256</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_key_sha256" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#184-190">source</a><h4 class="code-header">pub fn <a href="#method.encryption_key_sha256" class="fn">encryption_key_sha256</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https [...]
 <h5 id="args-1"><a href="#args-1">Args</a></h5>
 <p><code>v</code>: Base64-encoded SHA256 digest of the key specified in encryption_key.</p>
 <h5 id="note-1"><a href="#note-1">Note</a></h5>
 <p>This function is the low-level setting for SSE related features.</p>
 <p>SSE related options should be set carefully to make them works.
 Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_algorithm" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#205-211">source</a><h4 class="code-header">pub fn <a href="#method.encryption_algorithm" class="fn">encryption_algorithm</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https:// [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.encryption_algorithm" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#204-210">source</a><h4 class="code-header">pub fn <a href="#method.encryption_algorithm" class="fn">encryption_algorithm</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https:// [...]
 <h5 id="args-2"><a href="#args-2">Args</a></h5>
 <p><code>v</code>: server-side encryption algorithm. (Available values: <code>AES256</code>)</p>
 <h5 id="note-2"><a href="#note-2">Note</a></h5>
 <p>This function is the low-level setting for SSE related features.</p>
 <p>SSE related options should be set carefully to make them works.
 Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#226-232">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_key" class="fn">server_side_encryption_with_customer_key</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#225-231">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_key" class="fn">server_side_encryption_with_customer_key</a>(
     &amp;mut self,
     key: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u8</a>]
 ) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with customer key.</p>
@@ -126,19 +126,19 @@ Please use <code>server_side_encryption_with_*</code> helpers if even possible.<
 <p>Function that helps the user to set the server-side customer-provided encryption key, the key’s SHA256, and the algorithm.
 See <a href="https://learn.microsoft.com/en-us/azure/storage/blobs/encryption-customer-provided-keys">Server-side encryption with customer-provided keys (CPK)</a>
 for more info.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.sas_token" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#241-247">source</a><h4 class="code-header">pub fn <a href="#method.sas_token" class="fn">sas_token</a>(&amp;mut self, sas_token: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.sas_token" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#240-246">source</a><h4 class="code-header">pub fn <a href="#method.sas_token" class="fn">sas_token</a>(&amp;mut self, sas_token: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/ [...]
 <ul>
 <li>If sas_token is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
 <p>See <a href="https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview">Grant limited access to Azure Storage resources using shared access signatures (SAS)</a>
 for more info.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#255-258">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#254-257">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#261-265">source</a><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(&amp;mut self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primiti [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.from_connection_string" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#294-349">source</a><h4 class="code-header">pub fn <a href="#method.from_connection_string" class="fn">from_connection_string</a>(conn: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../type.Result.html [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#260-264">source</a><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(&amp;mut self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primiti [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.from_connection_string" class="method"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#293-348">source</a><h4 class="code-header">pub fn <a href="#method.from_connection_string" class="fn">from_connection_string</a>(conn: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../type.Result.html [...]
 <p>connection string looks like:</p>
 <div class="example-wrap"><pre class="language-txt"><code>DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
 AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
@@ -156,7 +156,7 @@ EndpointSuffix=core.chinacloudapi.cn;
 <h5 id="note-4"><a href="#note-4">Note</a></h5>
 <p>connection string only configures the endpoint, account name and account key.
 User still needs to configure bucket names.</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-Builder-for-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#352-473">source</a><a href="#impl-Builder-for-AzblobBuilder" class="anchor">§ [...]
+</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-Builder-for-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#351-472">source</a><a href="#impl-Builder-for-AzblobBuilder" class="anchor">§ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/services/struct.Cos.html b/docs/rust/opendal/services/struct.Cos.html
index a406c0cfd..79dcb19e6 100644
--- a/docs/rust/opendal/services/struct.Cos.html
+++ b/docs/rust/opendal/services/struct.Cos.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="Tencent-Cloud COS services support."><title>Cos in opendal::services - 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="Tencent-Cloud COS services support."><title>Cos in opendal::services - 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="../.. [...]
 <h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
 <p>This service can be used to:</p>
 <ul>
@@ -60,39 +60,39 @@ blocking</li>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#70-158">source</a><a href="#impl-CosBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Cos.html" title= [...]
+</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-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#69-157">source</a><a href="#impl-CosBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Cos.html" title= [...]
 <p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#89-95">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#88-94">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primi [...]
 <p>NOTE: no bucket or account id in endpoint, we will trim them if exists.</p>
 <h5 id="examples"><a href="#examples">Examples</a></h5>
 <ul>
 <li><code>https://cos.ap-singapore.myqcloud.com</code></li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#100-106">source</a><h4 class="code-header">pub fn <a href="#method.secret_id" class="fn">secret_id</a>(&amp;mut self, secret_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#99-105">source</a><h4 class="code-header">pub fn <a href="#method.secret_id" class="fn">secret_id</a>(&amp;mut self, secret_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/ [...]
 <ul>
 <li>If it is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#111-117">source</a><h4 class="code-header">pub fn <a href="#method.secret_key" class="fn">secret_key</a>(&amp;mut self, secret_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#110-116">source</a><h4 class="code-header">pub fn <a href="#method.secret_key" class="fn">secret_key</a>(&amp;mut self, secret_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1 [...]
 <ul>
 <li>If it is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#121-127">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.r [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#120-126">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.r [...]
 The param is required.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#131-135">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#130-134">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
 Reference: <a href="https://www.tencentcloud.com/document/product/436/7750">Upload Part | Tencent Cloud</a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_config_load" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#143-146">source</a><h4 class="code-header">pub fn <a href="#method.disable_config_load" class="fn">disable_config_load</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_config_load" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#142-145">source</a><h4 class="code-header">pub fn <a href="#method.disable_config_load" class="fn">disable_config_load</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class [...]
 environment.</p>
 <p>For examples:</p>
 <ul>
 <li>envs like <code>TENCENTCLOUD_SECRET_ID</code></li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#154-157">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#153-156">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</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-Builder-for-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#160-259">source</a><a href="#impl-Builder-for-CosBuilder" class="anchor">§</a><h3 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-Builder-for-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#159-258">source</a><a href="#impl-Builder-for-CosBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/services/struct.Fs.html b/docs/rust/opendal/services/struct.Fs.html
index 8ebfc40ff..d761c9c4f 100644
--- a/docs/rust/opendal/services/struct.Fs.html
+++ b/docs/rust/opendal/services/struct.Fs.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="POSIX file system support."><title>Fs in opendal::services - 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 [...]
+<!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="POSIX file system support."><title>Fs in opendal::services - 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 [...]
 <h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
 <p>This service can be used to:</p>
 <ul>
@@ -53,14 +53,14 @@ blocking</li>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#46-80">source</a><a href="#impl-FsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Fs.html" title="stru [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.atomic_write_dir" class="method"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#59-67">source</a><h4 class="code-header">pub fn <a href="#method.atomic_write_dir" class="fn">atomic_write_dir</a>(&amp;mut self, dir: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.or [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_path_check" class="method"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#75-79">source</a><h4 class="code-header">pub fn <a href="#method.enable_path_check" class="fn">enable_path_check</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docbloc [...]
+</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-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#45-79">source</a><a href="#impl-FsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Fs.html" title="stru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.atomic_write_dir" class="method"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#58-66">source</a><h4 class="code-header">pub fn <a href="#method.atomic_write_dir" class="fn">atomic_write_dir</a>(&amp;mut self, dir: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.or [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_path_check" class="method"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#74-78">source</a><h4 class="code-header">pub fn <a href="#method.enable_path_check" class="fn">enable_path_check</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docbloc [...]
 behavior is consistent. By enable path check, we can make sure
 fs will behave the same as other services.</p>
 <p>Enabling this feature will lead to extra metadata call in all
 operations.</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-Builder-for-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#82-171">source</a><a href="#impl-Builder-for-FsBuilder" class="anchor">§</a><h3 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-Builder-for-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#81-170">source</a><a href="#impl-Builder-for-FsBuilder" class="anchor">§</a><h3 class [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/services/struct.Hdfs.html b/docs/rust/opendal/services/struct.Hdfs.html
index e28205f5a..6c363d021 100644
--- a/docs/rust/opendal/services/struct.Hdfs.html
+++ b/docs/rust/opendal/services/struct.Hdfs.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="Hadoop Distributed File System (HDFS™) support. A distributed file system that provides high-throughput access to application data."><title>Hdfs in opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46 [...]
+<!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="Hadoop Distributed File System (HDFS™) support. A distributed file system that provides high-throughput access to application data."><title>Hdfs in opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46 [...]
 A distributed file system that provides high-throughput access to application data.</p>
 <h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
 <p>This service can be used to:</p>
@@ -107,21 +107,21 @@ append</li>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#46-92">source</a><a href="#impl-HdfsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Hdfs.html" tit [...]
+</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-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#45-91">source</a><a href="#impl-HdfsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Hdfs.html" tit [...]
 <p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.name_node" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#66-73">source</a><h4 class="code-header">pub fn <a href="#method.name_node" class="fn">name_node</a>(&amp;mut self, name_node: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.name_node" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#65-72">source</a><h4 class="code-header">pub fn <a href="#method.name_node" class="fn">name_node</a>(&amp;mut self, name_node: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/ [...]
 <p>Valid format including:</p>
 <ul>
 <li><code>default</code>: using the default setting based on hadoop config.</li>
 <li><code>hdfs://127.0.0.1:9000</code>: connect to hdfs cluster.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.kerberos_ticket_cache_path" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#78-83">source</a><h4 class="code-header">pub fn <a href="#method.kerberos_ticket_cache_path" class="fn">kerberos_ticket_cache_path</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.kerberos_ticket_cache_path" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#77-82">source</a><h4 class="code-header">pub fn <a href="#method.kerberos_ticket_cache_path" class="fn">kerberos_ticket_cache_path</a>(
     &amp;mut self,
     kerberos_ticket_cache_path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>
 ) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Set kerberos_ticket_cache_path of this backend</p>
 <p>This should be configured when kerberos is enabled.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.user" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#86-91">source</a><h4 class="code-header">pub fn <a href="#method.user" class="fn">user</a>(&amp;mut self, user: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference. [...]
-</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-Builder-for-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#94-149">source</a><a href="#impl-Builder-for-HdfsBuilder" class="anchor">§</a><h3 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user" class="method"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#85-90">source</a><h4 class="code-header">pub fn <a href="#method.user" class="fn">user</a>(&amp;mut self, user: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference. [...]
+</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-Builder-for-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#93-148">source</a><a href="#impl-Builder-for-HdfsBuilder" class="anchor">§</a><h3 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/services/struct.Obs.html b/docs/rust/opendal/services/struct.Obs.html
index d135f7231..e30516dc6 100644
--- a/docs/rust/opendal/services/struct.Obs.html
+++ b/docs/rust/opendal/services/struct.Obs.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="Huawei-Cloud Object Storage Service (OBS) support"><title>Obs in opendal::services - 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" crossorig [...]
-</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-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#124-202">source</a><a href="#impl-ObsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Obs.html" title [...]
+<!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="Huawei-Cloud Object Storage Service (OBS) support"><title>Obs in opendal::services - 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" crossorig [...]
+</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-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#123-201">source</a><a href="#impl-ObsBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Obs.html" title [...]
 <p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#144-150">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/pri [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#143-149">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/pri [...]
 <p>Both huaweicloud default domain and user domain endpoints are allowed.
 Please DO NOT add the bucket name to the endpoint.</p>
 <ul>
@@ -9,25 +9,25 @@ Please DO NOT add the bucket name to the endpoint.</p>
 <li><code>obs.cn-north-4.myhuaweicloud.com</code> (https by default)</li>
 <li><code>https://custom.obs.com</code> (port should not be set)</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#155-161">source</a><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(&amp;mut self, access_key_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#154-160">source</a><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(&amp;mut self, access_key_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
 <ul>
 <li>If it is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_access_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#166-172">source</a><h4 class="code-header">pub fn <a href="#method.secret_access_key" class="fn">secret_access_key</a>(&amp;mut self, secret_access_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="http [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_access_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#165-171">source</a><h4 class="code-header">pub fn <a href="#method.secret_access_key" class="fn">secret_access_key</a>(&amp;mut self, secret_access_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="http [...]
 <ul>
 <li>If it is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#176-182">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.r [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#175-181">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.r [...]
 The param is required.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#190-193">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#189-192">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#197-201">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#196-200">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
 Reference: <a href="https://support.huaweicloud.com/intl/en-us/api-obs/obs_04_0099.html">Huawei Obs multipart upload limits</a></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-Builder-for-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#204-322">source</a><a href="#impl-Builder-for-ObsBuilder" class="anchor">§</a><h3 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-Builder-for-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#203-321">source</a><a href="#impl-Builder-for-ObsBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/services/struct.Oss.html b/docs/rust/opendal/services/struct.Oss.html
index 0390bf3a1..09e2995ec 100644
--- a/docs/rust/opendal/services/struct.Oss.html
+++ b/docs/rust/opendal/services/struct.Oss.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="Aliyun Object Storage Service (OSS) support"><title>Oss in opendal::services - 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="Aliyun Object Storage Service (OSS) support"><title>Oss in opendal::services - 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 [...]
 <h2 id="capabilities"><a href="#capabilities">Capabilities</a></h2>
 <p>This service can be used to:</p>
 <ul>
@@ -75,11 +75,11 @@ blocking</li>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</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-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#80-251">source</a><a href="#impl-OssBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Oss.html" title= [...]
+</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-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#79-250">source</a><a href="#impl-OssBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Oss.html" title= [...]
 <p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#95-99">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.ref [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#102-109">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/pri [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#119-126">source</a><h4 class="code-header">pub fn <a href="#method.presign_endpoint" class="fn">presign_endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#94-98">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.ref [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#101-108">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/pri [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#118-125">source</a><h4 class="code-header">pub fn <a href="#method.presign_endpoint" class="fn">presign_endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust [...]
 <p>You can offer a public endpoint like <a href="https://oss-cn-beijing.aliyuncs.com">https://oss-cn-beijing.aliyuncs.com</a> to return a presinged url for
 public accessors, along with an internal endpoint like <a href="https://oss-cn-beijing-internal.aliyuncs.com">https://oss-cn-beijing-internal.aliyuncs.com</a>
 to access objects in a faster path.</p>
@@ -87,21 +87,21 @@ to access objects in a faster path.</p>
 <li>If presign_endpoint is set, we will use presign_endpoint on generating presigned urls.</li>
 <li>if not, we will use endpoint as default.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#132-138">source</a><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#131-137">source</a><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.71.1 [...]
 <ul>
 <li>If access_key_id is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_secret" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#144-150">source</a><h4 class="code-header">pub fn <a href="#method.access_key_secret" class="fn">access_key_secret</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_secret" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#143-149">source</a><h4 class="code-header">pub fn <a href="#method.access_key_secret" class="fn">access_key_secret</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
 <ul>
 <li>If access_key_secret is set, we will take user’s input first.</li>
 <li>If not, we will try to load it from environment.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#158-161">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#157-160">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lan [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#218-223">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption" class="fn">server_side_encryption</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#217-222">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption" class="fn">server_side_encryption</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https [...]
 <p>Available values: <code>AES256</code>, <code>KMS</code>.</p>
 <p>Reference: <a href="https://www.alibabacloud.com/help/en/object-storage-service/latest/server-side-encryption-5">https://www.alibabacloud.com/help/en/object-storage-service/latest/server-side-encryption-5</a>
 Brief explanation:
@@ -115,13 +115,13 @@ SSE-KMS:
 or not specify the specific CMK ID for OSS-managed KMS key.
 3. Include the <code>x-oss-server-side-encryption</code> parameter in the request and set its value to KMS.
 4. If a specific CMK ID is specified, include the <code>x-oss-server-side-encryption-key-id</code> parameter in the request, and set its value to the specified CMK ID.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#230-235">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_key_id" class="fn">server_side_encryption_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="p [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_key_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#229-234">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_key_id" class="fn">server_side_encryption_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="p [...]
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This option only takes effect when server_side_encryption equals to KMS.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#239-243">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#238-242">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
 Reference: <a href="https://www.alibabacloud.com/help/en/object-storage-service/latest/multipart-upload-6">OSS Multipart upload</a></p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#246-250">source</a><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(&amp;mut self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" [...]
-</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-Builder-for-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#253-377">source</a><a href="#impl-Builder-for-OssBuilder" class="anchor">§</a><h3 c [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#245-249">source</a><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(&amp;mut self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" [...]
+</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-Builder-for-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#252-376">source</a><a href="#impl-Builder-for-OssBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/sidebar-items.js b/docs/rust/opendal/sidebar-items.js
index 2c6a2d66d..d35194f93 100644
--- a/docs/rust/opendal/sidebar-items.js
+++ b/docs/rust/opendal/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["EntryMode","ErrorKind","Metakey","Scheme"],"mod":["docs","layers","operator_functions","operator_futures","raw","services"],"struct":["Appender","BlockingLister","BlockingOperator","BlockingReader","BlockingWriter","Capability","Entry","Error","Lister","Metadata","Operator","OperatorBuilder","OperatorInfo","Reader","Writer"],"trait":["Builder"],"type":["Result"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["EntryMode","ErrorKind","Metakey","Scheme"],"mod":["docs","layers","operator_functions","operator_futures","raw","services"],"struct":["BlockingLister","BlockingOperator","BlockingReader","BlockingWriter","Capability","Entry","Error","Lister","Metadata","Operator","OperatorBuilder","OperatorInfo","Reader","Writer"],"trait":["Builder"],"type":["Result"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.Appender.html b/docs/rust/opendal/struct.Appender.html
deleted file mode 100644
index 4dbcf68e4..000000000
--- a/docs/rust/opendal/struct.Appender.html
+++ /dev/null
@@ -1,150 +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="Appender is designed to append data into given path in an asynchronous manner."><title>Appender 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" type=" [...]
-manner.</p>
-<h3 id="notes"><a href="#notes">Notes</a></h3>
-<p>Please make sure either `close`` has been called before
-dropping the appender otherwise the data could be lost.</p>
-<h3 id="notes-1"><a href="#notes-1">Notes</a></h3>
-<p>Appender always append data into the end of the file, so it’s not
-possible to overwrite existing data.</p>
-<p>Appender did not know the size of the data to be written, so it will
-always be <code>unsized</code>.</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-Appender" class="impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#58-102">source</a><a href="#impl-Appender" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Appender.html" title="struct  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#92-101">source</a><h4 class="code-header">pub async fn <a href="#method.close" class="fn">close</a>(&amp;mut 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.71.1/std/primitive.unit.html">()</a>&gt;</h4></sec [...]
-<h6 id="notes-2"><a href="#notes-2">Notes</a></h6>
-<p>Close should only be called when the appender is not closed,
-otherwise an unexpected error could be returned.</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-AsyncWrite-for-Appender" class="impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#188-252">source</a><a href="#impl-AsyncWrite-for-Appender" class="anchor">§</a><h3 class="c [...]
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
-    buf: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.71.1/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
-their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_shutdown" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#226-251">source</a><a href="#method.poll_shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_shutdown</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a [...]
-the I/O connection has completely shut down. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write_vectored" class="method trait-impl"><a href="#method.poll_write_vectored" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write_vectored</a>(
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
-    bufs: &amp;[<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'_&gt;]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-implementation. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Appender-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#121-186">source</a><a href="#impl-AsyncWrite-for-Appender-1" class="anchor">§</a><h3 class="code-header">impl AsyncWrite for <a class="struct" href="struct.Appender.html" title="struct opendal::Appender">Appender</a></h3></section></summar [...]
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
-    buf: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.71.1/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
-their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_close" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#160-185">source</a><a href="#method.poll_close" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_close</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a c [...]
-    self: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;mut Self</a>&gt;,
-    cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
-    bufs: &amp;[<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'_&gt;]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.71.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.71.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-IO operations. <a>Read more</a></div></details></div></details><section id="impl-Sync-for-Appender" class="impl"><a class="srclink rightside" href="../src/opendal/types/appender.rs.html#56">source</a><a href="#impl-Sync-for-Appender" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.Appender.html" title="struct opendal::Appender" [...]
-<p>Appender will only be accessed by <code>&amp;mut Self</code></p>
-</div></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-Appender" class="impl"><a href="#impl-RefUnwindSafe-for-Appender" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.71.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwi [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
-    W: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.flush" class="method trait-impl"><a href="#method.flush" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) -&gt; Flush&lt;'_, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Creates a future which will entirely flush this <code>AsyncWrite</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.close-1" class="method trait-impl"><a href="#method.close-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Creates a future which will entirely close this <code>AsyncWrite</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'a&gt;( [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Creates a future which will write bytes from <code>buf</code> into the object. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored" class="method trait-impl"><a href="#method.write_vectored" class="anchor">§</a><h4 class="code-head [...]
-    &amp;'a mut self,
-    bufs: &amp;'a [<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'a&gt;]
-) -&gt; WriteVectored&lt;'a, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Creates a future which will write bytes from <code>bufs</code> into the object using vectored
-IO operations. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all" class="method trait-impl"><a href="#method.write_all" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_all</a>&lt;'a&gt;(&amp;'a mut self, buf: &amp;'a [<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u8</a>]) -&gt; WriteAll&lt;'a, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Write data into this object. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_sink" class="method trait-impl"><a href="#method.into_sink" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_sink</a>&lt;Item&gt;(self) -&gt; I [...]
-    Item: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;[<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u8</a>]&gt;,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Allow using an [<code>AsyncWrite</code>] as a <a href="futures_sink::Sink"><code>Sink</code></a><code>&lt;Item: AsRef&lt;[u8]&gt;&gt;</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-AsyncWriteExt-for-Appender-1" class=" [...]
-    W: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.write-1" class="method trait-impl"><a href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'a&gt;(&amp;'a mut self, src: &amp;'a [<a class="primitive" href="https://doc. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a buffer into this writer, returning how many bytes were
-written. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored-1" class="method trait-impl"><a href="#method.write_vectored-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_vectored</a>&lt;'a, 'b&gt;(
-    &amp;'a mut self,
-    bufs: &amp;'a [<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'b&gt;]
-) -&gt; WriteVectored&lt;'a, 'b, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Like <a href="AsyncWriteExt::write"><code>write</code></a>, except that it writes from a slice of buffers. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_buf" class="method trait-impl"><a href="#method.write_buf" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,
-    B: Buf,</span></h4></section></summary><div class='docblock'>Writes a buffer into this writer, advancing the buffer’s internal
-cursor. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all_buf" class="method trait-impl"><a href="#method.write_all_buf" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_all_buf</a>&lt;B, 'a&gt;(
-    &amp;'a mut self,
-    src: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.html">&amp;'a mut B</a>
-) -&gt; WriteAllBuf&lt;'a, Self, B&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,
-    B: Buf,</span></h4></section></summary><div class='docblock'>Attempts to write an entire buffer into this writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all-1" class="method trait-impl"><a href="#method.write_all-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_all</a>&lt;'a&gt;(&amp;'a mut self, src: &amp;'a [<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u8.html">u [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Attempts to write an entire buffer into this writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u8" class="method trait-impl"><a href="#method.write_u8" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u8</a>&lt;' [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 8-bit integer to the underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i8" class="method trait-impl"><a href="#method.write_i8" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i8</a [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a signed 8-bit integer to the underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u16" class="method trait-impl"><a href="#method.write_u16" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u16</a [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 16-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i16" class="method trait-impl"><a href="#method.write_i16" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i16</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i16.html">i16</a>) -&gt; WriteI16&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a signed 16-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u32" class="method trait-impl"><a href="#method.write_u32" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u32</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u32.html">u32</a>) -&gt; WriteU32&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 32-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i32" class="method trait-impl"><a href="#method.write_i32" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i32</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i32.html">i32</a>) -&gt; WriteI32&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a signed 32-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u64" class="method trait-impl"><a href="#method.write_u64" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u64</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; WriteU64&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 64-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i64" class="method trait-impl"><a href="#method.write_i64" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i64</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i64.html">i64</a>) -&gt; WriteI64&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an signed 64-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u128" class="method trait-impl"><a href="#method.write_u128" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u128</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u128.html">u128</a>) -&gt; WriteU128&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.referen [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 128-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i128" class="method trait-impl"><a href="#method.write_i128" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i128</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i128.html">i128</a>) -&gt; WriteI128&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.referen [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an signed 128-bit integer in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_f32" class="method trait-impl"><a href="#method.write_f32" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_f32</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f32.html">f32</a>) -&gt; WriteF32&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an 32-bit floating point type in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_f64" class="method trait-impl"><a href="#method.write_f64" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_f64</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f64.html">f64</a>) -&gt; WriteF64&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.reference.htm [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an 64-bit floating point type in big-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u16_le" class="method trait-impl"><a href="#method.write_u16_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u16_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u16.html">u16</a>) -&gt; WriteU16Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 16-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i16_le" class="method trait-impl"><a href="#method.write_i16_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i16_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i16.html">i16</a>) -&gt; WriteI16Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a signed 16-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u32_le" class="method trait-impl"><a href="#method.write_u32_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u32_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u32.html">u32</a>) -&gt; WriteU32Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 32-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i32_le" class="method trait-impl"><a href="#method.write_i32_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i32_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i32.html">i32</a>) -&gt; WriteI32Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a signed 32-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u64_le" class="method trait-impl"><a href="#method.write_u64_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u64_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u64.html">u64</a>) -&gt; WriteU64Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 64-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i64_le" class="method trait-impl"><a href="#method.write_i64_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i64_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i64.html">i64</a>) -&gt; WriteI64Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an signed 64-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_u128_le" class="method trait-impl"><a href="#method.write_u128_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_u128_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.u128.html">u128</a>) -&gt; WriteU128Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primit [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an unsigned 128-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_i128_le" class="method trait-impl"><a href="#method.write_i128_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_i128_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.i128.html">i128</a>) -&gt; WriteI128Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primit [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an signed 128-bit integer in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_f32_le" class="method trait-impl"><a href="#method.write_f32_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_f32_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f32.html">f32</a>) -&gt; WriteF32Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an 32-bit floating point type in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_f64_le" class="method trait-impl"><a href="#method.write_f64_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_f64_le</a>&lt;'a&gt;(&amp;'a mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.f64.html">f64</a>) -&gt; WriteF64Le&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.re [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an 64-bit floating point type in little-endian order to the
-underlying writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flush-1" class="method trait-impl"><a href="#method.flush-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) -&gt; Flush&lt;'_, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Flushes this output stream, ensuring that all intermediately buffered
-contents reach their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.shutdown" class="method trait-impl"><a href="#method.shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">shutdown</a>(&amp;mut self) -&gt; Shutdown&lt;'_, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Shuts down the output stream, ensuring that the value can be dropped
-cleanly. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-AsyncWriteExt-for-Appender-2" class="impl"><a href="#impl-AsyncWriteExt-for-Appender-2" class="anchor">§</a><h3 class="code-header">impl&lt;W&gt; AsyncWriteExt for W<span class="where fmt-newline">where
-    W: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.write-3" class="method trait-impl"><a href="#method.write-3" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'a&gt;(&amp;'a mut self, buf: &amp;'a [<a class="primitive" href="https://doc. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes some bytes into the byte stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored-3" class="method trait-impl"><a href="#method.write_vectored-3" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_vectored [...]
-    &amp;'a mut self,
-    bufs: &amp;'a [<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'a&gt;]
-) -&gt; WriteVectoredFuture&lt;'a, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Like [<code>write()</code>][<code>AsyncWriteExt::write()</code>], except that it writes a slice of buffers. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all-3" class="method trait-impl"><a href="#method.write_all-3" class="anchor">§< [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an entire buffer into the byte stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flush-3" class="method trait-impl"><a href="#method.flush-3" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) - [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Flushes the stream to ensure that all buffered contents reach their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.close-2" class="method trait-impl"><a href="#method.close-2" class="anchor">§</a><h4 class="code-header">fn <a cl [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Closes the writer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.boxed_writer" class="method trait-impl"><a href="#method.boxed_writer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">boxed_writer</a>&lt;'a&gt;(self) -&gt; <a c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + 'a,</span></h4></section></summary><div class='docblock'>Boxes the writer and changes its type to <code>dyn AsyncWrite + Send + 'a</code>. <a>Read more</a></div></details></div></details><details class="toggle implementor [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-Appender" class="impl"><a href="#impl-FutureExt-for-Appender" 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-Appender" 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-Appender" 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-Appender" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#707">source</a><a href="#impl-Into%3CU%3E-for-Appender" class="anchor">§</a><h3 class="code-header"> [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/convert/mod.rs.html#716">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.71.1/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-IntoRequest%3CT%3E-for-Appender" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-Appender" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::request::IntoRequest">In [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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-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.71.1/core/convert/trait.TryFrom.html#associatedtype.Error" cla [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.71.1/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" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.71.1/core/convert/trait.TryInto.html#associatedtype.Error [...]
-    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-Appender" 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.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-<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><details class="toggle implementors-toggle"><summary><section id="impl-WriteExt-for-Appender" class="impl"><a href="#impl-WriteExt-for-Appender" class="ancho [...]
-    T: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.write-2" class="method trait-impl"><a href="#method.write-2" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'a&gt;(&amp;'a mut self, buf: &amp;'a [<a class="primitive" href="https://doc. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes some bytes into the byte stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.flush-2" class="method trait-impl"><a href="#method.flush-2" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) -&gt; F [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Flushes the stream to ensure that all buffered contents reach their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored-2" class="method trait-impl"><a href="#method.write_vectored-2" class="anchor">§</a><h4 class="cod [...]
-    &amp;'a mut self,
-    bufs: &amp;'a [<a class="struct" href="https://doc.rust-lang.org/1.71.1/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'a&gt;]
-) -&gt; WriteVectoredFuture&lt;'a, Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Like <a href="#tymethod.write"><code>write</code></a>, except that it writes from a slice of buffers. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all-2" class="method trait-impl"><a href="#method.write_all-2" class="anchor">§</a><h4 [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes an entire buffer into the byte stream. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_fmt" class="method trait-impl"><a href="#method.write_fmt" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write_fmt</a>&lt;'a&gt [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Writes a formatted string into this writer, returning any error encountered. <a>Read more</a></div></details></div></details></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.Capability.html b/docs/rust/opendal/struct.Capability.html
index 893fecdd2..5f245278b 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.71.1/std/primitive.bool.html">bool</a>,
     pub stat_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub stat_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
@@ -12,15 +12,12 @@
     pub read_with_override_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub read_with_override_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
+    pub write_can_append: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write_can_sink: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write_without_content_length: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub write_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
-    pub append: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
-    pub append_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
-    pub append_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
-    pub append_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub create_dir: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub delete: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
     pub copy: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a>,
@@ -61,50 +58,47 @@ returned by services.</p>
 <li>Operation with arguments should be named like <code>read_with_range</code>.</li>
 <li>Operation with limitations should be named like <code>batch_max_operations</code>.</li>
 </ul>
-</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.stat" class="structfield small-section-header"><a href="#structfield.stat" class="anchor field">§</a><code>stat: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat natively, it will be true.</p>
-</div><span id="structfield.stat_with_if_match" class="structfield small-section-header"><a href="#structfield.stat_with_if_match" class="anchor field">§</a><code>stat_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat with if match natively, it will be true.</p>
-</div><span id="structfield.stat_with_if_none_match" class="structfield small-section-header"><a href="#structfield.stat_with_if_none_match" class="anchor field">§</a><code>stat_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat with if none match natively, it will be true.</p>
-</div><span id="structfield.read" class="structfield small-section-header"><a href="#structfield.read" class="anchor field">§</a><code>read: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read natively, it will be true.</p>
-</div><span id="structfield.read_can_seek" class="structfield small-section-header"><a href="#structfield.read_can_seek" class="anchor field">§</a><code>read_can_seek: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports seek on returning reader natively, it will
+</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.stat" class="structfield small-section-header"><a href="#structfield.stat" class="anchor field">§</a><code>stat: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat , it will be true.</p>
+</div><span id="structfield.stat_with_if_match" class="structfield small-section-header"><a href="#structfield.stat_with_if_match" class="anchor field">§</a><code>stat_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat with if match , it will be true.</p>
+</div><span id="structfield.stat_with_if_none_match" class="structfield small-section-header"><a href="#structfield.stat_with_if_none_match" class="anchor field">§</a><code>stat_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports stat with if none match , it will be true.</p>
+</div><span id="structfield.read" class="structfield small-section-header"><a href="#structfield.read" class="anchor field">§</a><code>read: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read , it will be true.</p>
+</div><span id="structfield.read_can_seek" class="structfield small-section-header"><a href="#structfield.read_can_seek" class="anchor field">§</a><code>read_can_seek: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports seek on returning reader , it will
 be true.</p>
-</div><span id="structfield.read_can_next" class="structfield small-section-header"><a href="#structfield.read_can_next" class="anchor field">§</a><code>read_can_next: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports next on returning reader natively, it will
+</div><span id="structfield.read_can_next" class="structfield small-section-header"><a href="#structfield.read_can_next" class="anchor field">§</a><code>read_can_next: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports next on returning reader , it will
 be true.</p>
-</div><span id="structfield.read_with_range" class="structfield small-section-header"><a href="#structfield.read_with_range" class="anchor field">§</a><code>read_with_range: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with range natively, it will be true.</p>
-</div><span id="structfield.read_with_if_match" class="structfield small-section-header"><a href="#structfield.read_with_if_match" class="anchor field">§</a><code>read_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with if match natively, it will be true.</p>
-</div><span id="structfield.read_with_if_none_match" class="structfield small-section-header"><a href="#structfield.read_with_if_none_match" class="anchor field">§</a><code>read_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with if none match natively, it will be true.</p>
-</div><span id="structfield.read_with_override_cache_control" class="structfield small-section-header"><a href="#structfield.read_with_override_cache_control" class="anchor field">§</a><code>read_with_override_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override cache control natively, it will be true.</p>
-</div><span id="structfield.read_with_override_content_disposition" class="structfield small-section-header"><a href="#structfield.read_with_override_content_disposition" class="anchor field">§</a><code>read_with_override_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override content disposition natively, it will be true.</p>
-</div><span id="structfield.read_with_override_content_type" class="structfield small-section-header"><a href="#structfield.read_with_override_content_type" class="anchor field">§</a><code>read_with_override_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override content type natively, it will be true.</p>
-</div><span id="structfield.write" class="structfield small-section-header"><a href="#structfield.write" class="anchor field">§</a><code>write: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write natively, it will be true.</p>
+</div><span id="structfield.read_with_range" class="structfield small-section-header"><a href="#structfield.read_with_range" class="anchor field">§</a><code>read_with_range: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with range , it will be true.</p>
+</div><span id="structfield.read_with_if_match" class="structfield small-section-header"><a href="#structfield.read_with_if_match" class="anchor field">§</a><code>read_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with if match , it will be true.</p>
+</div><span id="structfield.read_with_if_none_match" class="structfield small-section-header"><a href="#structfield.read_with_if_none_match" class="anchor field">§</a><code>read_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports read with if none match , it will be true.</p>
+</div><span id="structfield.read_with_override_cache_control" class="structfield small-section-header"><a href="#structfield.read_with_override_cache_control" class="anchor field">§</a><code>read_with_override_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override cache control , it will be true.</p>
+</div><span id="structfield.read_with_override_content_disposition" class="structfield small-section-header"><a href="#structfield.read_with_override_content_disposition" class="anchor field">§</a><code>read_with_override_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override content disposition , it will be true.</p>
+</div><span id="structfield.read_with_override_content_type" class="structfield small-section-header"><a href="#structfield.read_with_override_content_type" class="anchor field">§</a><code>read_with_override_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>if operator supports read with override content type , it will be true.</p>
+</div><span id="structfield.write" class="structfield small-section-header"><a href="#structfield.write" class="anchor field">§</a><code>write: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write , it will be true.</p>
+</div><span id="structfield.write_can_append" class="structfield small-section-header"><a href="#structfield.write_can_append" class="anchor field">§</a><code>write_can_append: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write by append, it will be true.</p>
 </div><span id="structfield.write_can_sink" class="structfield small-section-header"><a href="#structfield.write_can_sink" class="anchor field">§</a><code>write_can_sink: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write by sink a stream into, it will be true.</p>
 </div><span id="structfield.write_without_content_length" class="structfield small-section-header"><a href="#structfield.write_without_content_length" class="anchor field">§</a><code>write_without_content_length: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with without content length, it will
 be true.</p>
 <p>This feature also be called as <code>Unsized</code> write or streaming write.</p>
-</div><span id="structfield.write_with_content_type" class="structfield small-section-header"><a href="#structfield.write_with_content_type" class="anchor field">§</a><code>write_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content type natively, it will be true.</p>
-</div><span id="structfield.write_with_content_disposition" class="structfield small-section-header"><a href="#structfield.write_with_content_disposition" class="anchor field">§</a><code>write_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content disposition natively, it will be true.</p>
-</div><span id="structfield.write_with_cache_control" class="structfield small-section-header"><a href="#structfield.write_with_cache_control" class="anchor field">§</a><code>write_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with cache control natively, it will be true.</p>
-</div><span id="structfield.append" class="structfield small-section-header"><a href="#structfield.append" class="anchor field">§</a><code>append: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports append natively, it will be true.</p>
-</div><span id="structfield.append_with_content_type" class="structfield small-section-header"><a href="#structfield.append_with_content_type" class="anchor field">§</a><code>append_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports append with content type natively, it will be true.</p>
-</div><span id="structfield.append_with_content_disposition" class="structfield small-section-header"><a href="#structfield.append_with_content_disposition" class="anchor field">§</a><code>append_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports append with content disposition natively, it will be true.</p>
-</div><span id="structfield.append_with_cache_control" class="structfield small-section-header"><a href="#structfield.append_with_cache_control" class="anchor field">§</a><code>append_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports append with cache control natively, it will be true.</p>
-</div><span id="structfield.create_dir" class="structfield small-section-header"><a href="#structfield.create_dir" class="anchor field">§</a><code>create_dir: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports create dir natively, it will be true.</p>
-</div><span id="structfield.delete" class="structfield small-section-header"><a href="#structfield.delete" class="anchor field">§</a><code>delete: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports delete natively, it will be true.</p>
-</div><span id="structfield.copy" class="structfield small-section-header"><a href="#structfield.copy" class="anchor field">§</a><code>copy: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports copy natively, it will be true.</p>
-</div><span id="structfield.rename" class="structfield small-section-header"><a href="#structfield.rename" class="anchor field">§</a><code>rename: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports rename natively, it will be true.</p>
-</div><span id="structfield.list" class="structfield small-section-header"><a href="#structfield.list" class="anchor field">§</a><code>list: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports list natively, it will be true.</p>
+</div><span id="structfield.write_with_content_type" class="structfield small-section-header"><a href="#structfield.write_with_content_type" class="anchor field">§</a><code>write_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content type , it will be true.</p>
+</div><span id="structfield.write_with_content_disposition" class="structfield small-section-header"><a href="#structfield.write_with_content_disposition" class="anchor field">§</a><code>write_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content disposition , it will be true.</p>
+</div><span id="structfield.write_with_cache_control" class="structfield small-section-header"><a href="#structfield.write_with_cache_control" class="anchor field">§</a><code>write_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with cache control , it will be true.</p>
+</div><span id="structfield.create_dir" class="structfield small-section-header"><a href="#structfield.create_dir" class="anchor field">§</a><code>create_dir: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports create dir , it will be true.</p>
+</div><span id="structfield.delete" class="structfield small-section-header"><a href="#structfield.delete" class="anchor field">§</a><code>delete: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports delete , it will be true.</p>
+</div><span id="structfield.copy" class="structfield small-section-header"><a href="#structfield.copy" class="anchor field">§</a><code>copy: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports copy , it will be true.</p>
+</div><span id="structfield.rename" class="structfield small-section-header"><a href="#structfield.rename" class="anchor field">§</a><code>rename: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports rename , it will be true.</p>
+</div><span id="structfield.list" class="structfield small-section-header"><a href="#structfield.list" class="anchor field">§</a><code>list: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports list , it will be true.</p>
 </div><span id="structfield.list_with_limit" class="structfield small-section-header"><a href="#structfield.list_with_limit" class="anchor field">§</a><code>list_with_limit: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend supports list with limit, it will 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.71.1/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.71.1/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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If backend supports list without delimiter.</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.71.1/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.71.1/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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign stat natively, it will be true.</p>
-</div><span id="structfield.presign_write" class="structfield small-section-header"><a href="#structfield.presign_write" class="anchor field">§</a><code>presign_write: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign write natively, it will be true.</p>
-</div><span id="structfield.batch" class="structfield small-section-header"><a href="#structfield.batch" class="anchor field">§</a><code>batch: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports batch natively, it will 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.71.1/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.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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign , 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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign read , 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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign stat , it will be true.</p>
+</div><span id="structfield.presign_write" class="structfield small-section-header"><a href="#structfield.presign_write" class="anchor field">§</a><code>presign_write: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports presign write , it will be true.</p>
+</div><span id="structfield.batch" class="structfield small-section-header"><a href="#structfield.batch" class="anchor field">§</a><code>batch: <a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports batch , it will 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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports batch delete , 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.71.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/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.71.1/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><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.71.1/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports blocking , 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 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/struct.Error.html b/docs/rust/opendal/struct.Error.html
index 3af8421a1..5bb894df7 100644
--- a/docs/rust/opendal/struct.Error.html
+++ b/docs/rust/opendal/struct.Error.html
@@ -68,7 +68,7 @@ Backtrace:
 <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#406-408">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#411-413">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.71.1/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#277-317">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#277-317">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.71.1/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.71.1/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.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.71.1/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"><a class="srclink rightside" href="https://doc.rust-lang.org/1.71.1/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index 5792a12e8..8ed0e3425 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.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="Operator is the entry for all public async APIs."><title>Operator 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" 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="Operator is the entry for all public async APIs."><title>Operator 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" type="font/woff2" crossorigin href=" [...]
 <p>Developer should manipulate the data from storage service through Operator only by right.</p>
 <p>We will usually do some general checks and data transformations in this layer,
 like normalizing path from input, checking whether the path refers to one file or one directory, and so on.
@@ -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-1497">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-1337">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.71.1/std/primitive.unit.html"> [...]
 <p>We will send a <code>list</code> request to path and return any errors we met.</p>
 
@@ -142,50 +142,39 @@ reading data lazily, please use <a href="struct.Operator.html#method.range_reade
 <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="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#560-563">source</a><h4 class="code-header">pub async fn <a href="#method.append" class="fn">append</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/convert/tra [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#560-596">source</a><h4 class="code-header">pub async fn <a href="#method.copy" class="fn">copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str. [...]
 <h5 id="notes-6"><a href="#notes-6">Notes</a></h5>
 <ul>
-<li>Append will make sure all bytes has been written, or an error will be returned.</li>
-<li>Append will create the file if it does not exist.</li>
-<li>Append always write bytes to the end of the file.</li>
-</ul>
-<h5 id="examples-12"><a href="#examples-12">Examples</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
-
-op.append(<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="kw">await</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/operator.rs.html#586-622">source</a><h4 class="code-header">pub async fn <a href="#method.copy" class="fn">copy</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str. [...]
-<h5 id="notes-7"><a href="#notes-7">Notes</a></h5>
-<ul>
 <li><code>from</code> and <code>to</code> must be a file.</li>
 <li><code>to</code> will be overwritten if it exists.</li>
 <li>If <code>from</code> and <code>to</code> are the same,  an <code>IsSameFile</code> error will occur.</li>
 <li><code>copy</code> is idempotent. For same <code>from</code> and <code>to</code> input, the result will be the same.</li>
 </ul>
-<h5 id="examples-13"><a href="#examples-13">Examples</a></h5>
+<h5 id="examples-12"><a href="#examples-12">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="kw">await</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/operator.rs.html#644-680">source</a><h4 class="code-header">pub async fn <a href="#method.rename" class="fn">rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitiv [...]
-<h5 id="notes-8"><a href="#notes-8">Notes</a></h5>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#618-654">source</a><h4 class="code-header">pub async fn <a href="#method.rename" class="fn">rename</a>(&amp;self, from: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, to: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitiv [...]
+<h5 id="notes-7"><a href="#notes-7">Notes</a></h5>
 <ul>
 <li><code>from</code> and <code>to</code> must be a file.</li>
 <li><code>to</code> will be overwritten if it exists.</li>
 <li>If <code>from</code> and <code>to</code> are the same, an <code>IsSameFile</code> error will occur.</li>
 </ul>
-<h5 id="examples-14"><a href="#examples-14">Examples</a></h5>
+<h5 id="examples-13"><a href="#examples-13">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="kw">await</span><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/operator.rs.html#704-706">source</a><h4 class="code-header">pub async fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#678-680">source</a><h4 class="code-header">pub async fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
 <p>Refer to <a href="struct.Writer.html" title="struct opendal::Writer"><code>Writer</code></a> for more details.</p>
-<h5 id="examples-15"><a href="#examples-15">Examples</a></h5>
+<h5 id="examples-14"><a href="#examples-14">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
 
 <span class="kw">let </span><span class="kw-2">mut </span>w = op.writer(<span class="string">&quot;path/to/file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;
 w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</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="kw">await</span><span class="question-mark">?</span>;
 w.close().<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.writer_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#733-759">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureWriter.html" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#707-733">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureWriter.html" [...]
 <p>Refer to <a href="struct.Writer.html" title="struct opendal::Writer"><code>Writer</code></a> for more details.</p>
-<h5 id="examples-16"><a href="#examples-16">Examples</a></h5>
+<h5 id="examples-15"><a href="#examples-15">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
 
 <span class="kw">let </span><span class="kw-2">mut </span>w = op
@@ -195,12 +184,12 @@ w.close().<span class="kw">await</span><span class="question-mark">?</span>;</co
 w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</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="kw">await</span><span class="question-mark">?</span>;
 w.close().<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.write_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#784-814">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.71.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/conve [...]
-<h5 id="notes-9"><a href="#notes-9">Notes</a></h5>
+</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/operator.rs.html#758-788">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.71.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/conve [...]
+<h5 id="notes-8"><a href="#notes-8">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
 </ul>
-<h5 id="examples-17"><a href="#examples-17">Examples</a></h5>
+<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">use </span>bytes::Bytes;
 
 <span class="kw">let </span>bs = <span class="string">b&quot;hello, world!&quot;</span>.to_vec();
@@ -208,84 +197,48 @@ w.close().<span class="kw">await</span><span class="question-mark">?</span>;</co
     .write_with(<span class="string">&quot;path/to/file&quot;</span>, bs)
     .content_type(<span class="string">&quot;text/plain&quot;</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.appender" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#836-838">source</a><h4 class="code-header">pub async fn <a href="#method.appender" class="fn">appender</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
-<p>Refer to <a href="struct.Appender.html" title="struct opendal::Appender"><code>Appender</code></a> for more details.</p>
-<h5 id="examples-18"><a href="#examples-18">Examples</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
-
-<span class="kw">let </span><span class="kw-2">mut </span>a = op.appender(<span class="string">&quot;path/to/file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;
-a.append(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
-a.append(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
-a.close().<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.appender_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#863-890">source</a><h4 class="code-header">pub fn <a href="#method.appender_with" class="fn">appender_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureAppend [...]
-<p>Refer to <a href="struct.Appender.html" title="struct opendal::Appender"><code>Appender</code></a> for more details.</p>
-<h5 id="examples-19"><a href="#examples-19">Examples</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
-
-<span class="kw">let </span><span class="kw-2">mut </span>a = op
-    .appender_with(<span class="string">&quot;path/to/file&quot;</span>)
-    .content_type(<span class="string">&quot;application/octet-stream&quot;</span>)
-    .<span class="kw">await</span><span class="question-mark">?</span>;
-a.append(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
-a.append(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
-a.close().<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.append_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#917-948">source</a><h4 class="code-header">pub fn <a href="#method.append_with" class="fn">append_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/co [...]
-<h5 id="notes-10"><a href="#notes-10">Notes</a></h5>
-<ul>
-<li>Append will make sure all bytes has been written, or an error will be returned.</li>
-<li>Append will create the file if it does not exist.</li>
-<li>Append always write bytes to the end of the file.</li>
-</ul>
-<h5 id="examples-20"><a href="#examples-20">Examples</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
-
-<span class="kw">let </span>bs = <span class="string">b&quot;hello, world!&quot;</span>.to_vec();
-<span class="kw">let _ </span>= op
-    .append_with(<span class="string">&quot;path/to/file&quot;</span>, bs)
-    .content_type(<span class="string">&quot;text/plain&quot;</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.delete" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#968-970">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
-<h5 id="notes-11"><a href="#notes-11">Notes</a></h5>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#808-810">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
+<h5 id="notes-9"><a href="#notes-9">Notes</a></h5>
 <ul>
 <li>Deleting a file that does not exist won’t return errors.</li>
 </ul>
-<h5 id="examples-21"><a href="#examples-21">Examples</a></h5>
+<h5 id="examples-17"><a href="#examples-17">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">&quot;test&quot;</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.delete_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#991-1009">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureDelete.html [...]
-<h5 id="notes-12"><a href="#notes-12">Notes</a></h5>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#831-849">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureDelete.html" [...]
+<h5 id="notes-10"><a href="#notes-10">Notes</a></h5>
 <ul>
 <li>Deleting a file that does not exist won’t return errors.</li>
 </ul>
-<h5 id="examples-22"><a href="#examples-22">Examples</a></h5>
+<h5 id="examples-18"><a href="#examples-18">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>
 op.delete_with(<span class="string">&quot;test&quot;</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.remove" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1031-1033">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&amp;self, paths: <a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#871-873">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&amp;self, paths: <a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1. [...]
 <p>If underlying services support delete in batch, we will use batch
 delete instead.</p>
-<h5 id="examples-23"><a href="#examples-23">Examples</a></h5>
+<h5 id="examples-19"><a href="#examples-19">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove(<span class="macro">vec!</span>[<span class="string">&quot;abc&quot;</span>.to_string(), <span class="string">&quot;def&quot;</span>.to_string()])
     .<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.remove_via" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1061-1090">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#901-930">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(
     &amp;self,
     input: impl Stream&lt;Item = <a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/1.71.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>
 ) -&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.71.1/std/primitive.unit.html">()</a>&gt;</h4></section></summary><div class="docblock"><p>remove will remove files via the given paths.</p>
 <p>remove_via will remove files via the given stream.</p>
 <p>We will delete by chunks with given batch limit on the stream.</p>
-<h5 id="notes-14"><a href="#notes-14">Notes</a></h5>
+<h5 id="notes-12"><a href="#notes-12">Notes</a></h5>
 <p>If underlying services support delete in batch, we will use batch
 delete instead.</p>
-<h5 id="examples-24"><a href="#examples-24">Examples</a></h5>
+<h5 id="examples-20"><a href="#examples-20">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::stream;
 <span class="kw">let </span>stream = stream::iter(<span class="macro">vec!</span>[<span class="string">&quot;abc&quot;</span>.to_string(), <span class="string">&quot;def&quot;</span>.to_string()]);
 op.remove_via(stream).<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.remove_all" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1112-1160">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal:: [...]
-<h5 id="notes-15"><a href="#notes-15">Notes</a></h5>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#952-1000">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::R [...]
+<h5 id="notes-13"><a href="#notes-13">Notes</a></h5>
 <p>If underlying services support delete in batch, we will use batch
 delete instead.</p>
-<h5 id="examples-25"><a href="#examples-25">Examples</a></h5>
+<h5 id="examples-21"><a href="#examples-21">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove_all(<span class="string">&quot;path/to/dir&quot;</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.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1210-1212">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a> [...]
-<h5 id="notes-16"><a href="#notes-16">Notes</a></h5><h6 id="listing-recursively"><a href="#listing-recursively">Listing recursively</a></h6>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1050-1052">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a> [...]
+<h5 id="notes-14"><a href="#notes-14">Notes</a></h5><h6 id="listing-recursively"><a href="#listing-recursively">Listing recursively</a></h6>
 <p>This function only read the children of the given directory. To read
 all entries recursively, use <code>Operator::list_with(&quot;path&quot;).delimiter(&quot;&quot;)</code>
 instead.</p>
@@ -298,7 +251,7 @@ a streaming way.</p>
 <h6 id="metadata"><a href="#metadata">Metadata</a></h6>
 <p>The only metadata that is guaranteed to be available is the <code>Mode</code>.
 For fetching more metadata, please use <a href="struct.Operator.html#method.list_with" title="method opendal::Operator::list_with"><code>Operator::list_with</code></a> and <code>metakey</code>.</p>
-<h5 id="examples-26"><a href="#examples-26">Examples</a></h5>
+<h5 id="examples-22"><a href="#examples-22">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::EntryMode;
 <span class="kw">use </span>opendal::Metakey;
 <span class="kw">use </span>opendal::Operator;
@@ -314,8 +267,8 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         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#1293-1320">source</a><h4 class="code-header">pub 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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureList.html" title [...]
-<h5 id="notes-17"><a href="#notes-17">Notes</a></h5><h6 id="for-streaming"><a href="#for-streaming">For streaming</a></h6>
+</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#1133-1160">source</a><h4 class="code-header">pub 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.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureList.html" title [...]
+<h5 id="notes-15"><a href="#notes-15">Notes</a></h5><h6 id="for-streaming"><a href="#for-streaming">For streaming</a></h6>
 <p>This function will read all entries in the given directory. It could
 take very long time and consume a lot of memory if the directory
 contains a lot of entries.</p>
@@ -324,7 +277,7 @@ a streaming way.</p>
 <h6 id="metadata-1"><a href="#metadata-1">Metadata</a></h6>
 <p>The only metadata that is guaranteed to be available is the <code>Mode</code>.
 For fetching more metadata, please specify the <code>metakey</code>.</p>
-<h5 id="examples-27"><a href="#examples-27">Examples</a></h5><h6 id="list-entries-with-prefix"><a href="#list-entries-with-prefix">List entries with prefix</a></h6>
+<h5 id="examples-23"><a href="#examples-23">Examples</a></h5><h6 id="list-entries-with-prefix"><a href="#list-entries-with-prefix">List entries with prefix</a></h6>
 <p>This function can also be used to list entries in recursive way.</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::EntryMode;
@@ -366,17 +319,17 @@ For fetching more metadata, please specify the <code>metakey</code>.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1367-1369">source</a><h4 class="code-header">pub async fn <a href="#method.lister" class="fn">lister</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Resu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1207-1209">source</a><h4 class="code-header">pub async fn <a href="#method.lister" class="fn">lister</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Resu [...]
 <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="notes-18"><a href="#notes-18">Notes</a></h5><h6 id="listing-recursively-1"><a href="#listing-recursively-1">Listing recursively</a></h6>
+<h5 id="notes-16"><a href="#notes-16">Notes</a></h5><h6 id="listing-recursively-1"><a href="#listing-recursively-1">Listing recursively</a></h6>
 <p>This function only read the children of the given directory. To read
 all entries recursively, use <a href="struct.Operator.html#method.lister_with" title="method opendal::Operator::lister_with"><code>Operator::lister_with</code></a> and <code>delimiter(&quot;&quot;)</code>
 instead.</p>
 <h6 id="metadata-2"><a href="#metadata-2">Metadata</a></h6>
 <p>The only metadata that is guaranteed to be available is the <code>Mode</code>.
 For fetching more metadata, please use <a href="struct.Operator.html#method.lister_with" title="method opendal::Operator::lister_with"><code>Operator::lister_with</code></a> and <code>metakey</code>.</p>
-<h5 id="examples-28"><a href="#examples-28">Examples</a></h5>
+<h5 id="examples-24"><a href="#examples-24">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::TryStreamExt;
 <span class="kw">use </span>opendal::EntryMode;
 <span class="kw">use </span>opendal::Metakey;
@@ -393,10 +346,10 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1471-1496">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureLister.htm [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1311-1336">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.71.1/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="operator_futures/struct.FutureLister.htm [...]
 <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-29"><a href="#examples-29">Examples</a></h5><h6 id="list-current-dir"><a href="#list-current-dir">List current dir</a></h6>
+<h5 id="examples-25"><a href="#examples-25">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::EntryMode;
 <span class="kw">use </span>opendal::Metakey;
@@ -459,8 +412,8 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         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#1500-1678">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#1522-1529">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#1340-1518">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#1362-1369">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.71.1/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -479,7 +432,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         .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#1557-1564">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#1397-1404">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.71.1/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -500,7 +453,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
 </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#1587-1604">source</a><h4 class="code-header">pub 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#1427-1444">source</a><h4 class="code-header">pub 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.71.1/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -518,7 +471,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         .presign_read_with(<span class="string">&quot;test.txt&quot;</span>, Duration::from_secs(<span class="number">3600</span>))
         .override_content_disposition(<span class="string">&quot;attachment; filename=\&quot;othertext.txt\&quot;&quot;</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#1632-1634">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#1472-1474">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.71.1/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -539,7 +492,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
 </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#1660-1677">source</a><h4 class="code-header">pub 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#1500-1517">source</a><h4 class="code-header">pub 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.71.1/std/primitive.str.html">str</a>,
     expire: <a class="struct" href="https://doc.rust-lang.org/1.71.1/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>
@@ -582,7 +535,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
 </div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#78-81">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;(ab: B) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class [...]
 <p>OpenDAL will call <code>builder.build()</code> internally, so we don’t need
 to import <code>opendal::Builder</code> trait.</p>
-<h5 id="examples-30"><a href="#examples-30">Examples</a></h5>
+<h5 id="examples-26"><a href="#examples-26">Examples</a></h5>
 <p>Read more backend init examples in <a href="https://github.com/apache/incubator-opendal/tree/main/examples">examples</a>.</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::services::Fs;
@@ -604,12 +557,12 @@ to import <code>opendal::Builder</code> trait.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#115-120">source</a><h4 class="code-header">pub fn <a href="#method.from_map" class="fn">from_map</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;(
     map: <a class="struct" href="https://doc.rust-lang.org/1.71.1/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/1.71.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;
 ) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.OperatorBuilder.html" title="struct opendal::OperatorBuilder">OperatorBuilder</a>&lt;impl <a class="trait" href="raw/trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;&gt;</h4></section></summary><div class="docblock"><p>Create a new operator from given map.</p>
-<h5 id="notes-19"><a href="#notes-19">Notes</a></h5>
+<h5 id="notes-17"><a href="#notes-17">Notes</a></h5>
 <p>from_map is using static dispatch layers which is zero cost. via_map is
 using dynamic dispatch layers which has a bit runtime overhead with an
 extra vtable lookup and unable to inline. But from_map requires generic
 type parameter which is not always easy to be used.</p>
-<h5 id="examples-31"><a href="#examples-31">Examples</a></h5>
+<h5 id="examples-27"><a href="#examples-27">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::collections::HashMap;
 
 <span class="kw">use </span>opendal::services::Fs;
@@ -629,12 +582,12 @@ type parameter which is not always easy to be used.</p>
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.via_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#154-236">source</a><h4 class="code-header">pub fn <a href="#method.via_map" class="fn">via_map</a>(scheme: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, map: <a class="struct" href="https://doc.rust-lang.org/1.71.1/std/collections/hash/map/struct.HashMap.html" tit [...]
-<h5 id="notes-20"><a href="#notes-20">Notes</a></h5>
+<h5 id="notes-18"><a href="#notes-18">Notes</a></h5>
 <p>from_map is using static dispatch layers which is zero cost. via_map is
 using dynamic dispatch layers which has a bit runtime overhead with an
 extra vtable lookup and unable to inline. But from_map requires generic
 type parameter which is not always easy to be used.</p>
-<h5 id="examples-32"><a href="#examples-32">Examples</a></h5>
+<h5 id="examples-28"><a href="#examples-28">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::collections::HashMap;
 
 <span class="kw">use </span>opendal::Operator;
@@ -654,13 +607,13 @@ type parameter which is not always easy to be used.</p>
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#268-272">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;<a class="type" href="raw/type.FusedAccessor.html" title="type opendal::raw::FusedAccessor">FusedAccessor</a [...]
-<h5 id="notes-21"><a href="#notes-21">Notes</a></h5>
+<h5 id="notes-19"><a href="#notes-19">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
 bit runtime overhead with an extra vtable lookup and unable to
 inline.</p>
 <p>It’s always recommended to use <code>OperatorBuilder::layer()</code> instead.</p>
-<h5 id="examples-33"><a href="#examples-33">Examples</a></h5>
+<h5 id="examples-29"><a href="#examples-29">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::layers::LoggingLayer;
 <span class="kw">use </span>opendal::services::Fs;
 <span class="kw">use </span>opendal::Operator;
@@ -689,4 +642,4 @@ wrapper. <a>Read more</a></div></details></div></details><details class="toggle
     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-Operator" 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.71.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
 <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></div><script type="text/json" id="notable-traits-data">{"FutureAppend":"<h3>Notable traits for <code><a class=\"struct\" href=\"operator_futures/struct.Futu [...]
\ No newline at end of file
+<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></div><script type="text/json" id="notable-traits-data">{"FutureDelete":"<h3>Notable traits for <code><a class=\"struct\" href=\"operator_futures/struct.Futu [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 0cc8e064c..640b278d8 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -22,4 +22,4 @@ We also promise that every public API will provide detailed documentation.</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.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/1.71. [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.build" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(&amp;mut self) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.Builder.html#associatedtype.Accessor" title="type opendal::Builder::Acce [...]
 </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-Builder-for-()" class="impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#52-62">source</a><a href="#impl-Builder-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Builder.html" title="trait opendal::Bu [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/types/appender/struct.Appender.html b/docs/rust/opendal/types/appender/struct.Appender.html
deleted file mode 100644
index b0373588d..000000000
--- a/docs/rust/opendal/types/appender/struct.Appender.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../opendal/struct.Appender.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../opendal/struct.Appender.html">../../../opendal/struct.Appender.html</a>...</p>
-    <script>location.replace("../../../opendal/struct.Appender.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppend.html b/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppend.html
deleted file mode 100644
index 1deef94bc..000000000
--- a/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppend.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/operator_futures/struct.FutureAppend.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../../opendal/operator_futures/struct.FutureAppend.html">../../../../opendal/operator_futures/struct.FutureAppend.html</a>...</p>
-    <script>location.replace("../../../../opendal/operator_futures/struct.FutureAppend.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppender.html b/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppender.html
deleted file mode 100644
index 057c68197..000000000
--- a/docs/rust/opendal/types/operator/operator_futures/struct.FutureAppender.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/operator_futures/struct.FutureAppender.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../../opendal/operator_futures/struct.FutureAppender.html">../../../../opendal/operator_futures/struct.FutureAppender.html</a>...</p>
-    <script>location.replace("../../../../opendal/operator_futures/struct.FutureAppender.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 b039db9b2..9b3dd1886 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":"QNDNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNDLLLMLMMMLLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/source-files.js b/docs/rust/source-files.js
index 9ad8e892f..8bf02c51a 100644
--- a/docs/rust/source-files.js
+++ b/docs/rust/source-files.js
@@ -1,4 +1,4 @@
 var sourcesIndex = JSON.parse('{\
-"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs"]],["raw",[["adapters", [...]
+"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs"]],["raw",[["adapters", [...]
 }');
 createSourceSidebar();
diff --git a/docs/rust/src/opendal/layers/async_backtrace.rs.html b/docs/rust/src/opendal/layers/async_backtrace.rs.html
index 04aaabfa3..1b129220a 100644
--- a/docs/rust/src/opendal/layers/async_backtrace.rs.html
+++ b/docs/rust/src/opendal/layers/async_backtrace.rs.html
@@ -129,12 +129,6 @@
 <a href="#129" id="129">129</a>
 <a href="#130" id="130">130</a>
 <a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
 </pre></div><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
@@ -202,7 +196,6 @@
     <span class="kw">type </span>BlockingReader = A::BlockingReader;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -220,11 +213,6 @@
         <span class="self">self</span>.inner.write(path, args).<span class="kw">await
     </span>}
 
-    <span class="attr">#[async_backtrace::framed]
-    </span><span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
-    </span>}
-
     <span class="attr">#[async_backtrace::framed]
     </span><span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner.copy(from, to, args).<span class="kw">await
diff --git a/docs/rust/src/opendal/layers/await_tree.rs.html b/docs/rust/src/opendal/layers/await_tree.rs.html
index 54c77a94a..3777183fb 100644
--- a/docs/rust/src/opendal/layers/await_tree.rs.html
+++ b/docs/rust/src/opendal/layers/await_tree.rs.html
@@ -155,14 +155,6 @@
 <a href="#155" id="155">155</a>
 <a href="#156" id="156">156</a>
 <a href="#157" id="157">157</a>
-<a href="#158" id="158">158</a>
-<a href="#159" id="159">159</a>
-<a href="#160" id="160">160</a>
-<a href="#161" id="161">161</a>
-<a href="#162" id="162">162</a>
-<a href="#163" id="163">163</a>
-<a href="#164" id="164">164</a>
-<a href="#165" id="165">165</a>
 </pre></div><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
@@ -238,7 +230,6 @@
     <span class="kw">type </span>BlockingReader = A::BlockingReader;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -260,13 +251,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .instrument_await(<span class="macro">format!</span>(<span class="string">&quot;opendal::{}&quot;</span>, Operation::Append))
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner()
             .copy(from, to, args)
diff --git a/docs/rust/src/opendal/layers/blocking.rs.html b/docs/rust/src/opendal/layers/blocking.rs.html
index 30346886c..b3adf6399 100644
--- a/docs/rust/src/opendal/layers/blocking.rs.html
+++ b/docs/rust/src/opendal/layers/blocking.rs.html
@@ -250,11 +250,6 @@
 <a href="#250" id="250">250</a>
 <a href="#251" id="251">251</a>
 <a href="#252" id="252">252</a>
-<a href="#253" id="253">253</a>
-<a href="#254" id="254">254</a>
-<a href="#255" id="255">255</a>
-<a href="#256" id="256">256</a>
-<a href="#257" id="257">257</a>
 </pre></div><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
@@ -328,7 +323,6 @@
     <span class="kw">type </span>BlockingReader = BlockingWrapper&lt;A::Reader&gt;;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = BlockingWrapper&lt;A::Writer&gt;;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = BlockingWrapper&lt;A::Pager&gt;;
 
@@ -354,10 +348,6 @@
         <span class="self">self</span>.inner.write(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner.copy(from, to, args).<span class="kw">await
     </span>}
diff --git a/docs/rust/src/opendal/layers/chaos.rs.html b/docs/rust/src/opendal/layers/chaos.rs.html
index 6a0c78085..2f0362070 100644
--- a/docs/rust/src/opendal/layers/chaos.rs.html
+++ b/docs/rust/src/opendal/layers/chaos.rs.html
@@ -225,11 +225,6 @@
 <a href="#225" id="225">225</a>
 <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>
 </pre></div><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
@@ -338,7 +333,6 @@
     <span class="kw">type </span>BlockingReader = ChaosReader&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -367,10 +361,6 @@
         <span class="self">self</span>.inner.blocking_write(path, args)
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(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, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
         <span class="self">self</span>.inner.list(path, args).<span class="kw">await
     </span>}
diff --git a/docs/rust/src/opendal/layers/complete.rs.html b/docs/rust/src/opendal/layers/complete.rs.html
index 70913d9df..ae5ddd943 100644
--- a/docs/rust/src/opendal/layers/complete.rs.html
+++ b/docs/rust/src/opendal/layers/complete.rs.html
@@ -992,73 +992,6 @@
 <a href="#992" id="992">992</a>
 <a href="#993" id="993">993</a>
 <a href="#994" id="994">994</a>
-<a href="#995" id="995">995</a>
-<a href="#996" id="996">996</a>
-<a href="#997" id="997">997</a>
-<a href="#998" id="998">998</a>
-<a href="#999" id="999">999</a>
-<a href="#1000" id="1000">1000</a>
-<a href="#1001" id="1001">1001</a>
-<a href="#1002" id="1002">1002</a>
-<a href="#1003" id="1003">1003</a>
-<a href="#1004" id="1004">1004</a>
-<a href="#1005" id="1005">1005</a>
-<a href="#1006" id="1006">1006</a>
-<a href="#1007" id="1007">1007</a>
-<a href="#1008" id="1008">1008</a>
-<a href="#1009" id="1009">1009</a>
-<a href="#1010" id="1010">1010</a>
-<a href="#1011" id="1011">1011</a>
-<a href="#1012" id="1012">1012</a>
-<a href="#1013" id="1013">1013</a>
-<a href="#1014" id="1014">1014</a>
-<a href="#1015" id="1015">1015</a>
-<a href="#1016" id="1016">1016</a>
-<a href="#1017" id="1017">1017</a>
-<a href="#1018" id="1018">1018</a>
-<a href="#1019" id="1019">1019</a>
-<a href="#1020" id="1020">1020</a>
-<a href="#1021" id="1021">1021</a>
-<a href="#1022" id="1022">1022</a>
-<a href="#1023" id="1023">1023</a>
-<a href="#1024" id="1024">1024</a>
-<a href="#1025" id="1025">1025</a>
-<a href="#1026" id="1026">1026</a>
-<a href="#1027" id="1027">1027</a>
-<a href="#1028" id="1028">1028</a>
-<a href="#1029" id="1029">1029</a>
-<a href="#1030" id="1030">1030</a>
-<a href="#1031" id="1031">1031</a>
-<a href="#1032" id="1032">1032</a>
-<a href="#1033" id="1033">1033</a>
-<a href="#1034" id="1034">1034</a>
-<a href="#1035" id="1035">1035</a>
-<a href="#1036" id="1036">1036</a>
-<a href="#1037" id="1037">1037</a>
-<a href="#1038" id="1038">1038</a>
-<a href="#1039" id="1039">1039</a>
-<a href="#1040" id="1040">1040</a>
-<a href="#1041" id="1041">1041</a>
-<a href="#1042" id="1042">1042</a>
-<a href="#1043" id="1043">1043</a>
-<a href="#1044" id="1044">1044</a>
-<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>
 </pre></div><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
@@ -1428,7 +1361,6 @@
     <span class="kw">type </span>BlockingReader = CompleteReader&lt;A, A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = CompleteWriter&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = CompleteWriter&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = CompleteAppender&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = CompletePager&lt;A, A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = CompletePager&lt;A, A::BlockingPager&gt;;
 
@@ -1507,18 +1439,6 @@
             .map(|(rp, w)| (rp, CompleteWriter::new(w, size)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="kw">let </span>capability = <span class="self">self</span>.meta.full_capability();
-        <span class="kw">if </span>!capability.append {
-            <span class="kw">return </span>new_capability_unsupported_error(Operation::Append);
-        }
-
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, a)| (rp, CompleteAppender::new(a)))
-    }
-
     <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>capability = <span class="self">self</span>.meta.full_capability();
         <span class="kw">if </span>!capability.create_dir {
@@ -1915,54 +1835,6 @@
     }
 }
 
-<span class="kw">pub struct </span>CompleteAppender&lt;A&gt; {
-    inner: <span class="prelude-ty">Option</span>&lt;A&gt;,
-}
-
-<span class="kw">impl</span>&lt;A&gt; CompleteAppender&lt;A&gt; {
-    <span class="kw">pub fn </span>new(inner: A) -&gt; CompleteAppender&lt;A&gt; {
-        CompleteAppender { inner: <span class="prelude-val">Some</span>(inner) }
-    }
-}
-
-<span class="doccomment">/// Check if the appender has been closed while debug_assertions enabled.
-/// This code will never be executed in release mode.
-</span><span class="attr">#[cfg(debug_assertions)]
-</span><span class="kw">impl</span>&lt;A&gt; Drop <span class="kw">for </span>CompleteAppender&lt;A&gt; {
-    <span class="kw">fn </span>drop(<span class="kw-2">&amp;mut </span><span class="self">self</span>) {
-        <span class="kw">if </span><span class="self">self</span>.inner.is_some() {
-            <span class="comment">// Do we need to panic here?
-            </span><span class="macro">log::warn!</span>(<span class="string">&quot;appender has not been closed, must be a bug&quot;</span>)
-        }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;A&gt; oio::Append <span class="kw">for </span>CompleteAppender&lt;A&gt;
-<span class="kw">where
-    </span>A: oio::Append,
-{
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>a = <span class="self">self
-            </span>.inner
-            .as_mut()
-            .ok_or_else(|| Error::new(ErrorKind::Unexpected, <span class="string">&quot;appender has been closed&quot;</span>))<span class="question-mark">?</span>;
-
-        a.append(bs).<span class="kw">await
-    </span>}
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>a = <span class="self">self
-            </span>.inner
-            .as_mut()
-            .ok_or_else(|| Error::new(ErrorKind::Unexpected, <span class="string">&quot;appender has been closed&quot;</span>))<span class="question-mark">?</span>;
-
-        a.close().<span class="kw">await</span><span class="question-mark">?</span>;
-        <span class="self">self</span>.inner = <span class="prelude-val">None</span>;
-        <span class="prelude-val">Ok</span>(())
-    }
-}
-
 <span class="kw">fn </span>new_capability_unsupported_error&lt;R&gt;(operation: Operation) -&gt; <span class="prelude-ty">Result</span>&lt;R&gt; {
     <span class="prelude-val">Err</span>(Error::new(ErrorKind::Unsupported, <span class="string">&quot;operation is not supported&quot;</span>).with_operation(operation))
 }
@@ -2016,7 +1888,6 @@
         <span class="kw">type </span>BlockingReader = ();
         <span class="kw">type </span>Writer = ();
         <span class="kw">type </span>BlockingWriter = ();
-        <span class="kw">type </span>Appender = ();
         <span class="kw">type </span>Pager = ();
         <span class="kw">type </span>BlockingPager = ();
 
@@ -2039,10 +1910,6 @@
             <span class="prelude-val">Ok</span>((RpWrite::new(), ()))
         }
 
-        <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-            <span class="prelude-val">Ok</span>((RpAppend::new(), ()))
-        }
-
         <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
             <span class="prelude-val">Ok</span>(RpCopy {})
         }
@@ -2106,7 +1973,6 @@
     <span class="macro">capability_test!</span>(stat, |op| { op.stat(<span class="string">&quot;/path/to/mock_file&quot;</span>) });
     <span class="macro">capability_test!</span>(read, |op| { op.read(<span class="string">&quot;/path/to/mock_file&quot;</span>) });
     <span class="macro">capability_test!</span>(write, |op| { op.writer(<span class="string">&quot;/path/to/mock_file&quot;</span>) });
-    <span class="macro">capability_test!</span>(append, |op| { op.appender(<span class="string">&quot;/path/to/mock_file&quot;</span>) });
     <span class="macro">capability_test!</span>(create_dir, |op| { op.create_dir(<span class="string">&quot;/path/to/mock_dir/&quot;</span>) });
     <span class="macro">capability_test!</span>(delete, |op| { op.delete(<span class="string">&quot;/path/to/mock_file&quot;</span>) });
     <span class="macro">capability_test!</span>(copy, |op| {
diff --git a/docs/rust/src/opendal/layers/concurrent_limit.rs.html b/docs/rust/src/opendal/layers/concurrent_limit.rs.html
index 7cbc602c2..ec12c09ec 100644
--- a/docs/rust/src/opendal/layers/concurrent_limit.rs.html
+++ b/docs/rust/src/opendal/layers/concurrent_limit.rs.html
@@ -324,32 +324,6 @@
 <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>
-<a href="#350" id="350">350</a>
-<a href="#351" id="351">351</a>
-<a href="#352" id="352">352</a>
 </pre></div><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,7 +412,6 @@
     <span class="kw">type </span>BlockingReader = ConcurrentLimitWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = ConcurrentLimitWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = ConcurrentLimitWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = ConcurrentLimitWrapper&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = ConcurrentLimitWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = ConcurrentLimitWrapper&lt;A::BlockingPager&gt;;
 
@@ -484,20 +457,6 @@
             </span>.map(|(rp, w)| (rp, ConcurrentLimitWrapper::new(w, permit)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&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
-            .append(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, a)| (rp, ConcurrentLimitWrapper::new(a, permit)))
-    }
-
     <span class="kw">async fn </span>stat(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;RpStat&gt; {
         <span class="kw">let </span>_permit = <span class="self">self
             </span>.semaphore
@@ -679,17 +638,6 @@
     }
 }
 
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;R: oio::Append&gt; oio::Append <span class="kw">for </span>ConcurrentLimitWrapper&lt;R&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.append(bs).<span class="kw">await
-    </span>}
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.close().<span class="kw">await
-    </span>}
-}
-
 <span class="attr">#[async_trait]
 </span><span class="kw">impl</span>&lt;R: oio::Page&gt; oio::Page <span class="kw">for </span>ConcurrentLimitWrapper&lt;R&gt; {
     <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
diff --git a/docs/rust/src/opendal/layers/error_context.rs.html b/docs/rust/src/opendal/layers/error_context.rs.html
index c9a67a858..6c913f5b1 100644
--- a/docs/rust/src/opendal/layers/error_context.rs.html
+++ b/docs/rust/src/opendal/layers/error_context.rs.html
@@ -474,48 +474,6 @@
 <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>
-<a href="#511" id="511">511</a>
-<a href="#512" id="512">512</a>
-<a href="#513" id="513">513</a>
-<a href="#514" id="514">514</a>
-<a href="#515" id="515">515</a>
-<a href="#516" id="516">516</a>
-<a href="#517" id="517">517</a>
-<a href="#518" id="518">518</a>
 </pre></div><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
@@ -543,7 +501,6 @@
 <span class="kw">use </span>bytes::Bytes;
 <span class="kw">use </span>futures::TryFutureExt;
 
-<span class="kw">use </span><span class="kw">crate</span>::raw::oio::AppendOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::PageOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::ReadOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::WriteOperation;
@@ -589,7 +546,6 @@
     <span class="kw">type </span>BlockingReader = ErrorContextWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = ErrorContextWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = ErrorContextWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = ErrorContextWrapper&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = ErrorContextWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = ErrorContextWrapper&lt;A::BlockingPager&gt;;
 
@@ -657,27 +613,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner
-            .append(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::Append)
-                    .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>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner
             .copy(from, to, args)
@@ -995,25 +930,6 @@
     }
 }
 
-<span class="attr">#[async_trait::async_trait]
-</span><span class="kw">impl</span>&lt;T: oio::Append&gt; oio::Append <span class="kw">for </span>ErrorContextWrapper&lt;T&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.append(bs).<span class="kw">await</span>.map_err(|err| {
-            err.with_operation(AppendOperation::Append)
-                .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.scheme)
-                .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.path)
-        })
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.close().<span class="kw">await</span>.map_err(|err| {
-            err.with_operation(AppendOperation::Close)
-                .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.scheme)
-                .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.path)
-        })
-    }
-}
-
 <span class="attr">#[async_trait::async_trait]
 </span><span class="kw">impl</span>&lt;T: oio::Page&gt; oio::Page <span class="kw">for </span>ErrorContextWrapper&lt;T&gt; {
     <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
diff --git a/docs/rust/src/opendal/layers/immutable_index.rs.html b/docs/rust/src/opendal/layers/immutable_index.rs.html
index 12f54f468..7214351c6 100644
--- a/docs/rust/src/opendal/layers/immutable_index.rs.html
+++ b/docs/rust/src/opendal/layers/immutable_index.rs.html
@@ -456,11 +456,6 @@
 <a href="#456" id="456">456</a>
 <a href="#457" id="457">457</a>
 <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>
 </pre></div><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
@@ -603,7 +598,6 @@
     <span class="kw">type </span>BlockingReader = A::BlockingReader;
     <span class="kw">type </span>Writer = A::Writer;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = ImmutableDir;
     <span class="kw">type </span>BlockingPager = ImmutableDir;
 
@@ -659,10 +653,6 @@
         <span class="self">self</span>.inner.blocking_write(path, args)
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(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="kw">let </span><span class="kw-2">mut </span>path = path;
         <span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
diff --git a/docs/rust/src/opendal/layers/logging.rs.html b/docs/rust/src/opendal/layers/logging.rs.html
index a256fa5cc..cc5c3a077 100644
--- a/docs/rust/src/opendal/layers/logging.rs.html
+++ b/docs/rust/src/opendal/layers/logging.rs.html
@@ -1575,130 +1575,6 @@
 <a href="#1575" id="1575">1575</a>
 <a href="#1576" id="1576">1576</a>
 <a href="#1577" id="1577">1577</a>
-<a href="#1578" id="1578">1578</a>
-<a href="#1579" id="1579">1579</a>
-<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>
-<a href="#1676" id="1676">1676</a>
-<a href="#1677" id="1677">1677</a>
-<a href="#1678" id="1678">1678</a>
-<a href="#1679" id="1679">1679</a>
-<a href="#1680" id="1680">1680</a>
-<a href="#1681" id="1681">1681</a>
-<a href="#1682" id="1682">1682</a>
-<a href="#1683" id="1683">1683</a>
-<a href="#1684" id="1684">1684</a>
-<a href="#1685" id="1685">1685</a>
-<a href="#1686" id="1686">1686</a>
-<a href="#1687" id="1687">1687</a>
-<a href="#1688" id="1688">1688</a>
-<a href="#1689" id="1689">1689</a>
-<a href="#1690" id="1690">1690</a>
-<a href="#1691" id="1691">1691</a>
-<a href="#1692" id="1692">1692</a>
-<a href="#1693" id="1693">1693</a>
-<a href="#1694" id="1694">1694</a>
-<a href="#1695" id="1695">1695</a>
-<a href="#1696" id="1696">1696</a>
-<a href="#1697" id="1697">1697</a>
-<a href="#1698" id="1698">1698</a>
-<a href="#1699" id="1699">1699</a>
-<a href="#1700" id="1700">1700</a>
-<a href="#1701" id="1701">1701</a>
 </pre></div><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
@@ -1918,7 +1794,6 @@
     <span class="kw">type </span>BlockingReader = LoggingReader&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = LoggingWriter&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = LoggingWriter&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = LoggingAppender&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = LoggingPager&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = LoggingPager&lt;A::BlockingPager&gt;;
 
@@ -2068,45 +1943,6 @@
             })
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&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>.ctx.scheme,
-            Operation::Append,
-            path
-        );
-
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, a)| {
-                <span class="macro">debug!</span>(
-                    target: LOGGING_TARGET,
-                    <span class="string">&quot;service={} operation={} path={} -&gt; start appending&quot;</span>,
-                    <span class="self">self</span>.ctx.scheme,
-                    Operation::Append,
-                    path,
-                );
-                <span class="kw">let </span>a = LoggingAppender::new(<span class="self">self</span>.ctx.clone(), Operation::Append, path, a);
-                (rp, a)
-            })
-            .map_err(|err| {
-                <span class="kw">if let </span><span class="prelude-val">Some</span>(lvl) = <span class="self">self</span>.ctx.error_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; {}&quot;</span>,
-                        <span class="self">self</span>.ctx.scheme,
-                        Operation::Append,
-                        path,
-                        <span class="self">self</span>.ctx.error_print(<span class="kw-2">&amp;</span>err)
-                    )
-                };
-                err
-            })
-    }
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="macro">debug!</span>(
             target: LOGGING_TARGET,
@@ -3191,90 +3027,6 @@
     }
 }
 
-<span class="kw">pub struct </span>LoggingAppender&lt;A&gt; {
-    ctx: LoggingContext,
-    op: Operation,
-    path: String,
-
-    inner: A,
-}
-
-<span class="kw">impl</span>&lt;A&gt; LoggingAppender&lt;A&gt; {
-    <span class="kw">fn </span>new(ctx: LoggingContext, op: Operation, path: <span class="kw-2">&amp;</span>str, appender: A) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{
-            ctx,
-            op,
-            path: path.to_string(),
-
-            inner: appender,
-        }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;A: oio::Append&gt; oio::Append <span class="kw">for </span>LoggingAppender&lt;A&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>len = bs.len();
-
-        <span class="kw">match </span><span class="self">self</span>.inner.append(bs).<span class="kw">await </span>{
-            <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; {
-                <span class="macro">trace!</span>(
-                    target: LOGGING_TARGET,
-                    <span class="string">&quot;service={} operation={} path={} -&gt; data append {}B&quot;</span>,
-                    <span class="self">self</span>.ctx.scheme,
-                    <span class="self">self</span>.op,
-                    <span class="self">self</span>.path,
-                    len
-                );
-                <span class="prelude-val">Ok</span>(())
-            }
-            <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>.ctx.error_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; data append failed: {}&quot;</span>,
-                        <span class="self">self</span>.ctx.scheme,
-                        <span class="self">self</span>.op,
-                        <span class="self">self</span>.path,
-                        <span class="self">self</span>.ctx.error_print(<span class="kw-2">&amp;</span>err)
-                    )
-                }
-                <span class="prelude-val">Err</span>(err)
-            }
-        }
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">match </span><span class="self">self</span>.inner.close().<span class="kw">await </span>{
-            <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; {
-                <span class="macro">debug!</span>(
-                    target: LOGGING_TARGET,
-                    <span class="string">&quot;service={} operation={} path={} -&gt; data appended finished&quot;</span>,
-                    <span class="self">self</span>.ctx.scheme,
-                    <span class="self">self</span>.op,
-                    <span class="self">self</span>.path,
-                );
-                <span class="prelude-val">Ok</span>(())
-            }
-            <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>.ctx.error_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; data appender close failed: {}&quot;</span>,
-                        <span class="self">self</span>.ctx.scheme,
-                        <span class="self">self</span>.op,
-                        <span class="self">self</span>.path,
-                        <span class="self">self</span>.ctx.error_print(<span class="kw-2">&amp;</span>err),
-                    )
-                }
-                <span class="prelude-val">Err</span>(err)
-            }
-        }
-    }
-}
-
 <span class="kw">pub struct </span>LoggingPager&lt;P&gt; {
     ctx: LoggingContext,
     path: String,
diff --git a/docs/rust/src/opendal/layers/madsim.rs.html b/docs/rust/src/opendal/layers/madsim.rs.html
index e42c9597d..56493b46d 100644
--- a/docs/rust/src/opendal/layers/madsim.rs.html
+++ b/docs/rust/src/opendal/layers/madsim.rs.html
@@ -471,18 +471,6 @@
 <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></div><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
@@ -634,7 +622,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = MadsimWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = MadsimPager;
     <span class="kw">type </span>BlockingPager = ();
 
@@ -706,17 +693,6 @@
         }
     }
 
-    <span class="kw">async fn </span>append(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: OpAppend,
-    ) -&gt; <span class="kw">crate</span>::Result&lt;(RpAppend, <span class="self">Self</span>::Appender)&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">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="kw">crate</span>::Result&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
         <span class="prelude-val">Err</span>(Error::new(
             ErrorKind::Unsupported,
diff --git a/docs/rust/src/opendal/layers/metrics.rs.html b/docs/rust/src/opendal/layers/metrics.rs.html
index d566a09ed..838cc246f 100644
--- a/docs/rust/src/opendal/layers/metrics.rs.html
+++ b/docs/rust/src/opendal/layers/metrics.rs.html
@@ -904,11 +904,6 @@
 <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>
 </pre></div><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
@@ -1323,7 +1318,6 @@
     <span class="kw">type </span>BlockingReader = MetricWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = MetricWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = MetricWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -1421,10 +1415,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>stat(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;RpStat&gt; {
         <span class="self">self</span>.handle.requests_total_stat.increment(<span class="number">1</span>);
 
diff --git a/docs/rust/src/opendal/layers/minitrace.rs.html b/docs/rust/src/opendal/layers/minitrace.rs.html
index 12c804a40..be5596eb7 100644
--- a/docs/rust/src/opendal/layers/minitrace.rs.html
+++ b/docs/rust/src/opendal/layers/minitrace.rs.html
@@ -412,46 +412,6 @@
 <a href="#412" id="412">412</a>
 <a href="#413" id="413">413</a>
 <a href="#414" id="414">414</a>
-<a href="#415" id="415">415</a>
-<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<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>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
 </pre></div><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
@@ -479,7 +439,6 @@
 <span class="kw">use </span>futures::FutureExt;
 <span class="kw">use </span>minitrace::prelude::<span class="kw-2">*</span>;
 
-<span class="kw">use </span><span class="kw">crate</span>::raw::oio::AppendOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::PageOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::ReadOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::WriteOperation;
@@ -591,7 +550,6 @@
     <span class="kw">type </span>BlockingReader = MinitraceWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = MinitraceWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = MinitraceWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = MinitraceWrapper&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = MinitraceWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = MinitraceWrapper&lt;A::BlockingPager&gt;;
 
@@ -639,21 +597,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="attr">#[trace(enter_on_poll = <span class="bool-val">true</span>)]
-    </span><span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .map(|v| {
-                v.map(|(rp, r)| {
-                    (
-                        rp,
-                        MinitraceWrapper::new(Span::enter_with_local_parent(<span class="string">&quot;AppendOperation&quot;</span>), r),
-                    )
-                })
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="attr">#[trace(enter_on_poll = <span class="bool-val">true</span>)]
     </span><span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner().copy(from, to, args).<span class="kw">await
@@ -863,29 +806,6 @@
     }
 }
 
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;R: oio::Append&gt; oio::Append <span class="kw">for </span>MinitraceWrapper&lt;R&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner
-            .append(bs)
-            .in_span(Span::enter_with_parent(
-                AppendOperation::Append.into_static(),
-                <span class="kw-2">&amp;</span><span class="self">self</span>.span,
-            ))
-            .<span class="kw">await
-    </span>}
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner
-            .close()
-            .in_span(Span::enter_with_parent(
-                AppendOperation::Close.into_static(),
-                <span class="kw-2">&amp;</span><span class="self">self</span>.span,
-            ))
-            .<span class="kw">await
-    </span>}
-}
-
 <span class="attr">#[async_trait]
 </span><span class="kw">impl</span>&lt;R: oio::Page&gt; oio::Page <span class="kw">for </span>MinitraceWrapper&lt;R&gt; {
     <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
diff --git a/docs/rust/src/opendal/layers/oteltrace.rs.html b/docs/rust/src/opendal/layers/oteltrace.rs.html
index 8b20f87e4..ac3cbe7df 100644
--- a/docs/rust/src/opendal/layers/oteltrace.rs.html
+++ b/docs/rust/src/opendal/layers/oteltrace.rs.html
@@ -352,11 +352,6 @@
 <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>
 </pre></div><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
@@ -431,7 +426,6 @@
     <span class="kw">type </span>BlockingReader = OtelTraceWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = OtelTraceWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = OtelTraceWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = OtelTraceWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = OtelTraceWrapper&lt;A::BlockingPager&gt;;
 
@@ -475,10 +469,6 @@
             </span>.map(|(rp, r)| (rp, OtelTraceWrapper::new(span, r)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&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;copy&quot;</span>);
diff --git a/docs/rust/src/opendal/layers/prometheus.rs.html b/docs/rust/src/opendal/layers/prometheus.rs.html
index 2151e1fae..9c595feea 100644
--- a/docs/rust/src/opendal/layers/prometheus.rs.html
+++ b/docs/rust/src/opendal/layers/prometheus.rs.html
@@ -734,11 +734,6 @@
 <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>
 </pre></div><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
@@ -933,7 +928,6 @@
     <span class="kw">type </span>BlockingReader = PrometheusMetricWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = PrometheusMetricWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = PrometheusMetricWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -1039,10 +1033,6 @@
         })
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>stat(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;RpStat&gt; {
         <span class="self">self</span>.stats
             .requests_total
diff --git a/docs/rust/src/opendal/layers/retry.rs.html b/docs/rust/src/opendal/layers/retry.rs.html
index 707f37dc0..6826a99ed 100644
--- a/docs/rust/src/opendal/layers/retry.rs.html
+++ b/docs/rust/src/opendal/layers/retry.rs.html
@@ -1346,90 +1346,6 @@
 <a href="#1346" id="1346">1346</a>
 <a href="#1347" id="1347">1347</a>
 <a href="#1348" id="1348">1348</a>
-<a href="#1349" id="1349">1349</a>
-<a href="#1350" id="1350">1350</a>
-<a href="#1351" id="1351">1351</a>
-<a href="#1352" id="1352">1352</a>
-<a href="#1353" id="1353">1353</a>
-<a href="#1354" id="1354">1354</a>
-<a href="#1355" id="1355">1355</a>
-<a href="#1356" id="1356">1356</a>
-<a href="#1357" id="1357">1357</a>
-<a href="#1358" id="1358">1358</a>
-<a href="#1359" id="1359">1359</a>
-<a href="#1360" id="1360">1360</a>
-<a href="#1361" id="1361">1361</a>
-<a href="#1362" id="1362">1362</a>
-<a href="#1363" id="1363">1363</a>
-<a href="#1364" id="1364">1364</a>
-<a href="#1365" id="1365">1365</a>
-<a href="#1366" id="1366">1366</a>
-<a href="#1367" id="1367">1367</a>
-<a href="#1368" id="1368">1368</a>
-<a href="#1369" id="1369">1369</a>
-<a href="#1370" id="1370">1370</a>
-<a href="#1371" id="1371">1371</a>
-<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>
-<a href="#1413" id="1413">1413</a>
-<a href="#1414" id="1414">1414</a>
-<a href="#1415" id="1415">1415</a>
-<a href="#1416" id="1416">1416</a>
-<a href="#1417" id="1417">1417</a>
-<a href="#1418" id="1418">1418</a>
-<a href="#1419" id="1419">1419</a>
-<a href="#1420" id="1420">1420</a>
-<a href="#1421" id="1421">1421</a>
-<a href="#1422" id="1422">1422</a>
-<a href="#1423" id="1423">1423</a>
-<a href="#1424" id="1424">1424</a>
-<a href="#1425" id="1425">1425</a>
-<a href="#1426" id="1426">1426</a>
-<a href="#1427" id="1427">1427</a>
-<a href="#1428" id="1428">1428</a>
-<a href="#1429" id="1429">1429</a>
-<a href="#1430" id="1430">1430</a>
-<a href="#1431" id="1431">1431</a>
-<a href="#1432" id="1432">1432</a>
 </pre></div><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
@@ -1467,7 +1383,6 @@
 <span class="kw">use </span>futures::FutureExt;
 <span class="kw">use </span>log::warn;
 
-<span class="kw">use </span><span class="kw">crate</span>::raw::oio::AppendOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::PageOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::ReadOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::WriteOperation;
@@ -1717,7 +1632,6 @@
     <span class="kw">type </span>BlockingReader = RetryWrapper&lt;A::BlockingReader, I&gt;;
     <span class="kw">type </span>Writer = RetryWrapper&lt;A::Writer, I&gt;;
     <span class="kw">type </span>BlockingWriter = RetryWrapper&lt;A::BlockingWriter, I&gt;;
-    <span class="kw">type </span>Appender = RetryWrapper&lt;A::Appender, I&gt;;
     <span class="kw">type </span>Pager = RetryWrapper&lt;A::Pager, I&gt;;
     <span class="kw">type </span>BlockingPager = RetryWrapper&lt;A::BlockingPager, I&gt;;
 
@@ -1795,32 +1709,6 @@
             .<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        { || <span class="self">self</span>.inner.append(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="self">self</span>.notify.intercept(
-                    err,
-                    dur,
-                    <span class="kw-2">&amp;</span>[
-                        (<span class="string">&quot;operation&quot;</span>, Operation::Append.into_static()),
-                        (<span class="string">&quot;path&quot;</span>, path),
-                    ],
-                )
-            })
-            .map(|v| {
-                v.map(|(rp, r)| {
-                    (
-                        rp,
-                        RetryWrapper::new(r, <span class="self">self</span>.notify.clone(), path, <span class="self">self</span>.builder.clone()),
-                    )
-                })
-                .map_err(|e| e.set_persistent())
-            })
-            .<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>stat(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;RpStat&gt; {
         { || <span class="self">self</span>.inner.stat(path, args.clone()) }
             .retry(<span class="kw-2">&amp;</span><span class="self">self</span>.builder)
@@ -2454,61 +2342,6 @@
     }
 }
 
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;A: oio::Append, I: RetryInterceptor&gt; oio::Append <span class="kw">for </span>RetryWrapper&lt;A, I&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>backoff = <span class="self">self</span>.builder.build();
-
-        <span class="kw">loop </span>{
-            <span class="kw">match </span><span class="self">self</span>.inner.append(bs.clone()).<span class="kw">await </span>{
-                <span class="prelude-val">Ok</span>(v) =&gt; <span class="kw">return </span><span class="prelude-val">Ok</span>(v),
-                <span class="prelude-val">Err</span>(e) <span class="kw">if </span>!e.is_temporary() =&gt; <span class="kw">return </span><span class="prelude-val">Err</span>(e),
-                <span class="prelude-val">Err</span>(e) =&gt; <span class="kw">match </span>backoff.next() {
-                    <span class="prelude-val">None </span>=&gt; <span class="kw">return </span><span class="prelude-val">Err</span>(e),
-                    <span class="prelude-val">Some</span>(dur) =&gt; {
-                        <span class="self">self</span>.notify.intercept(
-                            <span class="kw-2">&amp;</span>e,
-                            dur,
-                            <span class="kw-2">&amp;</span>[
-                                (<span class="string">&quot;operation&quot;</span>, AppendOperation::Append.into_static()),
-                                (<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.path),
-                            ],
-                        );
-                        tokio::time::sleep(dur).<span class="kw">await</span>;
-                        <span class="kw">continue</span>;
-                    }
-                },
-            }
-        }
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>backoff = <span class="self">self</span>.builder.build();
-
-        <span class="kw">loop </span>{
-            <span class="kw">match </span><span class="self">self</span>.inner.close().<span class="kw">await </span>{
-                <span class="prelude-val">Ok</span>(v) =&gt; <span class="kw">return </span><span class="prelude-val">Ok</span>(v),
-                <span class="prelude-val">Err</span>(e) <span class="kw">if </span>!e.is_temporary() =&gt; <span class="kw">return </span><span class="prelude-val">Err</span>(e),
-                <span class="prelude-val">Err</span>(e) =&gt; <span class="kw">match </span>backoff.next() {
-                    <span class="prelude-val">None </span>=&gt; <span class="kw">return </span><span class="prelude-val">Err</span>(e),
-                    <span class="prelude-val">Some</span>(dur) =&gt; {
-                        <span class="self">self</span>.notify.intercept(
-                            <span class="kw-2">&amp;</span>e,
-                            dur,
-                            <span class="kw-2">&amp;</span>[
-                                (<span class="string">&quot;operation&quot;</span>, AppendOperation::Close.into_static()),
-                                (<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.path),
-                            ],
-                        );
-                        tokio::time::sleep(dur).<span class="kw">await</span>;
-                        <span class="kw">continue</span>;
-                    }
-                },
-            }
-        }
-    }
-}
-
 <span class="attr">#[async_trait]
 </span><span class="kw">impl</span>&lt;P: oio::Page, I: RetryInterceptor&gt; oio::Page <span class="kw">for </span>RetryWrapper&lt;P, I&gt; {
     <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
@@ -2605,7 +2438,6 @@
         <span class="kw">type </span>BlockingReader = ();
         <span class="kw">type </span>Writer = ();
         <span class="kw">type </span>BlockingWriter = ();
-        <span class="kw">type </span>Appender = ();
         <span class="kw">type </span>Pager = MockPager;
         <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/layers/throttle.rs.html b/docs/rust/src/opendal/layers/throttle.rs.html
index 69a73a85a..cdafa0072 100644
--- a/docs/rust/src/opendal/layers/throttle.rs.html
+++ b/docs/rust/src/opendal/layers/throttle.rs.html
@@ -284,47 +284,6 @@
 <a href="#284" id="284">284</a>
 <a href="#285" id="285">285</a>
 <a href="#286" id="286">286</a>
-<a href="#287" id="287">287</a>
-<a href="#288" id="288">288</a>
-<a href="#289" id="289">289</a>
-<a href="#290" id="290">290</a>
-<a href="#291" id="291">291</a>
-<a href="#292" id="292">292</a>
-<a href="#293" id="293">293</a>
-<a href="#294" id="294">294</a>
-<a href="#295" id="295">295</a>
-<a href="#296" id="296">296</a>
-<a href="#297" id="297">297</a>
-<a href="#298" id="298">298</a>
-<a href="#299" id="299">299</a>
-<a href="#300" id="300">300</a>
-<a href="#301" id="301">301</a>
-<a href="#302" id="302">302</a>
-<a href="#303" id="303">303</a>
-<a href="#304" id="304">304</a>
-<a href="#305" id="305">305</a>
-<a href="#306" id="306">306</a>
-<a href="#307" id="307">307</a>
-<a href="#308" id="308">308</a>
-<a href="#309" id="309">309</a>
-<a href="#310" id="310">310</a>
-<a href="#311" id="311">311</a>
-<a href="#312" id="312">312</a>
-<a href="#313" id="313">313</a>
-<a href="#314" id="314">314</a>
-<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>
-<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>
 </pre></div><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
@@ -448,7 +407,6 @@
     <span class="kw">type </span>BlockingReader = ThrottleWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = ThrottleWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = ThrottleWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = ThrottleWrapper&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = A::Pager;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -474,15 +432,6 @@
             </span>.map(|(rp, w)| (rp, ThrottleWrapper::new(w, limiter)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="kw">let </span>limiter = <span class="self">self</span>.rate_limiter.clone();
-
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, a)| (rp, ThrottleWrapper::new(a, limiter)))
-    }
-
     <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>.inner.list(path, args).<span class="kw">await
     </span>}
@@ -621,35 +570,4 @@
         <span class="self">self</span>.inner.close()
     }
 }
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;R: oio::Append&gt; oio::Append <span class="kw">for </span>ThrottleWrapper&lt;R&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>buf_length = NonZeroU32::new(bs.len() <span class="kw">as </span>u32).unwrap();
-
-        <span class="kw">loop </span>{
-            <span class="kw">match </span><span class="self">self</span>.limiter.check_n(buf_length) {
-                <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; <span class="kw">return </span><span class="self">self</span>.inner.append(bs).<span class="kw">await</span>,
-                <span class="prelude-val">Err</span>(negative) =&gt; <span class="kw">match </span>negative {
-                    <span class="comment">// the query is valid but the Decider can not accommodate them.
-                    </span>NegativeMultiDecision::BatchNonConforming(<span class="kw">_</span>, not_until) =&gt; {
-                        <span class="kw">let </span>wait_time = not_until.wait_time_from(DefaultClock::default().now());
-                        tokio::time::sleep(wait_time).<span class="kw">await</span>;
-                    }
-                    <span class="comment">// the query was invalid as the rate limit parameters can &quot;never&quot; accommodate the number of cells queried for.
-                    </span>NegativeMultiDecision::InsufficientCapacity(<span class="kw">_</span>) =&gt; {
-                        <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                            ErrorKind::RateLimited,
-                            <span class="string">&quot;InsufficientCapacity due to burst size being smaller than the request size&quot;</span>,
-                        ))
-                    }
-                },
-            }
-        }
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.close().<span class="kw">await
-    </span>}
-}
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/layers/timeout.rs.html b/docs/rust/src/opendal/layers/timeout.rs.html
index 602488f25..7d4543b22 100644
--- a/docs/rust/src/opendal/layers/timeout.rs.html
+++ b/docs/rust/src/opendal/layers/timeout.rs.html
@@ -384,47 +384,6 @@
 <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>
-<a href="#396" id="396">396</a>
-<a href="#397" id="397">397</a>
-<a href="#398" id="398">398</a>
-<a href="#399" id="399">399</a>
-<a href="#400" id="400">400</a>
-<a href="#401" id="401">401</a>
-<a href="#402" id="402">402</a>
-<a href="#403" id="403">403</a>
-<a href="#404" id="404">404</a>
-<a href="#405" id="405">405</a>
-<a href="#406" id="406">406</a>
-<a href="#407" id="407">407</a>
-<a href="#408" id="408">408</a>
-<a href="#409" id="409">409</a>
-<a href="#410" id="410">410</a>
-<a href="#411" id="411">411</a>
-<a href="#412" id="412">412</a>
-<a href="#413" id="413">413</a>
-<a href="#414" id="414">414</a>
-<a href="#415" id="415">415</a>
-<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<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>
 </pre></div><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
@@ -451,7 +410,6 @@
 <span class="kw">use </span>async_trait::async_trait;
 <span class="kw">use </span>bytes::Bytes;
 
-<span class="kw">use </span><span class="kw">crate</span>::raw::oio::AppendOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::PageOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::ReadOperation;
 <span class="kw">use </span><span class="kw">crate</span>::raw::oio::WriteOperation;
@@ -462,7 +420,7 @@
 ///
 /// # Notes
 ///
-/// - For IO operations like `read`, `write`, and `append`, we will set a timeout
+/// - For IO operations like `read`, `write`, we will set a timeout
 ///   for each single IO operation.
 /// - For other operations like `stat`, and `delete`, the timeout is for the whole
 ///   operation.
@@ -574,7 +532,6 @@
     <span class="kw">type </span>BlockingReader = A::BlockingReader;
     <span class="kw">type </span>Writer = TimeoutWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = A::BlockingWriter;
-    <span class="kw">type </span>Appender = TimeoutWrapper&lt;A::Appender&gt;;
     <span class="kw">type </span>Pager = TimeoutWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = A::BlockingPager;
 
@@ -606,18 +563,6 @@
             </span>.map(|(rp, r)| (rp, TimeoutWrapper::new(r, <span class="self">self</span>.timeout, <span class="self">self</span>.speed)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        tokio::time::timeout(<span class="self">self</span>.timeout, <span class="self">self</span>.inner.append(path, args))
-            .<span class="kw">await
-            </span>.map_err(|<span class="kw">_</span>| {
-                Error::new(ErrorKind::Unexpected, <span class="string">&quot;operation timeout&quot;</span>)
-                    .with_operation(Operation::Append)
-                    .with_context(<span class="string">&quot;timeout&quot;</span>, <span class="self">self</span>.timeout.as_secs_f64().to_string())
-                    .set_temporary()
-            })<span class="question-mark">?
-            </span>.map(|(rp, r)| (rp, TimeoutWrapper::new(r, <span class="self">self</span>.timeout, <span class="self">self</span>.speed)))
-    }
-
     <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; {
         tokio::time::timeout(<span class="self">self</span>.timeout, <span class="self">self</span>.inner.list(path, args))
             .<span class="kw">await
@@ -812,33 +757,6 @@
     </span>}
 }
 
-<span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;A: oio::Append&gt; oio::Append <span class="kw">for </span>TimeoutWrapper&lt;A&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>timeout = <span class="self">self</span>.io_timeout(bs.len() <span class="kw">as </span>u64);
-
-        tokio::time::timeout(timeout, <span class="self">self</span>.inner.append(bs))
-            .<span class="kw">await
-            </span>.map_err(|<span class="kw">_</span>| {
-                Error::new(ErrorKind::Unexpected, <span class="string">&quot;operation timeout&quot;</span>)
-                    .with_operation(AppendOperation::Append)
-                    .with_context(<span class="string">&quot;timeout&quot;</span>, timeout.as_secs_f64().to_string())
-                    .set_temporary()
-            })<span class="question-mark">?
-    </span>}
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        tokio::time::timeout(<span class="self">self</span>.timeout, <span class="self">self</span>.inner.close())
-            .<span class="kw">await
-            </span>.map_err(|<span class="kw">_</span>| {
-                Error::new(ErrorKind::Unexpected, <span class="string">&quot;operation timeout&quot;</span>)
-                    .with_operation(AppendOperation::Close)
-                    .with_context(<span class="string">&quot;timeout&quot;</span>, <span class="self">self</span>.timeout.as_secs_f64().to_string())
-                    .set_temporary()
-            })<span class="question-mark">?
-    </span>}
-}
-
 <span class="attr">#[async_trait]
 </span><span class="kw">impl</span>&lt;R: oio::Page&gt; oio::Page <span class="kw">for </span>TimeoutWrapper&lt;R&gt; {
     <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
diff --git a/docs/rust/src/opendal/layers/tracing.rs.html b/docs/rust/src/opendal/layers/tracing.rs.html
index e7c4a0cf9..19c3aa928 100644
--- a/docs/rust/src/opendal/layers/tracing.rs.html
+++ b/docs/rust/src/opendal/layers/tracing.rs.html
@@ -385,11 +385,6 @@
 <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>
 </pre></div><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
@@ -529,7 +524,6 @@
     <span class="kw">type </span>BlockingReader = TracingWrapper&lt;A::BlockingReader&gt;;
     <span class="kw">type </span>Writer = TracingWrapper&lt;A::Writer&gt;;
     <span class="kw">type </span>BlockingWriter = TracingWrapper&lt;A::BlockingWriter&gt;;
-    <span class="kw">type </span>Appender = A::Appender;
     <span class="kw">type </span>Pager = TracingWrapper&lt;A::Pager&gt;;
     <span class="kw">type </span>BlockingPager = TracingWrapper&lt;A::BlockingPager&gt;;
 
@@ -563,10 +557,6 @@
             </span>.map(|(rp, r)| (rp, TracingWrapper::new(Span::current(), r)))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner.append(path, args).<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>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner().copy(from, to, args).<span class="kw">await
diff --git a/docs/rust/src/opendal/layers/type_eraser.rs.html b/docs/rust/src/opendal/layers/type_eraser.rs.html
index 5bd9bc449..9ca83b66a 100644
--- a/docs/rust/src/opendal/layers/type_eraser.rs.html
+++ b/docs/rust/src/opendal/layers/type_eraser.rs.html
@@ -103,14 +103,6 @@
 <a href="#103" id="103">103</a>
 <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>
 </pre></div><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
@@ -170,7 +162,6 @@
     <span class="kw">type </span>BlockingReader = oio::BlockingReader;
     <span class="kw">type </span>Writer = oio::Writer;
     <span class="kw">type </span>BlockingWriter = oio::BlockingWriter;
-    <span class="kw">type </span>Appender = oio::Appender;
     <span class="kw">type </span>Pager = oio::Pager;
     <span class="kw">type </span>BlockingPager = oio::BlockingPager;
 
@@ -204,13 +195,6 @@
             .map(|(rp, w)| (rp, Box::new(w) <span class="kw">as </span>oio::BlockingWriter))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.inner
-            .append(path, args)
-            .<span class="kw">await
-            </span>.map(|(rp, a)| (rp, Box::new(a) <span class="kw">as </span>oio::Appender))
-    }
-
     <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>.inner
             .list(path, args)
diff --git a/docs/rust/src/opendal/raw/accessor.rs.html b/docs/rust/src/opendal/raw/accessor.rs.html
index 8adbbb1b4..be889b3bc 100644
--- a/docs/rust/src/opendal/raw/accessor.rs.html
+++ b/docs/rust/src/opendal/raw/accessor.rs.html
@@ -550,32 +550,6 @@
 <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>
 </pre></div><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
@@ -648,8 +622,6 @@
     <span class="doccomment">/// BlockingPager is the associated pager that could return in
     /// `blocking_list` operation.
     </span><span class="kw">type </span>BlockingPager: oio::BlockingPage;
-    <span class="doccomment">/// Appender is the associated appender that could return in `append` operation.
-    </span><span class="kw">type </span>Appender: oio::Append;
 
     <span class="doccomment">/// Invoke the `info` operation to get metadata of accessor.
     ///
@@ -716,23 +688,6 @@
         ))
     }
 
-    <span class="doccomment">/// Invoke the `append` operation on the specified path, returns a
-    /// appended size if operate successful.
-    ///
-    ///  Require [`Capability::append`]
-    ///
-    /// # Behavior
-    ///
-    /// - Input path MUST be file path, DON&#39;T NEED to check mode.
-    </span><span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&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">/// Invoke the `copy` operation on the specified `from` path and `to` path.
     ///
     /// Require [Capability::copy]
@@ -967,7 +922,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = ();
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = ();
     <span class="kw">type </span>BlockingPager = ();
 
@@ -990,7 +944,6 @@
     <span class="kw">type </span>BlockingReader = T::BlockingReader;
     <span class="kw">type </span>Writer = T::Writer;
     <span class="kw">type </span>BlockingWriter = T::BlockingWriter;
-    <span class="kw">type </span>Appender = T::Appender;
     <span class="kw">type </span>Pager = T::Pager;
     <span class="kw">type </span>BlockingPager = T::BlockingPager;
 
@@ -1009,10 +962,6 @@
         <span class="self">self</span>.as_ref().write(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="self">self</span>.as_ref().append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.as_ref().copy(from, to, args).<span class="kw">await
     </span>}
@@ -1075,7 +1024,6 @@
         BlockingReader = oio::BlockingReader,
         Writer = oio::Writer,
         BlockingWriter = oio::BlockingWriter,
-        Appender = oio::Appender,
         Pager = oio::Pager,
         BlockingPager = oio::BlockingPager,
     &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 e5a3ed4b4..85a4f700f 100644
--- a/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/kv/backend.rs.html
@@ -432,7 +432,6 @@
 <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>
 </pre></div><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
@@ -497,7 +496,6 @@
     <span class="kw">type </span>BlockingReader = oio::Cursor;
     <span class="kw">type </span>Writer = KvWriter&lt;S&gt;;
     <span class="kw">type </span>BlockingWriter = KvWriter&lt;S&gt;;
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = KvPager;
     <span class="kw">type </span>BlockingPager = KvPager;
 
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 e023ca3ad..7127a84ba 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
@@ -439,7 +439,6 @@
 <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>
 </pre></div><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
@@ -500,7 +499,6 @@
     <span class="kw">type </span>BlockingReader = oio::Cursor;
     <span class="kw">type </span>Writer = KvWriter&lt;S&gt;;
     <span class="kw">type </span>BlockingWriter = KvWriter&lt;S&gt;;
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = KvPager;
     <span class="kw">type </span>BlockingPager = KvPager;
 
diff --git a/docs/rust/src/opendal/raw/layer.rs.html b/docs/rust/src/opendal/raw/layer.rs.html
index c7e49c667..252ec5f76 100644
--- a/docs/rust/src/opendal/raw/layer.rs.html
+++ b/docs/rust/src/opendal/raw/layer.rs.html
@@ -358,20 +358,6 @@
 <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>
-<a href="#373" id="373">373</a>
-<a href="#374" id="374">374</a>
 </pre></div><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
@@ -435,7 +421,6 @@
 ///     type BlockingReader = A::BlockingReader;
 ///     type Writer = A::Writer;
 ///     type BlockingWriter = A::BlockingWriter;
-///     type Appender = A::Appender;
 ///     type Pager = A::Pager;
 ///     type BlockingPager = A::BlockingPager;
 ///
@@ -467,10 +452,6 @@
 ///         self.inner.blocking_write(path, args)
 ///     }
 ///
-///     async fn append(&amp;self, path: &amp;str, args: OpAppend) -&gt; Result&lt;(RpAppend, Self::Appender)&gt; {
-///         self.inner.append(path, args).await
-///     }
-///
 ///     async fn list(&amp;self, path: &amp;str, args: OpList) -&gt; Result&lt;(RpList, Self::Pager)&gt; {
 ///         self.inner.list(path, args).await
 ///     }
@@ -511,7 +492,6 @@
     <span class="kw">type </span>BlockingReader: oio::BlockingRead;
     <span class="kw">type </span>Writer: oio::Write;
     <span class="kw">type </span>BlockingWriter: oio::BlockingWrite;
-    <span class="kw">type </span>Appender: oio::Append;
     <span class="kw">type </span>Pager: oio::Page;
     <span class="kw">type </span>BlockingPager: oio::BlockingPage;
 
@@ -529,8 +509,6 @@
 
     <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt;;
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt;;
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="self">self</span>.inner().copy(from, to, args).<span class="kw">await
     </span>}
@@ -590,7 +568,6 @@
     <span class="kw">type </span>BlockingReader = L::BlockingReader;
     <span class="kw">type </span>Writer = L::Writer;
     <span class="kw">type </span>BlockingWriter = L::BlockingWriter;
-    <span class="kw">type </span>Appender = L::Appender;
     <span class="kw">type </span>Pager = L::Pager;
     <span class="kw">type </span>BlockingPager = L::BlockingPager;
 
@@ -610,10 +587,6 @@
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).write(path, args).<span class="kw">await
     </span>}
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).append(path, args).<span class="kw">await
-    </span>}
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         (<span class="self">self </span><span class="kw">as </span><span class="kw-2">&amp;</span>L).copy(from, to, args).<span class="kw">await
     </span>}
@@ -708,7 +681,6 @@
         <span class="kw">type </span>BlockingReader = ();
         <span class="kw">type </span>Writer = ();
         <span class="kw">type </span>BlockingWriter = ();
-        <span class="kw">type </span>Appender = ();
         <span class="kw">type </span>Pager = ();
         <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/raw/oio/append/api.rs.html b/docs/rust/src/opendal/raw/oio/append/api.rs.html
deleted file mode 100644
index 110575b9b..000000000
--- a/docs/rust/src/opendal/raw/oio/append/api.rs.html
+++ /dev/null
@@ -1,217 +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="Source of the Rust file `core/src/raw/oio/append/api.rs`."><title>api.rs - source</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 [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<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>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<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>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::fmt::Display;
-<span class="kw">use </span>std::fmt::Formatter;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Bytes;
-
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="doccomment">/// AppendOperation is the name for APIs of Append.
-</span><span class="attr">#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
-#[non_exhaustive]
-</span><span class="kw">pub enum </span>AppendOperation {
-    <span class="doccomment">/// Operation for [`Append::append`]
-    </span>Append,
-    <span class="doccomment">/// Operation for [`Append::close`]
-    </span>Close,
-}
-
-<span class="kw">impl </span>AppendOperation {
-    <span class="doccomment">/// Convert self into static str.
-    </span><span class="kw">pub fn </span>into_static(<span class="self">self</span>) -&gt; <span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str {
-        <span class="self">self</span>.into()
-    }
-}
-
-<span class="kw">impl </span>Display <span class="kw">for </span>AppendOperation {
-    <span class="kw">fn </span>fmt(<span class="kw-2">&amp;</span><span class="self">self</span>, f: <span class="kw-2">&amp;mut </span>Formatter&lt;<span class="lifetime">&#39;_</span>&gt;) -&gt; std::fmt::Result {
-        <span class="macro">write!</span>(f, <span class="string">&quot;{}&quot;</span>, <span class="self">self</span>.into_static())
-    }
-}
-
-<span class="kw">impl </span>From&lt;AppendOperation&gt; <span class="kw">for </span><span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str {
-    <span class="kw">fn </span>from(v: AppendOperation) -&gt; <span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str {
-        <span class="kw">use </span>AppendOperation::<span class="kw-2">*</span>;
-
-        <span class="kw">match </span>v {
-            Append =&gt; <span class="string">&quot;Append::append&quot;</span>,
-            Close =&gt; <span class="string">&quot;Append::close&quot;</span>,
-        }
-    }
-}
-
-<span class="doccomment">/// Appender is a type erased [`Append`]
-</span><span class="kw">pub type </span>Appender = Box&lt;<span class="kw">dyn </span>Append&gt;;
-
-<span class="doccomment">/// Append is the trait that OpenDAL returns to callers.
-///
-/// # Notes
-///
-/// Users will call `append` multiple times.
-</span><span class="attr">#[async_trait]
-</span><span class="kw">pub trait </span>Append: Unpin + Send + Sync {
-    <span class="doccomment">/// Append data to the end of file.
-    ///
-    /// Users will call `append` multiple times.
-    /// Please make sure `append` is safe to re-enter.
-    </span><span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt;;
-
-    <span class="doccomment">/// Seal the file to mark it as unmodifiable.
-    </span><span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt;;
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>Append <span class="kw">for </span>() {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let _ </span>= bs;
-
-        <span class="macro">unimplemented!</span>(<span class="string">&quot;append is required to be implemented for oio::Append&quot;</span>)
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="prelude-val">Err</span>(Error::new(
-            ErrorKind::Unsupported,
-            <span class="string">&quot;output appender doesn&#39;t support close&quot;</span>,
-        ))
-    }
-}
-
-<span class="doccomment">/// `Box&lt;dyn Append&gt;` won&#39;t implement `Append` automatically.
-///
-/// To make Appender work as expected, we must add this impl.
-</span><span class="attr">#[async_trait]
-</span><span class="kw">impl</span>&lt;T: Append + <span class="question-mark">?</span>Sized&gt; Append <span class="kw">for </span>Box&lt;T&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        (<span class="kw-2">**</span><span class="self">self</span>).append(bs).<span class="kw">await
-    </span>}
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        (<span class="kw-2">**</span><span class="self">self</span>).close().<span class="kw">await
-    </span>}
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/oio/append/mod.rs.html b/docs/rust/src/opendal/raw/oio/append/mod.rs.html
deleted file mode 100644
index 5fdbb6a5d..000000000
--- a/docs/rust/src/opendal/raw/oio/append/mod.rs.html
+++ /dev/null
@@ -1,39 +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="Source of the Rust file `core/src/raw/oio/append/mod.rs`."><title>mod.rs - source</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 [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">mod </span>api;
-<span class="kw">pub use </span>api::<span class="kw-2">*</span>;
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/oio/cursor.rs.html b/docs/rust/src/opendal/raw/oio/cursor.rs.html
index d26d8b280..c83ea7339 100644
--- a/docs/rust/src/opendal/raw/oio/cursor.rs.html
+++ b/docs/rust/src/opendal/raw/oio/cursor.rs.html
@@ -330,6 +330,8 @@
 <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>
 </pre></div><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
@@ -599,6 +601,8 @@
 
     <span class="doccomment">/// peak all will read and copy all bytes from current cursor
     /// without change it&#39;s content.
+    ///
+    /// TODO: we need to find a way to avoid copy all content here.
     </span><span class="kw">pub fn </span>peak_all(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Bytes {
         <span class="comment">// Avoid data copy if we only have one bytes.
         </span><span class="kw">if </span><span class="self">self</span>.inner.len() == <span class="number">1 </span>{
diff --git a/docs/rust/src/opendal/raw/oio/mod.rs.html b/docs/rust/src/opendal/raw/oio/mod.rs.html
index e3dd12afd..9f9925fcd 100644
--- a/docs/rust/src/opendal/raw/oio/mod.rs.html
+++ b/docs/rust/src/opendal/raw/oio/mod.rs.html
@@ -40,9 +40,6 @@
 <a href="#40" id="40">40</a>
 <a href="#41" id="41">41</a>
 <a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
 </pre></div><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
@@ -73,9 +70,6 @@
 <span class="kw">mod </span>write;
 <span class="kw">pub use </span>write::<span class="kw-2">*</span>;
 
-<span class="kw">mod </span>append;
-<span class="kw">pub use </span>append::<span class="kw-2">*</span>;
-
 <span class="kw">mod </span>stream;
 <span class="kw">pub use </span>stream::<span class="kw-2">*</span>;
 
diff --git a/docs/rust/src/opendal/raw/oio/page/into_flat_page.rs.html b/docs/rust/src/opendal/raw/oio/page/into_flat_page.rs.html
index f4976be66..1bc22038d 100644
--- a/docs/rust/src/opendal/raw/oio/page/into_flat_page.rs.html
+++ b/docs/rust/src/opendal/raw/oio/page/into_flat_page.rs.html
@@ -314,7 +314,6 @@
 <a href="#314" id="314">314</a>
 <a href="#315" id="315">315</a>
 <a href="#316" id="316">316</a>
-<a href="#317" id="317">317</a>
 </pre></div><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
@@ -565,7 +564,6 @@
         <span class="kw">type </span>BlockingReader = ();
         <span class="kw">type </span>Writer = ();
         <span class="kw">type </span>BlockingWriter = ();
-        <span class="kw">type </span>Appender = ();
         <span class="kw">type </span>Pager = ();
         <span class="kw">type </span>BlockingPager = MockPager;
 
diff --git a/docs/rust/src/opendal/raw/oio/read/into_seekable_read_by_range.rs.html b/docs/rust/src/opendal/raw/oio/read/into_seekable_read_by_range.rs.html
index c8ec384fb..681a27b73 100644
--- a/docs/rust/src/opendal/raw/oio/read/into_seekable_read_by_range.rs.html
+++ b/docs/rust/src/opendal/raw/oio/read/into_seekable_read_by_range.rs.html
@@ -567,7 +567,6 @@
 <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>
 </pre></div><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
@@ -985,7 +984,6 @@
         <span class="kw">type </span>BlockingReader = ();
         <span class="kw">type </span>Writer = ();
         <span class="kw">type </span>BlockingWriter = ();
-        <span class="kw">type </span>Appender = ();
         <span class="kw">type </span>Pager = ();
         <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/raw/oio/write/append_object_write.rs.html b/docs/rust/src/opendal/raw/oio/write/append_object_write.rs.html
new file mode 100644
index 000000000..5eb2281a9
--- /dev/null
+++ b/docs/rust/src/opendal/raw/oio/write/append_object_write.rs.html
@@ -0,0 +1,353 @@
+<!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="Source of the Rust file `core/src/raw/oio/write/append_object_write.rs`."><title>append_object_write.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="f [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</a>
+<a href="#64" id="64">64</a>
+<a href="#65" id="65">65</a>
+<a href="#66" id="66">66</a>
+<a href="#67" id="67">67</a>
+<a href="#68" id="68">68</a>
+<a href="#69" id="69">69</a>
+<a href="#70" id="70">70</a>
+<a href="#71" id="71">71</a>
+<a href="#72" id="72">72</a>
+<a href="#73" id="73">73</a>
+<a href="#74" id="74">74</a>
+<a href="#75" id="75">75</a>
+<a href="#76" id="76">76</a>
+<a href="#77" id="77">77</a>
+<a href="#78" id="78">78</a>
+<a href="#79" id="79">79</a>
+<a href="#80" id="80">80</a>
+<a href="#81" id="81">81</a>
+<a href="#82" id="82">82</a>
+<a href="#83" id="83">83</a>
+<a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<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>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<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>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<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>
+</pre></div><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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// &quot;License&quot;); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="kw">use </span>async_trait::async_trait;
+<span class="kw">use </span>bytes::Bytes;
+
+<span class="kw">use </span><span class="kw">crate</span>::raw::oio::Streamer;
+<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
+<span class="kw">use crate</span>::<span class="kw-2">*</span>;
+
+<span class="kw">const </span>DEFAULT_WRITE_MIN_SIZE: usize = <span class="number">8 </span>* <span class="number">1024 </span>* <span class="number">1024</span>;
+
+<span class="doccomment">/// AppendObjectWrite is used to implement [`Write`] based on append
+/// object. By implementing AppendObjectWrite, services don&#39;t need to
+/// care about the details of buffering and uploading parts.
+///
+/// The layout after adopting [`AppendObjectWrite`]:
+///
+/// - Services impl `AppendObjectWrite`
+/// - `AppendObjectWriter` impl `Write`
+/// - Expose `AppendObjectWriter` as `Accessor::Writer`
+</span><span class="attr">#[async_trait]
+</span><span class="kw">pub trait </span>AppendObjectWrite: Send + Sync + Unpin {
+    <span class="doccomment">/// Get the current offset of the append object.
+    ///
+    /// Returns `0` if the object is not exist.
+    </span><span class="kw">async fn </span>offset(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;u64&gt;;
+
+    <span class="doccomment">/// Append the data to the end of this object.
+    </span><span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, offset: u64, size: u64, body: AsyncBody) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt;;
+}
+
+<span class="doccomment">/// AppendObjectWriter will implements [`Write`] based on append object.
+///
+/// ## TODO
+///
+/// - Allow users to switch to un-buffered mode if users write 16MiB every time.
+</span><span class="kw">pub struct </span>AppendObjectWriter&lt;W: AppendObjectWrite&gt; {
+    inner: W,
+
+    offset: <span class="prelude-ty">Option</span>&lt;u64&gt;,
+    buffer: oio::VectorCursor,
+    buffer_size: usize,
+}
+
+<span class="kw">impl</span>&lt;W: AppendObjectWrite&gt; AppendObjectWriter&lt;W&gt; {
+    <span class="doccomment">/// Create a new AppendObjectWriter.
+    </span><span class="kw">pub fn </span>new(inner: W) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            inner,
+            offset: <span class="prelude-val">None</span>,
+            buffer: oio::VectorCursor::new(),
+            buffer_size: DEFAULT_WRITE_MIN_SIZE,
+        }
+    }
+
+    <span class="doccomment">/// Configure the write_min_size.
+    ///
+    /// write_min_size is used to control the size of internal buffer.
+    ///
+    /// AppendObjectWriter will flush the buffer to storage when
+    /// the size of buffer is larger than write_min_size.
+    ///
+    /// This value is default to 8 MiB.
+    </span><span class="kw">pub fn </span>with_write_min_size(<span class="kw-2">mut </span><span class="self">self</span>, v: usize) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.buffer_size = v;
+        <span class="self">self
+    </span>}
+
+    <span class="kw">async fn </span>offset(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;u64&gt; {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(offset) = <span class="self">self</span>.offset {
+            <span class="kw">return </span><span class="prelude-val">Ok</span>(offset);
+        }
+
+        <span class="kw">let </span>offset = <span class="self">self</span>.inner.offset().<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="self">self</span>.offset = <span class="prelude-val">Some</span>(offset);
+
+        <span class="prelude-val">Ok</span>(offset)
+    }
+}
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl</span>&lt;W&gt; oio::Write <span class="kw">for </span>AppendObjectWriter&lt;W&gt;
+<span class="kw">where
+    </span>W: AppendObjectWrite,
+{
+    <span class="kw">async fn </span>write(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>offset = <span class="self">self</span>.offset().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="comment">// Ignore empty bytes
+        </span><span class="kw">if </span>bs.is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Ok</span>(());
+        }
+
+        <span class="self">self</span>.buffer.push(bs);
+        <span class="comment">// Return directly if the buffer is not full
+        </span><span class="kw">if </span><span class="self">self</span>.buffer.len() &lt;= <span class="self">self</span>.buffer_size {
+            <span class="kw">return </span><span class="prelude-val">Ok</span>(());
+        }
+
+        <span class="kw">let </span>bs = <span class="self">self</span>.buffer.peak_all();
+        <span class="kw">let </span>size = bs.len();
+
+        <span class="kw">match </span><span class="self">self
+            </span>.inner
+            .append(offset, size <span class="kw">as </span>u64, AsyncBody::Bytes(bs))
+            .<span class="kw">await
+        </span>{
+            <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; {
+                <span class="self">self</span>.buffer.take(size);
+                <span class="self">self</span>.offset = <span class="prelude-val">Some</span>(offset + size <span class="kw">as </span>u64);
+                <span class="prelude-val">Ok</span>(())
+            }
+            <span class="prelude-val">Err</span>(e) =&gt; {
+                <span class="comment">// If the upload fails, we should pop the given bs to make sure
+                // write is re-enter safe.
+                </span><span class="self">self</span>.buffer.pop();
+                <span class="prelude-val">Err</span>(e)
+            }
+        }
+    }
+
+    <span class="kw">async fn </span>sink(<span class="kw-2">&amp;mut </span><span class="self">self</span>, size: u64, s: Streamer) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">if </span>!<span class="self">self</span>.buffer.is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::InvalidInput,
+                <span class="string">&quot;Writer::sink should not be used mixed with existing buffer&quot;</span>,
+            ));
+        }
+
+        <span class="kw">let </span>offset = <span class="self">self</span>.offset().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="self">self</span>.inner
+            .append(offset, size, AsyncBody::Stream(s))
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="self">self</span>.offset = <span class="prelude-val">Some</span>(offset + size);
+
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="comment">// Make sure internal buffer has been flushed.
+        </span><span class="kw">if </span>!<span class="self">self</span>.buffer.is_empty() {
+            <span class="kw">let </span>bs = <span class="self">self</span>.buffer.peak_exact(<span class="self">self</span>.buffer.len());
+
+            <span class="kw">let </span>offset = <span class="self">self</span>.offset().<span class="kw">await</span><span class="question-mark">?</span>;
+            <span class="kw">let </span>size = bs.len() <span class="kw">as </span>u64;
+            <span class="self">self</span>.inner
+                .append(offset, size, AsyncBody::Bytes(bs))
+                .<span class="kw">await</span><span class="question-mark">?</span>;
+
+            <span class="self">self</span>.buffer.clear();
+            <span class="self">self</span>.offset = <span class="prelude-val">Some</span>(offset + size);
+        }
+
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="kw">async fn </span>abort(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="prelude-val">Ok</span>(())
+    }
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/oio/write/mod.rs.html b/docs/rust/src/opendal/raw/oio/write/mod.rs.html
index ac7abab7d..abbc36662 100644
--- a/docs/rust/src/opendal/raw/oio/write/mod.rs.html
+++ b/docs/rust/src/opendal/raw/oio/write/mod.rs.html
@@ -26,6 +26,13 @@
 <a href="#26" id="26">26</a>
 <a href="#27" id="27">27</a>
 <a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
 </pre></div><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
@@ -50,8 +57,15 @@
 <span class="kw">pub use </span>api::WriteOperation;
 <span class="kw">pub use </span>api::Writer;
 
+<span class="kw">mod </span>two_ways_write;
+<span class="kw">pub use </span>two_ways_write::TwoWaysWriter;
+
 <span class="kw">mod </span>multipart_upload_write;
 <span class="kw">pub use </span>multipart_upload_write::MultipartUploadPart;
 <span class="kw">pub use </span>multipart_upload_write::MultipartUploadWrite;
 <span class="kw">pub use </span>multipart_upload_write::MultipartUploadWriter;
+
+<span class="kw">mod </span>append_object_write;
+<span class="kw">pub use </span>append_object_write::AppendObjectWrite;
+<span class="kw">pub use </span>append_object_write::AppendObjectWriter;
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/oio/write/two_ways_write.rs.html b/docs/rust/src/opendal/raw/oio/write/two_ways_write.rs.html
new file mode 100644
index 000000000..579de1896
--- /dev/null
+++ b/docs/rust/src/opendal/raw/oio/write/two_ways_write.rs.html
@@ -0,0 +1,129 @@
+<!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="Source of the Rust file `core/src/raw/oio/write/two_ways_write.rs`."><title>two_ways_write.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type= [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</a>
+<a href="#64" id="64">64</a>
+</pre></div><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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// &quot;License&quot;); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="kw">use </span>async_trait::async_trait;
+<span class="kw">use </span>bytes::Bytes;
+
+<span class="kw">use </span><span class="kw">crate</span>::raw::oio::Streamer;
+<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
+<span class="kw">use crate</span>::<span class="kw-2">*</span>;
+
+<span class="doccomment">/// TwoWaysWrite is used to implement [`Write`] based on two ways.
+///
+/// Users can wrap two different writers together.
+</span><span class="kw">pub enum </span>TwoWaysWriter&lt;L: oio::Write, R: oio::Write&gt; {
+    <span class="doccomment">/// The left side for the [`TwoWaysWriter`].
+    </span>Left(L),
+    <span class="doccomment">/// The right side for the [`TwoWaysWriter`].
+    </span>Right(R),
+}
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl</span>&lt;L: oio::Write, R: oio::Write&gt; oio::Write <span class="kw">for </span>TwoWaysWriter&lt;L, R&gt; {
+    <span class="kw">async fn </span>write(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">match </span><span class="self">self </span>{
+            <span class="self">Self</span>::Left(l) =&gt; l.write(bs).<span class="kw">await</span>,
+            <span class="self">Self</span>::Right(r) =&gt; r.write(bs).<span class="kw">await</span>,
+        }
+    }
+
+    <span class="kw">async fn </span>sink(<span class="kw-2">&amp;mut </span><span class="self">self</span>, size: u64, s: Streamer) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">match </span><span class="self">self </span>{
+            <span class="self">Self</span>::Left(l) =&gt; l.sink(size, s).<span class="kw">await</span>,
+            <span class="self">Self</span>::Right(r) =&gt; r.sink(size, s).<span class="kw">await</span>,
+        }
+    }
+
+    <span class="kw">async fn </span>abort(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">match </span><span class="self">self </span>{
+            <span class="self">Self</span>::Left(l) =&gt; l.abort().<span class="kw">await</span>,
+            <span class="self">Self</span>::Right(r) =&gt; r.abort().<span class="kw">await</span>,
+        }
+    }
+
+    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">match </span><span class="self">self </span>{
+            <span class="self">Self</span>::Left(l) =&gt; l.close().<span class="kw">await</span>,
+            <span class="self">Self</span>::Right(r) =&gt; r.close().<span class="kw">await</span>,
+        }
+    }
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/operation.rs.html b/docs/rust/src/opendal/raw/operation.rs.html
index 8ea154c3c..f9a53608a 100644
--- a/docs/rust/src/opendal/raw/operation.rs.html
+++ b/docs/rust/src/opendal/raw/operation.rs.html
@@ -107,9 +107,6 @@
 <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>
 </pre></div><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
@@ -143,8 +140,6 @@
     </span>Read,
     <span class="doccomment">/// Operation for [`crate::raw::Accessor::write`]
     </span>Write,
-    <span class="doccomment">/// Operation for [`crate::raw::Accessor::append`]
-    </span>Append,
     <span class="doccomment">/// Operation for [`crate::raw::Accessor::copy`]
     </span>Copy,
     <span class="doccomment">/// Operation for [`crate::raw::Accessor::rename`]
@@ -197,7 +192,6 @@
             Operation::CreateDir =&gt; <span class="string">&quot;create_dir&quot;</span>,
             Operation::Read =&gt; <span class="string">&quot;read&quot;</span>,
             Operation::Write =&gt; <span class="string">&quot;write&quot;</span>,
-            Operation::Append =&gt; <span class="string">&quot;append&quot;</span>,
             Operation::Copy =&gt; <span class="string">&quot;copy&quot;</span>,
             Operation::Rename =&gt; <span class="string">&quot;rename&quot;</span>,
             Operation::Stat =&gt; <span class="string">&quot;stat&quot;</span>,
diff --git a/docs/rust/src/opendal/raw/ops.rs.html b/docs/rust/src/opendal/raw/ops.rs.html
index 5fe043354..c77ca98b8 100644
--- a/docs/rust/src/opendal/raw/ops.rs.html
+++ b/docs/rust/src/opendal/raw/ops.rs.html
@@ -510,33 +510,6 @@
 <a href="#510" id="510">510</a>
 <a href="#511" id="511">511</a>
 <a href="#512" id="512">512</a>
-<a href="#513" id="513">513</a>
-<a href="#514" id="514">514</a>
-<a href="#515" id="515">515</a>
-<a href="#516" id="516">516</a>
-<a href="#517" id="517">517</a>
-<a href="#518" id="518">518</a>
-<a href="#519" id="519">519</a>
-<a href="#520" id="520">520</a>
-<a href="#521" id="521">521</a>
-<a href="#522" id="522">522</a>
-<a href="#523" id="523">523</a>
-<a href="#524" id="524">524</a>
-<a href="#525" id="525">525</a>
-<a href="#526" id="526">526</a>
-<a href="#527" id="527">527</a>
-<a href="#528" id="528">528</a>
-<a href="#529" id="529">529</a>
-<a href="#530" id="530">530</a>
-<a href="#531" id="531">531</a>
-<a href="#532" id="532">532</a>
-<a href="#533" id="533">533</a>
-<a href="#534" id="534">534</a>
-<a href="#535" id="535">535</a>
-<a href="#536" id="536">536</a>
-<a href="#537" id="537">537</a>
-<a href="#538" id="538">538</a>
-<a href="#539" id="539">539</a>
 </pre></div><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
@@ -943,6 +916,8 @@
 <span class="doccomment">/// Args for `write` operation.
 </span><span class="attr">#[derive(Debug, Clone, Default)]
 </span><span class="kw">pub struct </span>OpWrite {
+    append: bool,
+
     content_length: <span class="prelude-ty">Option</span>&lt;u64&gt;,
     content_type: <span class="prelude-ty">Option</span>&lt;String&gt;,
     content_disposition: <span class="prelude-ty">Option</span>&lt;String&gt;,
@@ -957,6 +932,25 @@
         <span class="self">Self</span>::default()
     }
 
+    <span class="doccomment">/// Get the append from op.
+    ///
+    /// The append is the flag to indicate that this write operation is an append operation.
+    </span><span class="kw">pub fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; bool {
+        <span class="self">self</span>.append
+    }
+
+    <span class="doccomment">/// Set the append mode of op.
+    ///
+    /// If the append mode is set, the data will be appended to the end of the file.
+    ///
+    /// # Notes
+    ///
+    /// Service could return `Unsupported` if the underlying storage does not support append.
+    </span><span class="kw">pub fn </span>with_append(<span class="kw-2">mut </span><span class="self">self</span>, append: bool) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.append = append;
+        <span class="self">self
+    </span>}
+
     <span class="doccomment">/// Get the content length from op.
     ///
     /// The content length is the total length of the data to be written.
@@ -1007,54 +1001,6 @@
     </span>}
 }
 
-<span class="doccomment">/// Args for `append` operation.
-</span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>OpAppend {
-    content_type: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    content_disposition: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    cache_control: <span class="prelude-ty">Option</span>&lt;String&gt;,
-}
-
-<span class="kw">impl </span>OpAppend {
-    <span class="doccomment">/// Create a new `OpAppend`.
-    </span><span class="kw">pub fn </span>new() -&gt; <span class="self">Self </span>{
-        <span class="self">Self</span>::default()
-    }
-
-    <span class="doccomment">/// Get the content type from option
-    </span><span class="kw">pub fn </span>content_type(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt; {
-        <span class="self">self</span>.content_type.as_deref()
-    }
-
-    <span class="doccomment">/// Set the content type of option
-    </span><span class="kw">pub fn </span>with_content_type(<span class="kw-2">mut </span><span class="self">self</span>, content_type: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.content_type = <span class="prelude-val">Some</span>(content_type.to_string());
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Get the content disposition from option
-    </span><span class="kw">pub fn </span>content_disposition(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt; {
-        <span class="self">self</span>.content_disposition.as_deref()
-    }
-
-    <span class="doccomment">/// Set the content disposition of option
-    </span><span class="kw">pub fn </span>with_content_disposition(<span class="kw-2">mut </span><span class="self">self</span>, content_disposition: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.content_disposition = <span class="prelude-val">Some</span>(content_disposition.to_string());
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Get the cache control from option
-    </span><span class="kw">pub fn </span>cache_control(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt; {
-        <span class="self">self</span>.cache_control.as_deref()
-    }
-
-    <span class="doccomment">/// Set the cache control of option
-    </span><span class="kw">pub fn </span>with_cache_control(<span class="kw-2">mut </span><span class="self">self</span>, cache_control: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.cache_control = <span class="prelude-val">Some</span>(cache_control.to_string());
-        <span class="self">self
-    </span>}
-}
-
 <span class="doccomment">/// Args for `copy` operation.
 </span><span class="attr">#[derive(Debug, Clone, Default)]
 </span><span class="kw">pub struct </span>OpCopy {}
diff --git a/docs/rust/src/opendal/raw/rps.rs.html b/docs/rust/src/opendal/raw/rps.rs.html
index 520dfc3a4..4020d3e13 100644
--- a/docs/rust/src/opendal/raw/rps.rs.html
+++ b/docs/rust/src/opendal/raw/rps.rs.html
@@ -255,17 +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>
-<a href="#262" id="262">262</a>
-<a href="#263" id="263">263</a>
-<a href="#264" id="264">264</a>
-<a href="#265" id="265">265</a>
-<a href="#266" id="266">266</a>
-<a href="#267" id="267">267</a>
-<a href="#268" id="268">268</a>
 </pre></div><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
@@ -463,17 +452,6 @@
     }
 }
 
-<span class="doccomment">/// Reply for `append` operation.
-</span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>RpAppend {}
-
-<span class="kw">impl </span>RpAppend {
-    <span class="doccomment">/// Create a new reply for `append`.
-    </span><span class="kw">pub fn </span>new() -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{}
-    }
-}
-
 <span class="doccomment">/// Reply for `copy` operation.
 </span><span class="attr">#[derive(Debug, Clone, Default)]
 </span><span class="kw">pub struct </span>RpCopy {}
diff --git a/docs/rust/src/opendal/services/azblob/appender.rs.html b/docs/rust/src/opendal/services/azblob/appender.rs.html
deleted file mode 100644
index 7d222a915..000000000
--- a/docs/rust/src/opendal/services/azblob/appender.rs.html
+++ /dev/null
@@ -1,291 +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="Source of the Rust file `core/src/services/azblob/appender.rs`."><title>appender.rs - source</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"  [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<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>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<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>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
-<a href="#138" id="138">138</a>
-<a href="#139" id="139">139</a>
-<a href="#140" id="140">140</a>
-<a href="#141" id="141">141</a>
-<a href="#142" id="142">142</a>
-<a href="#143" id="143">143</a>
-<a href="#144" id="144">144</a>
-<a href="#145" id="145">145</a>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::sync::Arc;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>http::StatusCode;
-
-<span class="kw">use </span><span class="kw">super</span>::core::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">const </span>X_MS_BLOB_TYPE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-ms-blob-type&quot;</span>;
-<span class="kw">const </span>X_MS_BLOB_APPEND_OFFSET: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-ms-blob-append-offset&quot;</span>;
-
-<span class="kw">pub struct </span>AzblobAppender {
-    core: Arc&lt;AzblobCore&gt;,
-
-    op: OpAppend,
-    path: String,
-
-    position: <span class="prelude-ty">Option</span>&lt;u64&gt;,
-}
-
-<span class="kw">impl </span>AzblobAppender {
-    <span class="kw">pub fn </span>new(core: Arc&lt;AzblobCore&gt;, path: <span class="kw-2">&amp;</span>str, op: OpAppend) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{
-            core,
-            op,
-            path: path.to_string(),
-            position: <span class="prelude-val">None</span>,
-        }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Append <span class="kw">for </span>AzblobAppender {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="comment">// If the position is not set, we need to check the blob.
-        // Any successful append operation will set the position.
-        </span><span class="kw">if </span><span class="self">self</span>.position.is_none() {
-            <span class="kw">let </span>resp = <span class="self">self
-                </span>.core
-                .azblob_get_blob_properties(<span class="kw-2">&amp;</span><span class="self">self</span>.path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>)
-                .<span class="kw">await</span><span class="question-mark">?</span>;
-
-            <span class="kw">let </span>status = resp.status();
-
-            <span class="kw">match </span>status {
-                <span class="comment">// Just check the blob type.
-                // If it is not an appendable blob, return an error.
-                // We can not get the append position of the blob here.
-                </span>StatusCode::OK =&gt; {
-                    <span class="kw">let </span>headers = resp.headers();
-                    <span class="kw">let </span>blob_type = headers.get(X_MS_BLOB_TYPE).and_then(|v| v.to_str().ok());
-                    <span class="kw">if </span>blob_type != <span class="prelude-val">Some</span>(<span class="string">&quot;AppendBlob&quot;</span>) {
-                        <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                            ErrorKind::ConditionNotMatch,
-                            <span class="string">&quot;the blob is not an appendable blob.&quot;</span>,
-                        ));
-                    }
-                }
-
-                <span class="comment">// If the blob is not existing, we need to create one.
-                </span>StatusCode::NOT_FOUND =&gt; {
-                    <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.core.azblob_init_appendable_blob_request(
-                        <span class="kw-2">&amp;</span><span class="self">self</span>.path,
-                        <span class="self">self</span>.op.content_type(),
-                        <span class="self">self</span>.op.cache_control(),
-                    )<span class="question-mark">?</span>;
-
-                    <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-                    <span class="kw">let </span>resp = <span class="self">self</span>.core.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-                    <span class="kw">let </span>status = resp.status();
-                    <span class="kw">match </span>status {
-                        StatusCode::CREATED =&gt; {
-                            <span class="comment">// do nothing
-                        </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>);
-                        }
-                    }
-
-                    <span class="self">self</span>.position = <span class="prelude-val">Some</span>(<span class="number">0</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>);
-                }
-            }
-        }
-
-        <span class="kw">let </span>size = bs.len();
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.core.azblob_append_blob_request(
-            <span class="kw-2">&amp;</span><span class="self">self</span>.path,
-            size,
-            <span class="self">self</span>.position,
-            AsyncBody::Bytes(bs),
-        )<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-        <span class="kw">match </span>status {
-            StatusCode::CREATED =&gt; {
-                <span class="kw">let </span>headers = resp.headers();
-                <span class="kw">let </span>position = headers
-                    .get(X_MS_BLOB_APPEND_OFFSET)
-                    .and_then(|v| v.to_str().ok())
-                    .and_then(|v| v.parse::&lt;u64&gt;().ok());
-                <span class="self">self</span>.position = position.map(|v| v + size <span class="kw">as </span>u64);
-            }
-            <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>);
-            }
-        }
-
-        <span class="prelude-val">Ok</span>(())
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="prelude-val">Ok</span>(())
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/azblob/backend.rs.html b/docs/rust/src/opendal/services/azblob/backend.rs.html
index 5ae570315..2024eab4c 100644
--- a/docs/rust/src/opendal/services/azblob/backend.rs.html
+++ b/docs/rust/src/opendal/services/azblob/backend.rs.html
@@ -921,25 +921,6 @@
 <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>
 </pre></div><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
@@ -974,7 +955,6 @@
 <span class="kw">use </span>sha2::Digest;
 <span class="kw">use </span>sha2::Sha256;
 
-<span class="kw">use </span><span class="kw">super</span>::appender::AzblobAppender;
 <span class="kw">use </span><span class="kw">super</span>::batch::parse_batch_delete_response;
 <span class="kw">use </span><span class="kw">super</span>::error::parse_error;
 <span class="kw">use </span><span class="kw">super</span>::pager::AzblobPager;
@@ -1451,7 +1431,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = AzblobWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = AzblobAppender;
     <span class="kw">type </span>Pager = AzblobPager;
     <span class="kw">type </span>BlockingPager = ();
 
@@ -1473,14 +1452,11 @@
                 read_with_override_content_disposition: <span class="bool-val">true</span>,
 
                 write: <span class="bool-val">true</span>,
+                write_can_append: <span class="bool-val">true</span>,
                 write_can_sink: <span class="bool-val">true</span>,
                 write_with_cache_control: <span class="bool-val">true</span>,
                 write_with_content_type: <span class="bool-val">true</span>,
 
-                append: <span class="bool-val">true</span>,
-                append_with_cache_control: <span class="bool-val">true</span>,
-                append_with_content_type: <span class="bool-val">true</span>,
-
                 delete: <span class="bool-val">true</span>,
                 create_dir: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
@@ -1549,26 +1525,12 @@
     }
 
     <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
-        <span class="kw">if </span>args.content_length().is_none() {
-            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                ErrorKind::Unsupported,
-                <span class="string">&quot;write without content length is not supported&quot;</span>,
-            ));
-        }
-
         <span class="prelude-val">Ok</span>((
             RpWrite::default(),
             AzblobWriter::new(<span class="self">self</span>.core.clone(), args, path.to_string()),
         ))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="prelude-val">Ok</span>((
-            RpAppend::default(),
-            AzblobAppender::new(<span class="self">self</span>.core.clone(), path, args),
-        ))
-    }
-
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, _args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
         <span class="kw">let </span>resp = <span class="self">self</span>.core.azblob_copy_blob(from, to).<span class="kw">await</span><span class="question-mark">?</span>;
 
diff --git a/docs/rust/src/opendal/services/azblob/core.rs.html b/docs/rust/src/opendal/services/azblob/core.rs.html
index 6ca7bf667..12dc7cd2b 100644
--- a/docs/rust/src/opendal/services/azblob/core.rs.html
+++ b/docs/rust/src/opendal/services/azblob/core.rs.html
@@ -928,7 +928,7 @@
     </span><span class="kw">pub fn </span>azblob_append_blob_request(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        size: usize,
+        size: u64,
         position: <span class="prelude-ty">Option</span>&lt;u64&gt;,
         body: AsyncBody,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
diff --git a/docs/rust/src/opendal/services/azblob/mod.rs.html b/docs/rust/src/opendal/services/azblob/mod.rs.html
index eea4309e0..73ba40ecf 100644
--- a/docs/rust/src/opendal/services/azblob/mod.rs.html
+++ b/docs/rust/src/opendal/services/azblob/mod.rs.html
@@ -23,7 +23,6 @@
 <a href="#23" id="23">23</a>
 <a href="#24" id="24">24</a>
 <a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
 </pre></div><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
@@ -44,7 +43,6 @@
 </span><span class="kw">mod </span>backend;
 <span class="kw">pub use </span>backend::AzblobBuilder <span class="kw">as </span>Azblob;
 
-<span class="kw">mod </span>appender;
 <span class="kw">mod </span>batch;
 <span class="kw">mod </span>core;
 <span class="kw">mod </span>error;
diff --git a/docs/rust/src/opendal/services/azblob/writer.rs.html b/docs/rust/src/opendal/services/azblob/writer.rs.html
index 292ad1e7d..2448359e9 100644
--- a/docs/rust/src/opendal/services/azblob/writer.rs.html
+++ b/docs/rust/src/opendal/services/azblob/writer.rs.html
@@ -82,6 +82,125 @@
 <a href="#82" id="82">82</a>
 <a href="#83" id="83">83</a>
 <a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<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>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<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>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<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>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
+<a href="#186" id="186">186</a>
+<a href="#187" id="187">187</a>
+<a href="#188" id="188">188</a>
+<a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
 </pre></div><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
@@ -110,16 +229,26 @@
 <span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
 <span class="kw">use crate</span>::<span class="kw-2">*</span>;
 
+<span class="kw">const </span>X_MS_BLOB_TYPE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-ms-blob-type&quot;</span>;
+<span class="kw">const </span>X_MS_BLOB_APPEND_OFFSET: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-ms-blob-append-offset&quot;</span>;
+
 <span class="kw">pub struct </span>AzblobWriter {
     core: Arc&lt;AzblobCore&gt;,
 
     op: OpWrite,
     path: String,
+
+    position: <span class="prelude-ty">Option</span>&lt;u64&gt;,
 }
 
 <span class="kw">impl </span>AzblobWriter {
     <span class="kw">pub fn </span>new(core: Arc&lt;AzblobCore&gt;, op: OpWrite, path: String) -&gt; <span class="self">Self </span>{
-        AzblobWriter { core, op, path }
+        AzblobWriter {
+            core,
+            op,
+            path,
+            position: <span class="prelude-val">None</span>,
+        }
     }
 
     <span class="kw">async fn </span>write_oneshot(<span class="kw-2">&amp;</span><span class="self">self</span>, size: u64, body: AsyncBody) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
@@ -145,18 +274,127 @@
             <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
         }
     }
+
+    <span class="kw">async fn </span>current_position(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;u64&gt;&gt; {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.position {
+            <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(v));
+        }
+
+        <span class="comment">// TODO: we should check with current etag to make sure file not changed.
+        </span><span class="kw">let </span>resp = <span class="self">self
+            </span>.core
+            .azblob_get_blob_properties(<span class="kw-2">&amp;</span><span class="self">self</span>.path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>)
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>status = resp.status();
+
+        <span class="kw">match </span>status {
+            <span class="comment">// Just check the blob type.
+            // If it is not an appendable blob, return an error.
+            // We can not get the append position of the blob here.
+            </span>StatusCode::OK =&gt; {
+                <span class="kw">let </span>headers = resp.headers();
+                <span class="kw">let </span>blob_type = headers.get(X_MS_BLOB_TYPE).and_then(|v| v.to_str().ok());
+                <span class="kw">if </span>blob_type != <span class="prelude-val">Some</span>(<span class="string">&quot;AppendBlob&quot;</span>) {
+                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                        ErrorKind::ConditionNotMatch,
+                        <span class="string">&quot;the blob is not an appendable blob.&quot;</span>,
+                    ));
+                }
+                <span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>)
+            }
+            <span class="comment">// If the blob is not existing, we need to create one.
+            </span>StatusCode::NOT_FOUND =&gt; {
+                <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.core.azblob_init_appendable_blob_request(
+                    <span class="kw-2">&amp;</span><span class="self">self</span>.path,
+                    <span class="self">self</span>.op.content_type(),
+                    <span class="self">self</span>.op.cache_control(),
+                )<span class="question-mark">?</span>;
+
+                <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+                <span class="kw">let </span>resp = <span class="self">self</span>.core.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+                <span class="kw">let </span>status = resp.status();
+                <span class="kw">match </span>status {
+                    StatusCode::CREATED =&gt; {
+                        <span class="comment">// do nothing
+                    </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>);
+                    }
+                }
+
+                <span class="self">self</span>.position = <span class="prelude-val">Some</span>(<span class="number">0</span>);
+                <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(<span class="number">0</span>))
+            }
+            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+        }
+    }
+
+    <span class="kw">async fn </span>append_oneshot(<span class="kw-2">&amp;mut </span><span class="self">self</span>, size: u64, body: AsyncBody) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let _ </span>= <span class="self">self</span>.current_position().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span><span class="kw-2">mut </span>req =
+            <span class="self">self</span>.core
+                .azblob_append_blob_request(<span class="kw-2">&amp;</span><span class="self">self</span>.path, size, <span class="self">self</span>.position, body)<span class="question-mark">?</span>;
+
+        <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>resp = <span class="self">self</span>.core.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>status = resp.status();
+        <span class="kw">match </span>status {
+            StatusCode::CREATED =&gt; {
+                <span class="kw">let </span>headers = resp.headers();
+                <span class="kw">let </span>position = headers
+                    .get(X_MS_BLOB_APPEND_OFFSET)
+                    .and_then(|v| v.to_str().ok())
+                    .and_then(|v| v.parse::&lt;u64&gt;().ok());
+                <span class="self">self</span>.position = position.map(|v| v + size);
+            }
+            <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>);
+            }
+        }
+
+        <span class="prelude-val">Ok</span>(())
+    }
 }
 
 <span class="attr">#[async_trait]
 </span><span class="kw">impl </span>oio::Write <span class="kw">for </span>AzblobWriter {
     <span class="kw">async fn </span>write(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.write_oneshot(bs.len() <span class="kw">as </span>u64, AsyncBody::Bytes(bs))
-            .<span class="kw">await
-    </span>}
+        <span class="kw">if </span><span class="self">self</span>.op.append() {
+            <span class="self">self</span>.append_oneshot(bs.len() <span class="kw">as </span>u64, AsyncBody::Bytes(bs))
+                .<span class="kw">await
+        </span>} <span class="kw">else </span>{
+            <span class="kw">if </span><span class="self">self</span>.op.content_length().is_none() {
+                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                    ErrorKind::Unsupported,
+                    <span class="string">&quot;write without content length is not supported&quot;</span>,
+                ));
+            }
+
+            <span class="self">self</span>.write_oneshot(bs.len() <span class="kw">as </span>u64, AsyncBody::Bytes(bs))
+                .<span class="kw">await
+        </span>}
+    }
 
     <span class="kw">async fn </span>sink(<span class="kw-2">&amp;mut </span><span class="self">self</span>, size: u64, s: oio::Streamer) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.write_oneshot(size, AsyncBody::Stream(s)).<span class="kw">await
-    </span>}
+        <span class="kw">if </span><span class="self">self</span>.op.append() {
+            <span class="self">self</span>.append_oneshot(size, AsyncBody::Stream(s)).<span class="kw">await
+        </span>} <span class="kw">else </span>{
+            <span class="kw">if </span><span class="self">self</span>.op.content_length().is_none() {
+                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                    ErrorKind::Unsupported,
+                    <span class="string">&quot;write without content length is not supported&quot;</span>,
+                ));
+            }
+
+            <span class="self">self</span>.write_oneshot(size, AsyncBody::Stream(s)).<span class="kw">await
+        </span>}
+    }
 
     <span class="kw">async fn </span>abort(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
         <span class="prelude-val">Ok</span>(())
diff --git a/docs/rust/src/opendal/services/azdfs/backend.rs.html b/docs/rust/src/opendal/services/azdfs/backend.rs.html
index f489bb87e..de08d452f 100644
--- a/docs/rust/src/opendal/services/azdfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/azdfs/backend.rs.html
@@ -456,7 +456,6 @@
 <a href="#456" id="456">456</a>
 <a href="#457" id="457">457</a>
 <a href="#458" id="458">458</a>
-<a href="#459" id="459">459</a>
 </pre></div><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
@@ -691,7 +690,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = AzdfsWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = AzdfsPager;
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/cos/appender.rs.html b/docs/rust/src/opendal/services/cos/appender.rs.html
deleted file mode 100644
index 24a729647..000000000
--- a/docs/rust/src/opendal/services/cos/appender.rs.html
+++ /dev/null
@@ -1,325 +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="Source of the Rust file `core/src/services/cos/appender.rs`."><title>appender.rs - source</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" cro [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<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>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<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>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
-<a href="#138" id="138">138</a>
-<a href="#139" id="139">139</a>
-<a href="#140" id="140">140</a>
-<a href="#141" id="141">141</a>
-<a href="#142" id="142">142</a>
-<a href="#143" id="143">143</a>
-<a href="#144" id="144">144</a>
-<a href="#145" id="145">145</a>
-<a href="#146" id="146">146</a>
-<a href="#147" id="147">147</a>
-<a href="#148" id="148">148</a>
-<a href="#149" id="149">149</a>
-<a href="#150" id="150">150</a>
-<a href="#151" id="151">151</a>
-<a href="#152" id="152">152</a>
-<a href="#153" id="153">153</a>
-<a href="#154" id="154">154</a>
-<a href="#155" id="155">155</a>
-<a href="#156" id="156">156</a>
-<a href="#157" id="157">157</a>
-<a href="#158" id="158">158</a>
-<a href="#159" id="159">159</a>
-<a href="#160" id="160">160</a>
-<a href="#161" id="161">161</a>
-<a href="#162" id="162">162</a>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::sync::Arc;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>http::header::CONTENT_LENGTH;
-<span class="kw">use </span>http::StatusCode;
-
-<span class="kw">use </span><span class="kw">super</span>::core::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">pub const </span>X_COS_OBJECT_TYPE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-cos-object-type&quot;</span>;
-<span class="kw">pub const </span>X_COS_NEXT_APPEND_POSITION: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-cos-next-append-position&quot;</span>;
-
-<span class="kw">pub struct </span>CosAppender {
-    core: Arc&lt;CosCore&gt;,
-
-    op: OpAppend,
-    path: String,
-
-    position: <span class="prelude-ty">Option</span>&lt;u64&gt;,
-}
-
-<span class="kw">impl </span>CosAppender {
-    <span class="kw">pub fn </span>new(core: Arc&lt;CosCore&gt;, path: <span class="kw-2">&amp;</span>str, op: OpAppend) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{
-            core,
-            op,
-            path: path.to_string(),
-            position: <span class="prelude-val">None</span>,
-        }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Append <span class="kw">for </span>CosAppender {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="comment">// If the position is not set, we need to get the current position.
-        </span><span class="kw">if </span><span class="self">self</span>.position.is_none() {
-            <span class="kw">let </span>resp = <span class="self">self</span>.core.cos_head_object(<span class="kw-2">&amp;</span><span class="self">self</span>.path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>).<span class="kw">await</span><span class="question-mark">?</span>;
-
-            <span class="kw">let </span>status = resp.status();
-            <span class="kw">match </span>status {
-                StatusCode::OK =&gt; {
-                    <span class="kw">let </span>object_type = resp
-                        .headers()
-                        .get(X_COS_OBJECT_TYPE)
-                        .and_then(|v| v.to_str().ok())
-                        .ok_or_else(|| {
-                            Error::new(
-                                ErrorKind::Unexpected,
-                                <span class="string">&quot;missing x-cos-object-type, the object may not be appendable&quot;</span>,
-                            )
-                        })<span class="question-mark">?</span>;
-
-                    <span class="kw">if </span>object_type != <span class="string">&quot;appendable&quot; </span>{
-                        <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                            ErrorKind::Unexpected,
-                            <span class="string">&quot;object_type mismatch. the object may not be appendable&quot;</span>,
-                        ));
-                    }
-
-                    <span class="kw">let </span>position = resp
-                        .headers()
-                        .get(CONTENT_LENGTH)
-                        .and_then(|v| v.to_str().ok())
-                        .and_then(|v| v.parse::&lt;u64&gt;().ok())
-                        .ok_or_else(|| {
-                            Error::new(
-                                ErrorKind::Unexpected,
-                                <span class="string">&quot;missing content-length, the object may not be appendable&quot;</span>,
-                            )
-                        })<span class="question-mark">?</span>;
-                    <span class="self">self</span>.position = <span class="prelude-val">Some</span>(position);
-                }
-                StatusCode::NOT_FOUND =&gt; {
-                    <span class="self">self</span>.position = <span class="prelude-val">Some</span>(<span class="number">0</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>);
-                }
-            }
-        }
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.core.cos_append_object_request(
-            <span class="kw-2">&amp;</span><span class="self">self</span>.path,
-            <span class="self">self</span>.position.expect(<span class="string">&quot;position is not set&quot;</span>),
-            bs.len(),
-            <span class="kw-2">&amp;</span><span class="self">self</span>.op,
-            AsyncBody::Bytes(bs),
-        )<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::OK =&gt; {
-                <span class="kw">let </span>position = resp
-                    .headers()
-                    .get(X_COS_NEXT_APPEND_POSITION)
-                    .and_then(|v| v.to_str().ok())
-                    .and_then(|v| v.parse::&lt;u64&gt;().ok())
-                    .ok_or_else(|| {
-                        Error::new(
-                            ErrorKind::Unexpected,
-                            <span class="string">&quot;append ok but missing x-cos-next-append-position, the object may not be appendable&quot;</span>,
-                        )
-                    })<span class="question-mark">?</span>;
-                <span class="self">self</span>.position = <span class="prelude-val">Some</span>(position);
-                <span class="prelude-val">Ok</span>(())
-            }
-            StatusCode::CONFLICT =&gt; {
-                <span class="comment">// The object is not appendable or the position is not match with the object&#39;s length.
-                // If the position is not match, we could get the current position and retry.
-                </span><span class="kw">let </span>position = resp
-                    .headers()
-                    .get(X_COS_NEXT_APPEND_POSITION)
-                    .and_then(|v| v.to_str().ok())
-                    .and_then(|v| v.parse::&lt;u64&gt;().ok())
-                    .ok_or_else(|| {
-                        Error::new(
-                            ErrorKind::Unexpected,
-                            <span class="string">&quot;append conflict. missing x-cos-next-append-position, the object may not be appendable&quot;</span>,
-                        )
-                    })<span class="question-mark">?</span>;
-                <span class="self">self</span>.position = <span class="prelude-val">Some</span>(position);
-
-                <span class="comment">// Then return the error to the caller, so the caller could retry.
-                </span><span class="prelude-val">Err</span>(Error::new(
-                    ErrorKind::ConditionNotMatch,
-                    <span class="string">&quot;the position is not match with the object&#39;s length. position has been updated.&quot;</span>,
-                ))
-            }
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="prelude-val">Ok</span>(())
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/cos/backend.rs.html b/docs/rust/src/opendal/services/cos/backend.rs.html
index 773219f18..0924d90b9 100644
--- a/docs/rust/src/opendal/services/cos/backend.rs.html
+++ b/docs/rust/src/opendal/services/cos/backend.rs.html
@@ -462,6 +462,7 @@
 <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>
 </pre></div><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
@@ -496,7 +497,6 @@
 <span class="kw">use </span><span class="kw">super</span>::pager::CosPager;
 <span class="kw">use </span><span class="kw">super</span>::writer::CosWriter;
 <span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">crate</span>::services::cos::appender::CosAppender;
 <span class="kw">use crate</span>::<span class="kw-2">*</span>;
 
 <span class="kw">const </span>DEFAULT_WRITE_MIN_SIZE: usize = <span class="number">1024 </span>* <span class="number">1024</span>;
@@ -732,9 +732,11 @@
 </span><span class="kw">impl </span>Accessor <span class="kw">for </span>CosBackend {
     <span class="kw">type </span>Reader = IncomingAsyncBody;
     <span class="kw">type </span>BlockingReader = ();
-    <span class="kw">type </span>Writer = oio::MultipartUploadWriter&lt;CosWriter&gt;;
+    <span class="kw">type </span>Writer = oio::TwoWaysWriter&lt;
+        oio::MultipartUploadWriter&lt;CosWriter&gt;,
+        oio::AppendObjectWriter&lt;CosWriter&gt;,
+    &gt;;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = CosAppender;
     <span class="kw">type </span>Pager = CosPager;
     <span class="kw">type </span>BlockingPager = ();
 
@@ -755,17 +757,13 @@
                 read_with_if_none_match: <span class="bool-val">true</span>,
 
                 write: <span class="bool-val">true</span>,
+                write_can_append: <span class="bool-val">true</span>,
                 write_can_sink: <span class="bool-val">true</span>,
                 write_with_content_type: <span class="bool-val">true</span>,
                 write_with_cache_control: <span class="bool-val">true</span>,
                 write_with_content_disposition: <span class="bool-val">true</span>,
                 write_without_content_length: <span class="bool-val">true</span>,
 
-                append: <span class="bool-val">true</span>,
-                append_with_cache_control: <span class="bool-val">true</span>,
-                append_with_content_disposition: <span class="bool-val">true</span>,
-                append_with_content_type: <span class="bool-val">true</span>,
-
                 delete: <span class="bool-val">true</span>,
                 create_dir: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
@@ -823,17 +821,21 @@
     }
 
     <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
-        <span class="prelude-val">Ok</span>((
-            RpWrite::default(),
-            CosWriter::new(<span class="self">self</span>.core.clone(), path, args),
-        ))
-    }
+        <span class="kw">let </span>writer = CosWriter::new(<span class="self">self</span>.core.clone(), path, args.clone());
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="prelude-val">Ok</span>((
-            RpAppend::default(),
-            CosAppender::new(<span class="self">self</span>.core.clone(), path, args),
-        ))
+        <span class="kw">let </span>tw = <span class="kw">if </span>args.append() {
+            <span class="kw">let </span>w =
+                oio::AppendObjectWriter::new(writer).with_write_min_size(<span class="self">self</span>.core.write_min_size);
+
+            oio::TwoWaysWriter::Right(w)
+        } <span class="kw">else </span>{
+            <span class="kw">let </span>w = oio::MultipartUploadWriter::new(writer, args.content_length())
+                .with_write_min_size(<span class="self">self</span>.core.write_min_size);
+
+            oio::TwoWaysWriter::Left(w)
+        };
+
+        <span class="kw">return </span><span class="prelude-val">Ok</span>((RpWrite::default(), tw));
     }
 
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, _args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
diff --git a/docs/rust/src/opendal/services/cos/core.rs.html b/docs/rust/src/opendal/services/cos/core.rs.html
index e3ab032c7..8087ea4a9 100644
--- a/docs/rust/src/opendal/services/cos/core.rs.html
+++ b/docs/rust/src/opendal/services/cos/core.rs.html
@@ -743,8 +743,8 @@
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
         position: u64,
-        size: usize,
-        args: <span class="kw-2">&amp;</span>OpAppend,
+        size: u64,
+        args: <span class="kw-2">&amp;</span>OpWrite,
         body: AsyncBody,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
diff --git a/docs/rust/src/opendal/services/cos/mod.rs.html b/docs/rust/src/opendal/services/cos/mod.rs.html
index f64082bcc..ac0329fb2 100644
--- a/docs/rust/src/opendal/services/cos/mod.rs.html
+++ b/docs/rust/src/opendal/services/cos/mod.rs.html
@@ -22,7 +22,6 @@
 <a href="#22" id="22">22</a>
 <a href="#23" id="23">23</a>
 <a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
 </pre></div><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
@@ -43,7 +42,6 @@
 </span><span class="kw">mod </span>backend;
 <span class="kw">pub use </span>backend::CosBuilder <span class="kw">as </span>Cos;
 
-<span class="kw">mod </span>appender;
 <span class="kw">mod </span>core;
 <span class="kw">mod </span>error;
 <span class="kw">mod </span>pager;
diff --git a/docs/rust/src/opendal/services/cos/writer.rs.html b/docs/rust/src/opendal/services/cos/writer.rs.html
index 26101da16..5fd04552c 100644
--- a/docs/rust/src/opendal/services/cos/writer.rs.html
+++ b/docs/rust/src/opendal/services/cos/writer.rs.html
@@ -181,6 +181,42 @@
 <a href="#181" id="181">181</a>
 <a href="#182" id="182">182</a>
 <a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
+<a href="#186" id="186">186</a>
+<a href="#187" id="187">187</a>
+<a href="#188" id="188">188</a>
+<a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
+<a href="#204" id="204">204</a>
+<a href="#205" id="205">205</a>
+<a href="#206" id="206">206</a>
+<a href="#207" id="207">207</a>
+<a href="#208" id="208">208</a>
+<a href="#209" id="209">209</a>
+<a href="#210" id="210">210</a>
+<a href="#211" id="211">211</a>
+<a href="#212" id="212">212</a>
+<a href="#213" id="213">213</a>
+<a href="#214" id="214">214</a>
+<a href="#215" id="215">215</a>
+<a href="#216" id="216">216</a>
+<a href="#217" id="217">217</a>
+<a href="#218" id="218">218</a>
+<a href="#219" id="219">219</a>
 </pre></div><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
@@ -217,15 +253,12 @@
 }
 
 <span class="kw">impl </span>CosWriter {
-    <span class="kw">pub fn </span>new(core: Arc&lt;CosCore&gt;, path: <span class="kw-2">&amp;</span>str, op: OpWrite) -&gt; oio::MultipartUploadWriter&lt;<span class="self">Self</span>&gt; {
-        <span class="kw">let </span>write_min_size = core.write_min_size;
-        <span class="kw">let </span>total_size = op.content_length();
-        <span class="kw">let </span>cos_writer = CosWriter {
+    <span class="kw">pub fn </span>new(core: Arc&lt;CosCore&gt;, path: <span class="kw-2">&amp;</span>str, op: OpWrite) -&gt; <span class="self">Self </span>{
+        CosWriter {
             core,
             path: path.to_string(),
             op,
-        };
-        oio::MultipartUploadWriter::new(cos_writer, total_size).with_write_min_size(write_min_size)
+        }
     }
 }
 
@@ -364,4 +397,43 @@
         }
     }
 }
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl </span>oio::AppendObjectWrite <span class="kw">for </span>CosWriter {
+    <span class="kw">async fn </span>offset(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;u64&gt; {
+        <span class="kw">let </span>resp = <span class="self">self</span>.core.cos_head_object(<span class="kw-2">&amp;</span><span class="self">self</span>.path, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>).<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>status = resp.status();
+        <span class="kw">match </span>status {
+            StatusCode::OK =&gt; {
+                <span class="kw">let </span>content_length = parse_content_length(resp.headers())<span class="question-mark">?</span>.ok_or_else(|| {
+                    Error::new(
+                        ErrorKind::Unexpected,
+                        <span class="string">&quot;Content-Length not present in returning response&quot;</span>,
+                    )
+                })<span class="question-mark">?</span>;
+                <span class="prelude-val">Ok</span>(content_length)
+            }
+            StatusCode::NOT_FOUND =&gt; <span class="prelude-val">Ok</span>(<span class="number">0</span>),
+            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+        }
+    }
+
+    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, offset: u64, size: u64, body: AsyncBody) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self
+            </span>.core
+            .cos_append_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>.path, offset, size, <span class="kw-2">&amp;</span><span class="self">self</span>.op, body)<span class="question-mark">?</span>;
+
+        <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>resp = <span class="self">self</span>.core.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>status = resp.status();
+
+        <span class="kw">match </span>status {
+            StatusCode::OK =&gt; <span class="prelude-val">Ok</span>(()),
+            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
+        }
+    }
+}
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/dropbox/backend.rs.html b/docs/rust/src/opendal/services/dropbox/backend.rs.html
index f1b6731e5..edef5d6a1 100644
--- a/docs/rust/src/opendal/services/dropbox/backend.rs.html
+++ b/docs/rust/src/opendal/services/dropbox/backend.rs.html
@@ -303,7 +303,6 @@
 <a href="#303" id="303">303</a>
 <a href="#304" id="304">304</a>
 <a href="#305" id="305">305</a>
-<a href="#306" id="306">306</a>
 </pre></div><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
@@ -359,7 +358,6 @@
     <span class="kw">type </span>BlockingWriter = ();
     <span class="kw">type </span>Pager = ();
     <span class="kw">type </span>BlockingPager = ();
-    <span class="kw">type </span>Appender = ();
 
     <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>ma = AccessorInfo::default();
diff --git a/docs/rust/src/opendal/services/fs/appender.rs.html b/docs/rust/src/opendal/services/fs/appender.rs.html
deleted file mode 100644
index e475ef85b..000000000
--- a/docs/rust/src/opendal/services/fs/appender.rs.html
+++ /dev/null
@@ -1,99 +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="Source of the Rust file `core/src/services/fs/appender.rs`."><title>appender.rs - source</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 [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>tokio::io::AsyncWriteExt;
-
-<span class="kw">use </span><span class="kw">super</span>::error::parse_io_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">pub struct </span>FsAppender&lt;F&gt; {
-    f: F,
-}
-
-<span class="kw">impl</span>&lt;F&gt; FsAppender&lt;F&gt; {
-    <span class="kw">pub fn </span>new(f: F) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{ f }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Append <span class="kw">for </span>FsAppender&lt;tokio::fs::File&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.f.write_all(<span class="kw-2">&amp;</span>bs).<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(())
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.f.sync_all().<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(())
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/fs/backend.rs.html b/docs/rust/src/opendal/services/fs/backend.rs.html
index e10235f0a..b2de5b9a2 100644
--- a/docs/rust/src/opendal/services/fs/backend.rs.html
+++ b/docs/rust/src/opendal/services/fs/backend.rs.html
@@ -692,17 +692,6 @@
 <a href="#692" id="692">692</a>
 <a href="#693" id="693">693</a>
 <a href="#694" id="694">694</a>
-<a href="#695" id="695">695</a>
-<a href="#696" id="696">696</a>
-<a href="#697" id="697">697</a>
-<a href="#698" id="698">698</a>
-<a href="#699" id="699">699</a>
-<a href="#700" id="700">700</a>
-<a href="#701" id="701">701</a>
-<a href="#702" id="702">702</a>
-<a href="#703" id="703">703</a>
-<a href="#704" id="704">704</a>
-<a href="#705" id="705">705</a>
 </pre></div><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
@@ -732,7 +721,6 @@
 <span class="kw">use </span>log::debug;
 <span class="kw">use </span>uuid::Uuid;
 
-<span class="kw">use </span><span class="kw">super</span>::appender::FsAppender;
 <span class="kw">use </span><span class="kw">super</span>::error::parse_io_error;
 <span class="kw">use </span><span class="kw">super</span>::pager::FsPager;
 <span class="kw">use </span><span class="kw">super</span>::writer::FsWriter;
@@ -953,7 +941,6 @@
     <span class="kw">type </span>BlockingReader = oio::FromFileReader&lt;std::fs::File&gt;;
     <span class="kw">type </span>Writer = FsWriter&lt;tokio::fs::File&gt;;
     <span class="kw">type </span>BlockingWriter = FsWriter&lt;std::fs::File&gt;;
-    <span class="kw">type </span>Appender = FsAppender&lt;tokio::fs::File&gt;;
     <span class="kw">type </span>Pager = <span class="prelude-ty">Option</span>&lt;FsPager&lt;tokio::fs::ReadDir&gt;&gt;;
     <span class="kw">type </span>BlockingPager = <span class="prelude-ty">Option</span>&lt;FsPager&lt;std::fs::ReadDir&gt;&gt;;
 
@@ -969,13 +956,12 @@
                 read_with_range: <span class="bool-val">true</span>,
 
                 write: <span class="bool-val">true</span>,
+                write_can_append: <span class="bool-val">true</span>,
                 write_can_sink: <span class="bool-val">true</span>,
                 write_without_content_length: <span class="bool-val">true</span>,
                 create_dir: <span class="bool-val">true</span>,
                 delete: <span class="bool-val">true</span>,
 
-                append: <span class="bool-val">true</span>,
-
                 list: <span class="bool-val">true</span>,
                 list_with_delimiter_slash: <span class="bool-val">true</span>,
 
@@ -1071,7 +1057,7 @@
         <span class="prelude-val">Ok</span>((RpRead::new(end - start), r))
     }
 
-    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
+    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, op: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
         <span class="kw">let </span>(target_path, tmp_path) = <span class="kw">if let </span><span class="prelude-val">Some</span>(atomic_write_dir) = <span class="kw-2">&amp;</span><span class="self">self</span>.atomic_write_dir {
             <span class="kw">let </span>target_path = <span class="self">Self</span>::ensure_write_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path).<span class="kw">await</span><span class="question-mark">?</span>;
             <span class="kw">let </span>tmp_path =
@@ -1083,29 +1069,21 @@
             (p, <span class="prelude-val">None</span>)
         };
 
-        <span class="kw">let </span>f = tokio::fs::OpenOptions::new()
-            .create(<span class="bool-val">true</span>)
-            .truncate(<span class="bool-val">true</span>)
-            .write(<span class="bool-val">true</span>)
-            .open(tmp_path.as_ref().unwrap_or(<span class="kw-2">&amp;</span>target_path))
-            .<span class="kw">await
-            </span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>((RpWrite::new(), FsWriter::new(target_path, tmp_path, f)))
-    }
+        <span class="kw">let </span><span class="kw-2">mut </span>open_options = tokio::fs::OpenOptions::new();
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-        <span class="kw">let </span>path = <span class="self">Self</span>::ensure_write_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path).<span class="kw">await</span><span class="question-mark">?</span>;
+        open_options.create(<span class="bool-val">true</span>).write(<span class="bool-val">true</span>);
+        <span class="kw">if </span>op.append() {
+            open_options.append(<span class="bool-val">true</span>);
+        } <span class="kw">else </span>{
+            open_options.truncate(<span class="bool-val">true</span>);
+        }
 
-        <span class="kw">let </span>f = tokio::fs::OpenOptions::new()
-            .create(<span class="bool-val">true</span>)
-            .write(<span class="bool-val">true</span>)
-            .append(<span class="bool-val">true</span>)
-            .open(<span class="kw-2">&amp;</span>path)
+        <span class="kw">let </span>f = open_options
+            .open(tmp_path.as_ref().unwrap_or(<span class="kw-2">&amp;</span>target_path))
             .<span class="kw">await
             </span>.map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="prelude-val">Ok</span>((RpAppend::new(), FsAppender::new(f)))
+        <span class="prelude-val">Ok</span>((RpWrite::new(), FsWriter::new(target_path, tmp_path, f)))
     }
 
     <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, _args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
diff --git a/docs/rust/src/opendal/services/fs/mod.rs.html b/docs/rust/src/opendal/services/fs/mod.rs.html
index 7ad2e257a..02bd886b4 100644
--- a/docs/rust/src/opendal/services/fs/mod.rs.html
+++ b/docs/rust/src/opendal/services/fs/mod.rs.html
@@ -21,7 +21,6 @@
 <a href="#21" id="21">21</a>
 <a href="#22" id="22">22</a>
 <a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
 </pre></div><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
@@ -42,7 +41,6 @@
 </span><span class="kw">mod </span>backend;
 <span class="kw">pub use </span>backend::FsBuilder <span class="kw">as </span>Fs;
 
-<span class="kw">mod </span>appender;
 <span class="kw">mod </span>error;
 <span class="kw">mod </span>pager;
 <span class="kw">mod </span>writer;
diff --git a/docs/rust/src/opendal/services/ftp/backend.rs.html b/docs/rust/src/opendal/services/ftp/backend.rs.html
index 8fae222d9..e8d7a384e 100644
--- a/docs/rust/src/opendal/services/ftp/backend.rs.html
+++ b/docs/rust/src/opendal/services/ftp/backend.rs.html
@@ -800,7 +800,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = FtpWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = FtpPager;
     <span class="kw">type </span>BlockingPager = ();
 
@@ -815,6 +814,7 @@
                 read_with_range: <span class="bool-val">true</span>,
 
                 write: <span class="bool-val">true</span>,
+
                 delete: <span class="bool-val">true</span>,
                 create_dir: <span class="bool-val">true</span>,
 
diff --git a/docs/rust/src/opendal/services/gcs/backend.rs.html b/docs/rust/src/opendal/services/gcs/backend.rs.html
index e9d6b7f35..14f27f7ba 100644
--- a/docs/rust/src/opendal/services/gcs/backend.rs.html
+++ b/docs/rust/src/opendal/services/gcs/backend.rs.html
@@ -721,7 +721,6 @@
 <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>
 </pre></div><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
@@ -1119,7 +1118,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = GcsWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = GcsPager;
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/gdrive/backend.rs.html b/docs/rust/src/opendal/services/gdrive/backend.rs.html
index 28166881c..97779f4ff 100644
--- a/docs/rust/src/opendal/services/gdrive/backend.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/backend.rs.html
@@ -110,7 +110,6 @@
 <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>
 </pre></div><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
@@ -167,7 +166,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = GdriveWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = ();
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/ghac/backend.rs.html b/docs/rust/src/opendal/services/ghac/backend.rs.html
index 7df33a0e4..7331ebcdf 100644
--- a/docs/rust/src/opendal/services/ghac/backend.rs.html
+++ b/docs/rust/src/opendal/services/ghac/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></div><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
@@ -956,7 +955,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = GhacWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = ();
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/hdfs/appender.rs.html b/docs/rust/src/opendal/services/hdfs/appender.rs.html
deleted file mode 100644
index 7ddede3b1..000000000
--- a/docs/rust/src/opendal/services/hdfs/appender.rs.html
+++ /dev/null
@@ -1,97 +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="Source of the Rust file `core/src/services/hdfs/appender.rs`."><title>appender.rs - source</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" cr [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-</pre></div><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
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>futures::AsyncWriteExt;
-
-<span class="kw">use </span><span class="kw">super</span>::error::parse_io_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">pub struct </span>HdfsAppender&lt;F&gt; {
-    f: F,
-}
-
-<span class="kw">impl</span>&lt;F&gt; HdfsAppender&lt;F&gt; {
-    <span class="kw">pub fn </span>new(f: F) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{ f }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Append <span class="kw">for </span>HdfsAppender&lt;hdrs::AsyncFile&gt; {
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.f.write_all(<span class="kw-2">&amp;</span>bs).<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(())
-    }
-
-    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.f.flush().<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-        <span class="self">self</span>.f.close().<span class="kw">await</span>.map_err(parse_io_error)<span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(())
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/hdfs/backend.rs.html b/docs/rust/src/opendal/services/hdfs/backend.rs.html
index 760b02ae7..0500c9591 100644
--- a/docs/rust/src/opendal/services/hdfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/hdfs/backend.rs.html
@@ -471,33 +471,6 @@
 <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>
 </pre></div><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
@@ -526,7 +499,6 @@
 <span class="kw">use </span>async_trait::async_trait;
 <span class="kw">use </span>log::debug;
 
-<span class="kw">use </span><span class="kw">super</span>::appender::HdfsAppender;
 <span class="kw">use </span><span class="kw">super</span>::error::parse_io_error;
 <span class="kw">use </span><span class="kw">super</span>::pager::HdfsPager;
 <span class="kw">use </span><span class="kw">super</span>::writer::HdfsWriter;
@@ -665,7 +637,6 @@
     <span class="kw">type </span>BlockingReader = oio::FromFileReader&lt;hdrs::File&gt;;
     <span class="kw">type </span>Writer = HdfsWriter&lt;hdrs::AsyncFile&gt;;
     <span class="kw">type </span>BlockingWriter = HdfsWriter&lt;hdrs::File&gt;;
-    <span class="kw">type </span>Appender = HdfsAppender&lt;hdrs::AsyncFile&gt;;
     <span class="kw">type </span>Pager = <span class="prelude-ty">Option</span>&lt;HdfsPager&gt;;
     <span class="kw">type </span>BlockingPager = <span class="prelude-ty">Option</span>&lt;HdfsPager&gt;;
 
@@ -681,6 +652,9 @@
                 read_with_range: <span class="bool-val">true</span>,
 
                 write: <span class="bool-val">true</span>,
+                <span class="comment">// TODO: wait for https://github.com/apache/incubator-opendal/pull/2715
+                </span>write_can_append: <span class="bool-val">false</span>,
+
                 create_dir: <span class="bool-val">true</span>,
                 delete: <span class="bool-val">true</span>,
 
@@ -738,36 +712,7 @@
         <span class="prelude-val">Ok</span>((RpRead::new(end - start), r))
     }
 
-    <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&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="kw">let </span>parent = PathBuf::from(<span class="kw-2">&amp;</span>p)
-            .parent()
-            .ok_or_else(|| {
-                Error::new(
-                    ErrorKind::Unexpected,
-                    <span class="string">&quot;path should have parent but not, it must be malformed&quot;</span>,
-                )
-                .with_context(<span class="string">&quot;input&quot;</span>, <span class="kw-2">&amp;</span>p)
-            })<span class="question-mark">?
-            </span>.to_path_buf();
-        <span class="self">self</span>.client
-            .create_dir(<span class="kw-2">&amp;</span>parent.to_string_lossy())
-            .map_err(parse_io_error)<span class="question-mark">?</span>;
-
-        <span class="kw">let </span>f = <span class="self">self
-            </span>.client
-            .open_file()
-            .create(<span class="bool-val">true</span>)
-            .append(<span class="bool-val">true</span>)
-            .async_open(<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>((RpAppend::new(), HdfsAppender::new(f)))
-    }
-
-    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
+    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, op: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&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="kw">let </span>parent = PathBuf::from(<span class="kw-2">&amp;</span>p)
@@ -785,14 +730,15 @@
             .create_dir(<span class="kw-2">&amp;</span>parent.to_string_lossy())
             .map_err(parse_io_error)<span class="question-mark">?</span>;
 
-        <span class="kw">let </span>f = <span class="self">self
-            </span>.client
-            .open_file()
-            .create(<span class="bool-val">true</span>)
-            .write(<span class="bool-val">true</span>)
-            .async_open(<span class="kw-2">&amp;</span>p)
-            .<span class="kw">await
-            </span>.map_err(parse_io_error)<span class="question-mark">?</span>;
+        <span class="kw">let </span><span class="kw-2">mut </span>open_options = <span class="self">self</span>.client.open_file();
+        open_options.create(<span class="bool-val">true</span>);
+        <span class="kw">if </span>op.append() {
+            open_options.append(<span class="bool-val">true</span>);
+        } <span class="kw">else </span>{
+            open_options.write(<span class="bool-val">true</span>);
+        }
+
+        <span class="kw">let </span>f = open_options.async_open(<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>((RpWrite::new(), HdfsWriter::new(f)))
     }
diff --git a/docs/rust/src/opendal/services/hdfs/mod.rs.html b/docs/rust/src/opendal/services/hdfs/mod.rs.html
index 86319e456..360c9133a 100644
--- a/docs/rust/src/opendal/services/hdfs/mod.rs.html
+++ b/docs/rust/src/opendal/services/hdfs/mod.rs.html
@@ -21,7 +21,6 @@
 <a href="#21" id="21">21</a>
 <a href="#22" id="22">22</a>
 <a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
 </pre></div><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
@@ -42,7 +41,6 @@
 </span><span class="kw">mod </span>backend;
 <span class="kw">pub use </span>backend::HdfsBuilder <span class="kw">as </span>Hdfs;
 
-<span class="kw">mod </span>appender;
 <span class="kw">mod </span>error;
 <span class="kw">mod </span>pager;
 <span class="kw">mod </span>writer;
diff --git a/docs/rust/src/opendal/services/http/backend.rs.html b/docs/rust/src/opendal/services/http/backend.rs.html
index 4cf4cdc65..19eca853b 100644
--- a/docs/rust/src/opendal/services/http/backend.rs.html
+++ b/docs/rust/src/opendal/services/http/backend.rs.html
@@ -561,7 +561,6 @@
 <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>
 </pre></div><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
@@ -819,7 +818,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = ();
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = ();
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/ipfs/backend.rs.html b/docs/rust/src/opendal/services/ipfs/backend.rs.html
index 2aa34e42a..755dcbfff 100644
--- a/docs/rust/src/opendal/services/ipfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/ipfs/backend.rs.html
@@ -475,7 +475,6 @@
 <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>
 </pre></div><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
@@ -643,7 +642,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = ();
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = DirStream;
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/ipmfs/backend.rs.html b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
index 7acdf8482..b27bd3e3e 100644
--- a/docs/rust/src/opendal/services/ipmfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
@@ -317,7 +317,6 @@
 <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></div><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
@@ -387,7 +386,6 @@
     <span class="kw">type </span>BlockingReader = ();
     <span class="kw">type </span>Writer = IpmfsWriter;
     <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Appender = ();
     <span class="kw">type </span>Pager = IpmfsPager;
     <span class="kw">type </span>BlockingPager = ();
 
diff --git a/docs/rust/src/opendal/services/obs/appender.rs.html b/docs/rust/src/opendal/services/obs/appender.rs.html
deleted file mode 100644
... 3187 lines suppressed ...