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 2024/07/14 14:37:09 UTC

(opendal) branch gh-pages updated: deploy: b9f7c216fcdcbca955c77226c30bb35a129daa5e

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


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 37c7d9b26b deploy: b9f7c216fcdcbca955c77226c30bb35a129daa5e
37c7d9b26b is described below

commit 37c7d9b26b9fee589a6c3463475c6f06a11d91f9
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sun Jul 14 14:37:02 2024 +0000

    deploy: b9f7c216fcdcbca955c77226c30bb35a129daa5e
---
 404.html                                           |   2 +-
 assets/js/{main.104e720b.js => main.e38fcbc3.js}   |   4 +-
 ...js.LICENSE.txt => main.e38fcbc3.js.LICENSE.txt} |   0
 blog/apache-opendal-graduated/index.html           |   2 +-
 .../index.html                                     |   2 +-
 .../index.html                                     |   2 +-
 blog/archive/index.html                            |   2 +-
 blog/how-opendal-read-data/index.html              |   2 +-
 blog/index.html                                    |   2 +-
 blog/opendal-access-data-freely/index.html         |   2 +-
 blog/opendal-entered-apache-incubator/index.html   |   2 +-
 blog/owo-1/index.html                              |   2 +-
 blog/tags/announcement/index.html                  |   2 +-
 blog/tags/index.html                               |   2 +-
 blog/tags/internal/index.html                      |   2 +-
 blog/tags/owo/index.html                           |   2 +-
 community/category/committers/index.html           |   2 +-
 community/category/events/index.html               |   2 +-
 community/category/pmc-members/index.html          |   2 +-
 community/category/reference/index.html            |   2 +-
 community/category/release/index.html              |   2 +-
 community/committers/onboarding/index.html         |   2 +-
 .../request_for_adding_secrets/index.html          |   2 +-
 community/events/gsoc-proposal-guide/index.html    |   2 +-
 community/events/ospp-proposal-guide/index.html    |   2 +-
 community/index.html                               |   2 +-
 community/maturity/index.html                      |   2 +-
 community/pmc_members/board-reporting/index.html   |   2 +-
 .../pmc_members/nominate-committer/index.html      |   2 +-
 .../pmc_members/nominate-pmc-member/index.html     |   2 +-
 community/pmc_members/onboarding/index.html        |   2 +-
 community/release/index.html                       |   2 +-
 .../reference/generate_release_note/index.html     |   2 +-
 community/release/reference/setup_gpg/index.html   |   2 +-
 community/release/verify/index.html                |   2 +-
 community/security/index.html                      |   2 +-
 docs/binding-java/index.html                       |   2 +-
 docs/binding-nodejs/index.html                     |   2 +-
 docs/binding-python/index.html                     |   2 +-
 docs/dav-server/index.html                         |   2 +-
 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/BlockingReader.html            |   4 +-
 docs/nodejs/classes/BlockingWriter.html            |   8 +-
 docs/nodejs/classes/Capability.html                |  74 ++--
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/ExternalObject.html            |   4 +-
 docs/nodejs/classes/Layer.html                     |   2 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  64 ++--
 docs/nodejs/classes/Reader.html                    |   6 +-
 docs/nodejs/classes/RetryLayer.html                |  14 +-
 docs/nodejs/classes/Writer.html                    |   8 +-
 docs/nodejs/interfaces/ListOptions.html            |   4 +-
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/nodejs/interfaces/WriteOptions.html           |  12 +-
 docs/nodejs/interfaces/WriterOptions.html          |  12 +-
 docs/object-store/index.html                       |   2 +-
 docs/overview/index.html                           |   2 +-
 docs/python/opendal.html                           | 426 ++++++++++-----------
 docs/python/search.js                              |   2 +-
 docs/quickstart/index.html                         |   2 +-
 docs/rust-core/index.html                          |   2 +-
 docs/rust/opendal/enum.Metakey.html                |   8 +-
 docs/rust/opendal/operator_futures/index.html      |   2 +-
 .../operator_futures/struct.OperatorFuture.html    | 126 +++---
 .../operator_futures/type.FutureDelete.html        |   4 +-
 .../opendal/operator_futures/type.FutureList.html  |  12 +-
 .../operator_futures/type.FutureLister.html        |  12 +-
 .../operator_futures/type.FuturePresignRead.html   |  12 +-
 .../operator_futures/type.FuturePresignStat.html   |  12 +-
 .../operator_futures/type.FuturePresignWrite.html  |   8 +-
 .../opendal/operator_futures/type.FutureRead.html  |  16 +-
 .../operator_futures/type.FutureReader.html        |  10 +-
 .../opendal/operator_futures/type.FutureStat.html  |   8 +-
 .../opendal/operator_futures/type.FutureWrite.html |  23 +-
 .../operator_futures/type.FutureWriter.html        |  23 +-
 docs/rust/opendal/raw/enum.BatchOperation.html     |   6 +-
 docs/rust/opendal/raw/enum.PresignOperation.html   |   4 +-
 docs/rust/opendal/raw/index.html                   |   2 +-
 docs/rust/opendal/raw/struct.OpBatch.html          |  10 +-
 docs/rust/opendal/raw/struct.OpCopy.html           |   6 +-
 docs/rust/opendal/raw/struct.OpCreateDir.html      |   6 +-
 docs/rust/opendal/raw/struct.OpDelete.html         |  10 +-
 docs/rust/opendal/raw/struct.OpList.html           |  26 +-
 docs/rust/opendal/raw/struct.OpPresign.html        |  12 +-
 docs/rust/opendal/raw/struct.OpRead.html           |  38 +-
 docs/rust/opendal/raw/struct.OpReader.html         |  18 +-
 docs/rust/opendal/raw/struct.OpRename.html         |   6 +-
 docs/rust/opendal/raw/struct.OpStat.html           |  30 +-
 docs/rust/opendal/raw/struct.OpWrite.html          |  32 +-
 docs/rust/opendal/raw/struct.OpWriter.html         |  10 +-
 docs/rust/opendal/services/struct.Oss.html         |   2 +-
 docs/rust/opendal/struct.Capability.html           |   6 +-
 docs/rust/opendal/struct.Metadata.html             |  80 ++--
 docs/rust/search-index.js                          |   2 +-
 docs/rust/search.desc/opendal/opendal-desc-0-.js   |   2 +-
 docs/rust/src/opendal/lib.rs.html                  |   4 +-
 docs/rust/src/opendal/raw/mod.rs.html              |   2 +-
 docs/rust/src/opendal/raw/ops.rs.html              |  36 +-
 docs/rust/src/opendal/services/oss/backend.rs.html |  10 +-
 docs/rust/src/opendal/services/oss/core.rs.html    | 182 +++++++--
 docs/rust/src/opendal/types/capability.rs.html     |   4 +
 docs/rust/src/opendal/types/list.rs.html           |   4 +-
 docs/rust/src/opendal/types/metadata.rs.html       |  42 +-
 .../types/operator/operator_futures.rs.html        |  70 +++-
 .../operator_futures/struct.OperatorFuture.js      |   2 +-
 download/index.html                                |   2 +-
 index.html                                         |   2 +-
 lunr-index-1720955960360.json                      |   1 -
 lunr-index-1720967784581.json                      |   1 +
 lunr-index.json                                    |   2 +-
 search-doc-1720955960360.json                      |   1 -
 search-doc-1720967784581.json                      |   1 +
 search-doc.json                                    |   2 +-
 118 files changed, 1007 insertions(+), 717 deletions(-)

diff --git a/404.html b/404.html
index b31686385a..358a1e818e 100644
--- a/404.html
+++ b/404.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tr [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/assets/js/main.104e720b.js b/assets/js/main.e38fcbc3.js
similarity index 99%
rename from assets/js/main.104e720b.js
rename to assets/js/main.e38fcbc3.js
index 9b2e6941be..53e7f4d793 100644
--- a/assets/js/main.104e720b.js
+++ b/assets/js/main.e38fcbc3.js
@@ -1,2 +1,2 @@
-/*! For license information please see main.104e720b.js.LICENSE.txt */
-(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8792],{4649:(e,t,n)=>{var r={"./prism-groovy":2600,"./prism-java":1330,"./prism-rust":8432};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=4649},6527:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(758);var r=n(2059),o=n.n(r),a=n(4054);con [...]
\ No newline at end of file
+/*! For license information please see main.e38fcbc3.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8792],{4649:(e,t,n)=>{var r={"./prism-groovy":2600,"./prism-java":1330,"./prism-rust":8432};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=4649},6527:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(758);var r=n(2059),o=n.n(r),a=n(4054);con [...]
\ No newline at end of file
diff --git a/assets/js/main.104e720b.js.LICENSE.txt b/assets/js/main.e38fcbc3.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.104e720b.js.LICENSE.txt
rename to assets/js/main.e38fcbc3.js.LICENSE.txt
diff --git a/blog/apache-opendal-graduated/index.html b/blog/apache-opendal-graduated/index.html
index a08a20d883..045181a6ba 100644
--- a/blog/apache-opendal-graduated/index.html
+++ b/blog/apache-opendal-graduated/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™ is now Graduated | 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/apache-opendal-graduated"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/apache-opendal-participates-in-gsoc-2024/index.html b/blog/apache-opendal-participates-in-gsoc-2024/index.html
index 367d67e29f..0f64f2bd28 100644
--- a/blog/apache-opendal-participates-in-gsoc-2024/index.html
+++ b/blog/apache-opendal-participates-in-gsoc-2024/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™ participates in Google Summer of Code 2024 | 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/apache-opendal-participates-in-gsoc-2024"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="e [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/apache-opendal-participates-in-ospp-2024/index.html b/blog/apache-opendal-participates-in-ospp-2024/index.html
index a7b9cd8295..cf1963f075 100644
--- a/blog/apache-opendal-participates-in-ospp-2024/index.html
+++ b/blog/apache-opendal-participates-in-ospp-2024/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™ participates in Open Source Promotion Plan 2024 | 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/apache-opendal-participates-in-ospp-2024"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" conte [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 82a634bef7..74b992a5c4 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index 8da469bcdb..1cdb483101 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/index.html b/blog/index.html
index b013237b37..5b8f33850e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="o [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 4661e15a81..f32b683698 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™: 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusau [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index d798c59fea..519796568e 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
index 8b4a377591..6fe6829229 100644
--- a/blog/owo-1/index.html
+++ b/blog/owo-1/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">OwO #1: The v0.40 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/blog/owo-1"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><met [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 0afe769d6c..901d704992 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">5 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/index.html b/blog/tags/index.html
index add6cd48a8..cc46538aa5 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" proper [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 606e08f0b9..1e3b71b074 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -6,7 +6,7 @@
 <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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lang [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
index 8e79a98823..3f525c4239 100644
--- a/blog/tags/owo/index.html
+++ b/blog/tags/owo/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">One post tagged with &quot;owo&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/owo"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" cont [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
index 6184e5ea9e..ebb4a0dc28 100644
--- a/community/category/committers/index.html
+++ b/community/category/committers/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Committers | 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/community/category/committers"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/events/index.html b/community/category/events/index.html
index 17501b85a0..c2600762c1 100644
--- a/community/category/events/index.html
+++ b/community/category/events/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Events | 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/community/category/events"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/pmc-members/index.html b/community/category/pmc-members/index.html
index eac58ed7ff..d219dde3c7 100644
--- a/community/category/pmc-members/index.html
+++ b/community/category/pmc-members/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Committers | 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/community/category/pmc-members"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"> [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
index 3aac19bac2..2f1bbd68bf 100644
--- a/community/category/reference/index.html
+++ b/community/category/reference/index.html
@@ -6,7 +6,7 @@
 <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/community/category/reference"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/release/index.html b/community/category/release/index.html
index fbe4d9b503..e192021602 100644
--- a/community/category/release/index.html
+++ b/community/category/release/index.html
@@ -6,7 +6,7 @@
 <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/community/category/release"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/committers/onboarding/index.html b/community/committers/onboarding/index.html
index 116bc20318..cdd059490e 100644
--- a/community/committers/onboarding/index.html
+++ b/community/committers/onboarding/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Onboarding | 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/community/committers/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/committers/request_for_adding_secrets/index.html b/community/committers/request_for_adding_secrets/index.html
index dc7b92430c..282524bdaf 100644
--- a/community/committers/request_for_adding_secrets/index.html
+++ b/community/committers/request_for_adding_secrets/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Request for adding secrets | 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/community/committers/request_for_adding_secrets"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" 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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/events/gsoc-proposal-guide/index.html b/community/events/gsoc-proposal-guide/index.html
index 578457add5..ce47cfe8a1 100644
--- a/community/events/gsoc-proposal-guide/index.html
+++ b/community/events/gsoc-proposal-guide/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">GSoC Project Proposal Guidance | 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/community/events/gsoc-proposal-guide"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/events/ospp-proposal-guide/index.html b/community/events/ospp-proposal-guide/index.html
index 83b7cd08bf..17cc6095a7 100644
--- a/community/events/ospp-proposal-guide/index.html
+++ b/community/events/ospp-proposal-guide/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">OSPP Project Proposal Guidance | 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/community/events/ospp-proposal-guide"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/index.html b/community/index.html
index 0f6d22fb8c..49badbc0e4 100644
--- a/community/index.html
+++ b/community/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Community | 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/community/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true"  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/maturity/index.html b/community/maturity/index.html
index 15f716b925..23f20a5d7d 100644
--- a/community/maturity/index.html
+++ b/community/maturity/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Maturity | 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/community/maturity"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/board-reporting/index.html b/community/pmc_members/board-reporting/index.html
index 36d4a0c96e..806e061077 100644
--- a/community/pmc_members/board-reporting/index.html
+++ b/community/pmc_members/board-reporting/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Board reporting | 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/community/pmc_members/board-reporting"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" c [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/nominate-committer/index.html b/community/pmc_members/nominate-committer/index.html
index 37dc574fe4..2a44f29ffb 100644
--- a/community/pmc_members/nominate-committer/index.html
+++ b/community/pmc_members/nominate-committer/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Nominate Committer | 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/community/pmc_members/nominate-committer"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:langu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/nominate-pmc-member/index.html b/community/pmc_members/nominate-pmc-member/index.html
index 8f24c93c99..f84ed600cd 100644
--- a/community/pmc_members/nominate-pmc-member/index.html
+++ b/community/pmc_members/nominate-pmc-member/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Nominate PMC Member | 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/community/pmc_members/nominate-pmc-member"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lan [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/onboarding/index.html b/community/pmc_members/onboarding/index.html
index 979f9bae74..b9345895b6 100644
--- a/community/pmc_members/onboarding/index.html
+++ b/community/pmc_members/onboarding/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Onboarding | 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/community/pmc_members/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/index.html b/community/release/index.html
index d575a9ae61..e59f7bd082 100644
--- a/community/release/index.html
+++ b/community/release/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Create a 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/community/release/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/reference/generate_release_note/index.html b/community/release/reference/generate_release_note/index.html
index ade4d9313e..4918f3de5b 100644
--- a/community/release/reference/generate_release_note/index.html
+++ b/community/release/reference/generate_release_note/index.html
@@ -6,7 +6,7 @@
 <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/community/release/reference/generate_release_note"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="doc [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/reference/setup_gpg/index.html b/community/release/reference/setup_gpg/index.html
index 9148cec6f7..913a9beaac 100644
--- a/community/release/reference/setup_gpg/index.html
+++ b/community/release/reference/setup_gpg/index.html
@@ -6,7 +6,7 @@
 <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/community/release/reference/setup_gpg"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" con [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/verify/index.html b/community/release/verify/index.html
index 2b81f60de9..3323aff64b 100644
--- a/community/release/verify/index.html
+++ b/community/release/verify/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Verify a release candidate | 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/community/release/verify"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" con [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/security/index.html b/community/security/index.html
index ad678b4552..4c5c3f9ade 100644
--- a/community/security/index.html
+++ b/community/security/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Security | 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/community/security"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-java/index.html b/docs/binding-java/index.html
index 94128831ba..0fcef49a7e 100644
--- a/docs/binding-java/index.html
+++ b/docs/binding-java/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Java API | 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/binding-java"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-nodejs/index.html b/docs/binding-nodejs/index.html
index af030d5331..732978b233 100644
--- a/docs/binding-nodejs/index.html
+++ b/docs/binding-nodejs/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Node.js API | 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/binding-nodejs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-python/index.html b/docs/binding-python/index.html
index 7b0a9f22cc..0688357ab7 100644
--- a/docs/binding-python/index.html
+++ b/docs/binding-python/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Python API | 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/binding-python"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/dav-server/index.html b/docs/dav-server/index.html
index f6b4efdd51..6504dfeedd 100644
--- a/docs/dav-server/index.html
+++ b/docs/dav-server/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">WebDAV Integration | 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/dav-server"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 9dc203e1b1..b9af3679d6 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 2024-07-14 11:06:58 </i>
+<i style="float:right;">Last updated 2024-07-14 14:23:59 </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 c820dbb94d..28892d51ce 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 2024-07-14 11:06:58 </i>
+<i style="float:right;">Last updated 2024-07-14 14:23:59 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index e733800d2f..a718a4a75a 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 2024-07-14 11:06:58 </i>
+<i style="float:right;">Last updated 2024-07-14 14:23:59 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 783e8191ce..87676a5c91 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingLister | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L706">generated.d.ts:706</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L706">generated.d.ts:706</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingLister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingReader.html b/docs/nodejs/classes/BlockingReader.html
index f8b177b59a..688eb37814 100644
--- a/docs/nodejs/classes/BlockingReader.html
+++ b/docs/nodejs/classes/BlockingReader.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingReader | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L597">generated.d.ts:597</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L597">generated.d.ts:597</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingReader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
 <a href="BlockingReader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingWriter.html b/docs/nodejs/classes/BlockingWriter.html
index d34ed263ba..239600d224 100644
--- a/docs/nodejs/classes/BlockingWriter.html
+++ b/docs/nodejs/classes/BlockingWriter.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingWriter | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L618">generated.d.ts:618</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L618">generated.d.ts:618</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingWriter.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
 <a href="BlockingWriter.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
 <a href="BlockingWriter.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
 <p>Close this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writerSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span><br/><span class="hl-5">writer</span><span class="hl-1 [...]
 </code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L649">generated.d.ts:649</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L649">generated.d.ts:649</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Write bytes into this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Capability.html b/docs/nodejs/classes/Capability.html
index eb93962e57..c21c02dd28 100644
--- a/docs/nodejs/classes/Capability.html
+++ b/docs/nodejs/classes/Capability.html
@@ -7,7 +7,7 @@
 <li>What&#39;s current Operator max supports batch operations count.</li>
 </ul>
 <p>Add fields of Capabilities to be public and can be accessed directly.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Capability.html#batch" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch</span></a>
 <a href="Capability.html#batchDelete" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Delete</span></a>
 <a href="Capability.html#batchMaxOperations" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Max<wbr/>Operations</span></a>
@@ -45,43 +45,43 @@
 <a href="Capability.html#writeWithContentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Disposition</span></a>
 <a href="Capability.html#writeWithContentType" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Type</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Cap [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L196">generated.d.ts:196</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L198">generated.d.ts:198</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L200">generated.d.ts:200</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L202">generated.d.ts:202</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L176">generated.d.ts:176</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="#create [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L172">generated.d.ts:172</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L174">generated.d.ts:174</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L180">generated.d.ts:180</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L182">generated.d.ts:182</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L186">generated.d.ts:186</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L184">generated.d.ts:184</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L188">generated.d.ts:188</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="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L190">generated.d.ts:190</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="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L192">generated.d.ts:192</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="# [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L194">generated.d.ts:194</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Matc [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/ [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>Wit [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L178">generated.d.ts:178</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Matc [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</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="P [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L196">generated.d.ts:196</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L198">generated.d.ts:198</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L200">generated.d.ts:200</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L202">generated.d.ts:202</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L176">generated.d.ts:176</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="#create [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L172">generated.d.ts:172</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L174">generated.d.ts:174</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L180">generated.d.ts:180</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L182">generated.d.ts:182</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L186">generated.d.ts:186</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L184">generated.d.ts:184</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L188">generated.d.ts:188</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="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L190">generated.d.ts:190</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="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L192">generated.d.ts:192</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="# [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L194">generated.d.ts:194</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Matc [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/ [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>Wit [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L178">generated.d.ts:178</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Matc [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</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="P [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align< [...]
 <p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L164">generated.d.ts:164</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L164">generated.d.ts:164</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
 <p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L152">generated.d.ts:152</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L152">generated.d.ts:152</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" [...]
 <p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L158">generated.d.ts:158</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L158">generated.d.ts:158</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
 <p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L170">generated.d.ts:170</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L146">generated.d.ts:146</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/ [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Conten [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L170">generated.d.ts:170</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L146">generated.d.ts:146</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/ [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Conten [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index eeb7ae9fbd..5fbdf976ec 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Entry | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../ [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L566">generated.d.ts:566</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L566">generated.d.ts:566</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Entry.html#path" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>path</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ent [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L568">generated.d.ts:568</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L568">generated.d.ts:568</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/ExternalObject.html b/docs/nodejs/classes/ExternalObject.html
index 8161c9fc58..74812f194f 100644
--- a/docs/nodejs/classes/ExternalObject.html
+++ b/docs/nodejs/classes/ExternalObject.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="ExternalObject.html#reflection-5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span><em>Property</em></span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Layer.html b/docs/nodejs/classes/Layer.html
index cf45884d86..d0ec13511f 100644
--- a/docs/nodejs/classes/Layer.html
+++ b/docs/nodejs/classes/Layer.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Layer | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../ [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L710">generated.d.ts:710</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L710">generated.d.ts:710</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lay [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index bc04416e1d..ea3fce1df5 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Lister | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L691">generated.d.ts:691</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L691">generated.d.ts:691</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Lister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lis [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>napi will make sure the function is safe, and we didn&#39;t do unsafe
 things 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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d [...]
\ No newline at end of file
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9 [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index 712965da4d..18eec5dc6d 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Metadata | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L571">generated.d.ts:571</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L571">generated.d.ts:571</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Metadata.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Disposition</span></a>
 <a href="Metadata.html#contentLength" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Length</span></a>
 <a href="Metadata.html#contentMd5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Md5</span></a>
@@ -9,12 +9,12 @@
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Metadata.html#isDirectory" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>Directory</span></a>
 <a href="Metadata.html#isFile" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>File</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Met [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L577">generated.d.ts:577</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L579">generated.d.ts:579</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L581">generated.d.ts:581</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L583">generated.d.ts:583</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L585">generated.d.ts:585</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L577">generated.d.ts:577</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L579">generated.d.ts:579</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L581">generated.d.ts:581</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L583">generated.d.ts:583</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L585">generated.d.ts:585</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
 <p>We will output this time in RFC3339 format like <code>1996-12-19T16:39:57+08:00</code>.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L591">generated.d.ts:591</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L573">generated.d.ts:573</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L575">generated.d.ts:575</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L591">generated.d.ts:591</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L573">generated.d.ts:573</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L575">generated.d.ts:575</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index dccd5bd156..666b0446bc 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Operator.html#capability" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>capability</span></a>
 <a href="Operator.html#check" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>check</span></a>
 <a href="Operator.html#copy" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>copy</span></a>
@@ -33,38 +33,38 @@
 And the options,
 please refer to the documentation of the corresponding service for the corresponding parameters.
 Note that the current options key is snake_case.</p>
-</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L211">generated.d.ts:211</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="capability" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>capability</span><a href="#capability" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBo [...]
-</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L213">generated.d.ts:213</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</ [...]
+</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L211">generated.d.ts:211</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="capability" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>capability</span><a href="#capability" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBo [...]
+</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L213">generated.d.ts:213</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</ [...]
 <p>We will send a <code>list</code> request to the given path and return any errors we met.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">check</span><span class="hl-1">();</span>
 </code><button>Copy</button></pre>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L256">generated.d.ts:256</a></li></ul></aside></li></ul></section><section class [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L256">generated.d.ts:256</a></li></ul></aside></li></ul></section><section class [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copy</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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-s [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copySync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDir</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDirSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generat [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Delete not existing error won’t return errors.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">delete</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">deleteSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generat [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExist</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd- [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExistSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/gene [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol">&lt;</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol">&lt;</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
 <p>This function will return an array of entries.</p>
 <p>An error will be returned if given path doesn&#39;t end with <code>/</code>.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span><br/ [...]
@@ -72,7 +72,7 @@ Note that the current options key is snake_case.</p>
 <a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
 <pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
 <p>This function will return an array of entries.</p>
 <p>An error will be returned if given path doesn&#39;t end with <code>/</code>.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span><br/><span class="hl-4">for</span><span class="hl-1"> (</s [...]
@@ -80,45 +80,45 @@ Note that the current options key is snake_case.</p>
 <a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
 <pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true</span><span class="hl-1"> });</span><br/><span class= [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
 <p>Unit of <code>expires</code> is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignRead</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
 <p>Unit of <code>expires</code> is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignStat</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
 <p>Unit of <code>expires</code> is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignWrite</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0 [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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="../i [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">read</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd- [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">readSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/gene [...]
 <p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
 <p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
 <a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">remove</span><span class="hl-1">([</span><span class="hl-2">&quot;abc&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;def&quot;</span><span class="hl-1">]);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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">&g [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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">&g [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
 <a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">removeAll</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typ [...]
 <p>It&#39;s similar to <code>mv</code> command.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">rename</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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-s [...]
 <p>It&#39;s similar to <code>mv</code> command.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">renameSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Use stat if you:</p>
 <ul>
 <li>Want to detect the outside changes of a path.</li>
@@ -127,17 +127,17 @@ Note that the current options key is snake_case.</p>
 <p>You may want to use <code>metadata</code> if you are working with entries returned by <code>Lister</code>. It’s highly possible that metadata you want has already been cached.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">stat</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span><br/><span c [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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></ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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></ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">statSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span><br/><span class="hl-4">if</span><span class="hl-1"> (</span><span [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">write</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><spa [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writeSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><span class="hl-2">&quot;hello world&quot;</span><span cla [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
 <p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type  [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type  [...]
 <p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type  [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type  [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Reader.html b/docs/nodejs/classes/Reader.html
index 8d37acb7fd..f0e0dd2b42 100644
--- a/docs/nodejs/classes/Reader.html
+++ b/docs/nodejs/classes/Reader.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Reader | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Reader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
 <a href="Reader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Rea [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Read bytes from this reader into given buffer.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</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">bigint</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</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">bigint</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/RetryLayer.html b/docs/nodejs/classes/RetryLayer.html
index 0969176c3c..15737f6375 100644
--- a/docs/nodejs/classes/RetryLayer.html
+++ b/docs/nodejs/classes/RetryLayer.html
@@ -8,27 +8,27 @@ If the operation still failed, this layer will set error to
 visit <a href="https://github.com/apache/opendal/issues/1223">this issue</a> for more details.</p>
 <a id="md:examples" class="tsd-anchor"></a><h1><a href="#md:examples">Examples</a></h1><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">op</span><span class="hl-1"> = </span><span class="hl-6">new</span><span class="hl-1"> </span><span class="hl-0">Operator</span><span class="hl-1">(</span><span class="hl-2">&quot;file&quot;</span><span class="hl-1">, { </span><span class="hl-5">root:</span><span class="hl-1"> </span><spa [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L738">generated.d.ts:738</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L738">generated.d.ts:738</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"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="RetryLayer.html#factor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>factor</span></a>
 <a href="RetryLayer.html#jitter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>jitter</span></a>
 <a href="RetryLayer.html#maxDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Delay</span></a>
 <a href="RetryLayer.html#maxTimes" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Times</span></a>
 <a href="RetryLayer.html#minDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>min<wbr/>Delay</span></a>
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="RetryLayer.html#build" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>build</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
 <a id="md:panics" class="tsd-anchor"></a><h1><a href="#md:panics">Panics</a></h1><p>This function will panic if the input factor is smaller than <code>1.0</code>.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated. [...]
 <p>If jitter is enabled, ExponentialBackoff will add a random jitter in <code>[0, min_delay)</code>
 to current delay.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated [...]
 <p>Delay will not increase if the current delay is larger than max_delay.</p>
 <a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
 <li>The unit of max_delay is millisecond.</li>
 </ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated. [...]
 <p>Backoff will return <code>None</code> if max times are reached.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated. [...]
 <a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
 <li>The unit of min_delay is millisecond.</li>
 </ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated. [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated. [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Writer.html b/docs/nodejs/classes/Writer.html
index 3b06991158..1997f5fa64 100644
--- a/docs/nodejs/classes/Writer.html
+++ b/docs/nodejs/classes/Writer.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Writer | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Writer.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
 <a href="Writer.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
 <a href="Writer.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
 <p>Close this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside></li></ul></section><section class [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside></li></ul></section><section class [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Write bytes into this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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 [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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 [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/ListOptions.html b/docs/nodejs/interfaces/ListOptions.html
index 8e6462bf4b..59f3b0fca9 100644
--- a/docs/nodejs/interfaces/ListOptions.html
+++ b/docs/nodejs/interfaces/ListOptions.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async sr [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async sr [...]
 <a href="ListOptions.html#recursive" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>recursive?</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index b2ba06f376..3bfb73434a 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -1,8 +1,8 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>PresignedRequest | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script asy [...]
-</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span>    </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class=" [...]
+</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span>    </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class=" [...]
 <a href="PresignedRequest.html#method" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>method</span></a>
 <a href="PresignedRequest.html#url" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>url</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="headers" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>headers</span><a href="#headers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">headers</span><span class="tsd-signature-symbol">: [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg>< [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L96">generated.d.ts:96</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L98">generated.d.ts:98</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg>< [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L96">generated.d.ts:96</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L98">generated.d.ts:98</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/WriteOptions.html b/docs/nodejs/interfaces/WriteOptions.html
index 523418f5f6..a139d60fbf 100644
--- a/docs/nodejs/interfaces/WriteOptions.html
+++ b/docs/nodejs/interfaces/WriteOptions.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriteOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async s [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriteOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async s [...]
 <a href="WriteOptions.html#cacheControl" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>cache<wbr/>Control?</span></a>
 <a href="WriteOptions.html#chunk" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>chunk?</span></a>
 <a href="WriteOptions.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>content<wbr/>Disposition?</span></a>
@@ -8,12 +8,12 @@
 <li>It always appends content to the end of the file.</li>
 <li>It will create file if the path does not exist.</li>
 </ul>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L44">generated.d.ts:44</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L44">generated.d.ts:44</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
 <p>If chunk is set, the data will be chunked by the underlying writer.</p>
 <a id="md:note" class="tsd-anchor"></a><h2><a href="#md:note">NOTE</a></h2><p>A service could have their own minimum chunk size while perform write
 operations like multipart uploads. So the chunk size may be larger than
 the given buffer size.</p>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/WriterOptions.html b/docs/nodejs/interfaces/WriterOptions.html
index b0f14acc5f..c4ee9731ea 100644
--- a/docs/nodejs/interfaces/WriterOptions.html
+++ b/docs/nodejs/interfaces/WriterOptions.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriterOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async  [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriterOptions | Apache OpenDAL™ - v0.47.0</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async  [...]
 <a href="WriterOptions.html#cacheControl" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>cache<wbr/>Control?</span></a>
 <a href="WriterOptions.html#chunk" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>chunk?</span></a>
 <a href="WriterOptions.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>content<wbr/>Disposition?</span></a>
@@ -8,12 +8,12 @@
 <li>It always appends content to the end of the file.</li>
 <li>It will create file if the path does not exist.</li>
 </ul>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L73">generated.d.ts:73</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L91">generated.d.ts:91</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L73">generated.d.ts:73</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L91">generated.d.ts:91</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
 <p>If chunk is set, the data will be chunked by the underlying writer.</p>
 <a id="md:note" class="tsd-anchor"></a><h2><a href="#md:note">NOTE</a></h2><p>A service could have their own minimum chunk size while perform write
 operations like multipart uploads. So the chunk size may be larger than
 the given buffer size.</p>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L85">generated.d.ts:85</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L89">generated.d.ts:89</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/4d48970/bindings/nodejs/generated.d.ts#L87">generated.d.ts:87</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L85">generated.d.ts:85</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L89">generated.d.ts:89</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/b9f7c21/bindings/nodejs/generated.d.ts#L87">generated.d.ts:87</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/object-store/index.html b/docs/object-store/index.html
index ffe08c2a41..d29227273e 100644
--- a/docs/object-store/index.html
+++ b/docs/object-store/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">object_store Integration | 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/object-store"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/overview/index.html b/docs/overview/index.html
index b1164bb0b7..583083ec77 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Welcome to Apache OpenDAL™ | 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 32cd4b486d..cdafa83374 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -246,19 +246,19 @@
                     <a class="class" href="#Metadata">Metadata</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_length">content_length</a>
@@ -270,13 +270,13 @@
                     <a class="class" href="#PresignedRequest">PresignedRequest</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#PresignedRequest.headers">headers</a>
+                                <a class="variable" href="#PresignedRequest.url">url</a>
                         </li>
                         <li>
                                 <a class="variable" href="#PresignedRequest.method">method</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.url">url</a>
+                                <a class="variable" href="#PresignedRequest.headers">headers</a>
                         </li>
                 </ul>
 
@@ -285,112 +285,112 @@
                     <a class="class" href="#Capability">Capability</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
+                                <a class="variable" href="#Capability.read">read</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat">stat</a>
+                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
+                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
+                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
+                                <a class="variable" href="#Capability.delete">delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.create_dir">create_dir</a>
+                                <a class="variable" href="#Capability.write">write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
+                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
+                                <a class="variable" href="#Capability.presign_read">presign_read</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Capability.presign">presign</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
+                                <a class="variable" href="#Capability.stat">stat</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
+                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write">write</a>
+                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
+                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.delete">delete</a>
+                                <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
+                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
+                                <a class="variable" href="#Capability.list">list</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.rename">rename</a>
+                                <a class="variable" href="#Capability.blocking">blocking</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
+                                <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
+                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.copy">copy</a>
+                                <a class="variable" href="#Capability.create_dir">create_dir</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list">list</a>
+                                <a class="variable" href="#Capability.rename">rename</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
+                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
+                                <a class="variable" href="#Capability.copy">copy</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
+                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
+                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.blocking">blocking</a>
+                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch">batch</a>
+                                <a class="variable" href="#Capability.presign_write">presign_write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
+                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_write">presign_write</a>
+                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
+                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
+                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read">read</a>
+                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
+                                <a class="variable" href="#Capability.batch">batch</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_read">presign_read</a>
+                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
+                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
+                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
                         </li>
                 </ul>
 
@@ -1462,26 +1462,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="Metadata.content_disposition" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_disposition"></a>
-    
+    <a class="headerlink" href="#Metadata.etag"></a>
     
+            <div class="docstring"><p>ETag of this entry.</p>
+</div>
+
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
@@ -1499,28 +1501,26 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_disposition"></a>
+    
     
-            <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">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>
 
 
@@ -1551,15 +1551,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="PresignedRequest.headers" class="classattr">
+                            <div id="PresignedRequest.url" class="classattr">
                                 <div class="attr variable">
-            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
+            <span class="name">url</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.headers"></a>
+    <a class="headerlink" href="#PresignedRequest.url"></a>
     
-            <div class="docstring"><p>Return the HTTP headers of this request.</p>
+            <div class="docstring"><p>Return the URL of this request.</p>
 </div>
 
 
@@ -1577,15 +1577,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="PresignedRequest.url" class="classattr">
+                            <div id="PresignedRequest.headers" class="classattr">
                                 <div class="attr variable">
-            <span class="name">url</span><span class="annotation">: str</span>
+            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.url"></a>
+    <a class="headerlink" href="#PresignedRequest.headers"></a>
     
-            <div class="docstring"><p>Return the URL of this request.</p>
+            <div class="docstring"><p>Return the HTTP headers of this request.</p>
 </div>
 
 
@@ -1606,106 +1606,108 @@ by current Operator.</p>
 </div>
 
 
-                            <div id="Capability.list_with_limit" class="classattr">
+                            <div id="Capability.read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
+            <span class="name">read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_limit"></a>
+    <a class="headerlink" href="#Capability.read"></a>
     
-            <div class="docstring"><p>If backend supports list with limit.</p>
+            <div class="docstring"><p>If operator supports read.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.stat" class="classattr">
+                            <div id="Capability.stat_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat</span><span class="annotation">: bool</span>
+            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
     
-            <div class="docstring"><p>If operator supports stat.</p>
+            <div class="docstring"><p>If operator supports stat with if none match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_content_type" class="classattr">
+                            <div id="Capability.write_with_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
+            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
+    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
     
-            <div class="docstring"><p>if operator supports read with override content type.</p>
+            <div class="docstring"><p>If operator supports write with cache control.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_content_disposition" class="classattr">
+                            <div id="Capability.write_multi_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
+    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
     
-            <div class="docstring"><p>if operator supports read with override content disposition.</p>
+            <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
+
+<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_can_append" class="classattr">
+                            <div id="Capability.delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_append</span><span class="annotation">: bool</span>
+            <span class="name">delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_append"></a>
+    <a class="headerlink" href="#Capability.delete"></a>
     
-            <div class="docstring"><p>If operator supports write by append.</p>
+            <div class="docstring"><p>If operator supports delete.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.create_dir" class="classattr">
+                            <div id="Capability.write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">create_dir</span><span class="annotation">: bool</span>
+            <span class="name">write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.create_dir"></a>
+    <a class="headerlink" href="#Capability.write"></a>
     
-            <div class="docstring"><p>If operator supports create dir.</p>
+            <div class="docstring"><p>If operator supports write.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_cache_control" class="classattr">
+                            <div id="Capability.read_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
+    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
     
-            <div class="docstring"><p>If operator supports write with cache control.</p>
+            <div class="docstring"><p>If operator supports read with if none match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_cache_control" class="classattr">
+                            <div id="Capability.presign_read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">presign_read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
+    <a class="headerlink" href="#Capability.presign_read"></a>
     
-            <div class="docstring"><p>if operator supports read with override cache control.</p>
+            <div class="docstring"><p>If operator supports presign read.</p>
 </div>
 
 
@@ -1723,361 +1725,359 @@ by current Operator.</p>
 
 
                             </div>
-                            <div id="Capability.write_can_multi" class="classattr">
+                            <div id="Capability.stat" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
+            <span class="name">stat</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_multi"></a>
+    <a class="headerlink" href="#Capability.stat"></a>
     
-            <div class="docstring"><p>If operator supports write can be called in multi times.</p>
+            <div class="docstring"><p>If operator supports stat.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.list_with_start_after" class="classattr">
+                            <div id="Capability.list_with_limit" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
+            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_start_after"></a>
+    <a class="headerlink" href="#Capability.list_with_limit"></a>
     
-            <div class="docstring"><p>If backend supports list with start after.</p>
+            <div class="docstring"><p>If backend supports list with limit.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write" class="classattr">
+                            <div id="Capability.batch_delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write</span><span class="annotation">: bool</span>
+            <span class="name">batch_delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write"></a>
+    <a class="headerlink" href="#Capability.batch_delete"></a>
     
-            <div class="docstring"><p>If operator supports write.</p>
+            <div class="docstring"><p>If operator supports batch delete.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_content_disposition" class="classattr">
+                            <div id="Capability.presign_stat" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">presign_stat</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
+    <a class="headerlink" href="#Capability.presign_stat"></a>
     
-            <div class="docstring"><p>If operator supports write with content disposition.</p>
+            <div class="docstring"><p>If operator supports presign stat.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.delete" class="classattr">
+                            <div id="Capability.list_with_recursive" class="classattr">
                                 <div class="attr variable">
-            <span class="name">delete</span><span class="annotation">: bool</span>
+            <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.delete"></a>
+    <a class="headerlink" href="#Capability.list_with_recursive"></a>
     
-            <div class="docstring"><p>If operator supports delete.</p>
+            <div class="docstring"><p>If backend supports list without delimiter.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_content_type" class="classattr">
+                            <div id="Capability.read_with_override_content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_type"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
     
-            <div class="docstring"><p>If operator supports write with content type.</p>
+            <div class="docstring"><p>if operator supports read with override content type.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_stat" class="classattr">
+                            <div id="Capability.list" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_stat</span><span class="annotation">: bool</span>
+            <span class="name">list</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_stat"></a>
+    <a class="headerlink" href="#Capability.list"></a>
     
-            <div class="docstring"><p>If operator supports presign stat.</p>
+            <div class="docstring"><p>If operator supports list.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.rename" class="classattr">
+                            <div id="Capability.blocking" class="classattr">
                                 <div class="attr variable">
-            <span class="name">rename</span><span class="annotation">: bool</span>
+            <span class="name">blocking</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.rename"></a>
+    <a class="headerlink" href="#Capability.blocking"></a>
     
-            <div class="docstring"><p>If operator supports rename.</p>
+            <div class="docstring"><p>If operator supports blocking.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.batch_delete" class="classattr">
+                            <div id="Capability.batch_max_operations" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch_delete</span><span class="annotation">: bool</span>
+            <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch_delete"></a>
+    <a class="headerlink" href="#Capability.batch_max_operations"></a>
     
-            <div class="docstring"><p>If operator supports batch delete.</p>
+            <div class="docstring"><p>The max operations that operator supports in batch.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_if_none_match" class="classattr">
+                            <div id="Capability.read_with_override_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
     
-            <div class="docstring"><p>If operator supports read with if none match.</p>
+            <div class="docstring"><p>if operator supports read with override content disposition.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.copy" class="classattr">
+                            <div id="Capability.create_dir" class="classattr">
                                 <div class="attr variable">
-            <span class="name">copy</span><span class="annotation">: bool</span>
+            <span class="name">create_dir</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.copy"></a>
+    <a class="headerlink" href="#Capability.create_dir"></a>
     
-            <div class="docstring"><p>If operator supports copy.</p>
+            <div class="docstring"><p>If operator supports create dir.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.list" class="classattr">
+                            <div id="Capability.rename" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list</span><span class="annotation">: bool</span>
+            <span class="name">rename</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list"></a>
+    <a class="headerlink" href="#Capability.rename"></a>
     
-            <div class="docstring"><p>If operator supports list.</p>
+            <div class="docstring"><p>If operator supports rename.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_multi_min_size" class="classattr">
+                            <div id="Capability.write_with_content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
+    <a class="headerlink" href="#Capability.write_with_content_type"></a>
     
-            <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
-
-<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
+            <div class="docstring"><p>If operator supports write with content type.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.batch_max_operations" class="classattr">
+                            <div id="Capability.copy" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
+            <span class="name">copy</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch_max_operations"></a>
+    <a class="headerlink" href="#Capability.copy"></a>
     
-            <div class="docstring"><p>The max operations that operator supports in batch.</p>
+            <div class="docstring"><p>If operator supports copy.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_multi_max_size" class="classattr">
+                            <div id="Capability.write_total_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
+    <a class="headerlink" href="#Capability.write_total_max_size"></a>
     
-            <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
+            <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
 
-<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
+<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.stat_with_if_none_match" class="classattr">
+                            <div id="Capability.write_can_append" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">write_can_append</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.write_can_append"></a>
     
-            <div class="docstring"><p>If operator supports stat with if none match.</p>
+            <div class="docstring"><p>If operator supports write by append.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.blocking" class="classattr">
+                            <div id="Capability.list_with_start_after" class="classattr">
                                 <div class="attr variable">
-            <span class="name">blocking</span><span class="annotation">: bool</span>
+            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.blocking"></a>
+    <a class="headerlink" href="#Capability.list_with_start_after"></a>
     
-            <div class="docstring"><p>If operator supports blocking.</p>
+            <div class="docstring"><p>If backend supports list with start after.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.batch" class="classattr">
+                            <div id="Capability.presign_write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch</span><span class="annotation">: bool</span>
+            <span class="name">presign_write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch"></a>
+    <a class="headerlink" href="#Capability.presign_write"></a>
     
-            <div class="docstring"><p>If operator supports batch.</p>
+            <div class="docstring"><p>If operator supports presign write.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_total_max_size" class="classattr">
+                            <div id="Capability.write_multi_min_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_total_max_size"></a>
+    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
     
-            <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
+            <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
 
-<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
+<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_write" class="classattr">
+                            <div id="Capability.read_with_override_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_write</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_write"></a>
+    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
     
-            <div class="docstring"><p>If operator supports presign write.</p>
+            <div class="docstring"><p>if operator supports read with override cache control.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_if_match" class="classattr">
+                            <div id="Capability.write_can_empty" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_match"></a>
+    <a class="headerlink" href="#Capability.write_can_empty"></a>
     
-            <div class="docstring"><p>If operator supports read with if match.</p>
+            <div class="docstring"><p>If operator supports write with empty content.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.stat_with_if_match" class="classattr">
+                            <div id="Capability.write_can_multi" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
+    <a class="headerlink" href="#Capability.write_can_multi"></a>
     
-            <div class="docstring"><p>If operator supports stat with if match.</p>
+            <div class="docstring"><p>If operator supports write can be called in multi times.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read" class="classattr">
+                            <div id="Capability.stat_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read</span><span class="annotation">: bool</span>
+            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
     
-            <div class="docstring"><p>If operator supports read.</p>
+            <div class="docstring"><p>If operator supports stat with if match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_can_empty" class="classattr">
+                            <div id="Capability.batch" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
+            <span class="name">batch</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_empty"></a>
+    <a class="headerlink" href="#Capability.batch"></a>
     
-            <div class="docstring"><p>If operator supports write with empty content.</p>
+            <div class="docstring"><p>If operator supports batch.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_read" class="classattr">
+                            <div id="Capability.read_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_read</span><span class="annotation">: bool</span>
+            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_read"></a>
+    <a class="headerlink" href="#Capability.read_with_if_match"></a>
     
-            <div class="docstring"><p>If operator supports presign read.</p>
+            <div class="docstring"><p>If operator supports read with if match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.list_with_recursive" class="classattr">
+                            <div id="Capability.write_multi_align_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_recursive"></a>
+    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
     
-            <div class="docstring"><p>If backend supports list without delimiter.</p>
+            <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
+
+<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_multi_align_size" class="classattr">
+                            <div id="Capability.write_with_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
+    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
     
-            <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
-
-<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
+            <div class="docstring"><p>If operator supports write with content disposition.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index f16ea52f3c..4a51f0947f 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1 +1 @@
-window.pdocSearch=function(){!function(){var a=function(e){var t=new a.Index;return t.pipeline.add(a.trimmer,a.stopWordFilter,a.stemmer),e&&e.call(t,t),t};a.version="0.9.5",lunr=a,a.utils={},a.utils.warn=function(a){return function(e){a.console&&console.warn&&console.warn(e)}}(this),a.utils.toString=function(a){return null==a?"":a.toString()},a.EventEmitter=function(){this.events={}},a.EventEmitter.prototype.addListener=function(){var a=Array.prototype.slice.call(arguments),e=a.pop(),t=a [...]
\ No newline at end of file
+window.pdocSearch=function(){!function(){var a=function(e){var t=new a.Index;return t.pipeline.add(a.trimmer,a.stopWordFilter,a.stemmer),e&&e.call(t,t),t};a.version="0.9.5",lunr=a,a.utils={},a.utils.warn=function(a){return function(e){a.console&&console.warn&&console.warn(e)}}(this),a.utils.toString=function(a){return null==a?"":a.toString()},a.EventEmitter=function(){this.events={}},a.EventEmitter.prototype.addListener=function(){var a=Array.prototype.slice.call(arguments),e=a.pop(),t=a [...]
\ No newline at end of file
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index 71f8a9f411..f5f7641beb 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Quickstart | 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/quickstart"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/rust-core/index.html b/docs/rust-core/index.html
index d9fc2a6e24..f267aba360 100644
--- a/docs/rust-core/index.html
+++ b/docs/rust-core/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Rust Core | 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/rust-core"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tr [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/rust/opendal/enum.Metakey.html b/docs/rust/opendal/enum.Metakey.html
index 3ec4166039..d557803601 100644
--- a/docs/rust/opendal/enum.Metakey.html
+++ b/docs/rust/opendal/enum.Metakey.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="Metakey describes the metadata keys that can be stored or queried."><title>Metakey in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2, [...]
+<!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="Metakey describes the metadata keys that can be stored or queried."><title>Metakey in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2, [...]
     Complete,
     Mode,
     CacheControl,
@@ -10,6 +10,7 @@
     Etag,
     LastModified,
     Version,
+    UserMetaData,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Metakey describes the metadata keys that can be stored
 or queried.</p>
 <h3 id="for-store"><a class="doc-anchor" href="#for-store">§</a>For store</h3>
@@ -31,9 +32,10 @@ already contains all metadata.</p>
 </div><section id="variant.Etag" class="variant"><a href="#variant.Etag" class="anchor">§</a><h3 class="code-header">Etag</h3></section><div class="docblock"><p>Key for etag.</p>
 </div><section id="variant.LastModified" class="variant"><a href="#variant.LastModified" class="anchor">§</a><h3 class="code-header">LastModified</h3></section><div class="docblock"><p>Key for last modified.</p>
 </div><section id="variant.Version" class="variant"><a href="#variant.Version" class="anchor">§</a><h3 class="code-header">Version</h3></section><div class="docblock"><p>Key for version.</p>
-</div></div><h2 id="trait-implementations" class="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-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: <a class= [...]
+</div><section id="variant.UserMetaData" class="variant"><a href="#variant.UserMetaData" class="anchor">§</a><h3 class="code-header">UserMetaData</h3></section><div class="docblock"><p>Key for user metadata</p>
+</div></div><h2 id="trait-implementations" class="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-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#530-572">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: <a class= [...]
 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="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Rem%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-Rem%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Rem%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#530-572">source</a><a href="#impl-Rem%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/operator_futures/index.html b/docs/rust/opendal/operator_futures/index.html
index 4ffda3417b..ab3ad472e5 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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSan [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSan [...]
 <p>By using futures, users can add more options for operation.</p>
 </div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.OperatorFuture.html" title="struct opendal::operator_futures::OperatorFuture">OperatorFuture</a></div><div class="desc docblock-short">OperatorFuture is the future generated by <a href="../struct.Operator.html" title="struct opendal::Operator"><code>Operator</code></a>.</div></li></ul><h2 id="types" cla [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/struct.OperatorFuture.html b/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
index 4b2529fc2c..ef98770fb3 100644
--- a/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
+++ b/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
@@ -1,54 +1,61 @@
-<!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="OperatorFuture is the future generated by `Operator`."><title>OperatorFuture in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf08 [...]
+<!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="OperatorFuture is the future generated by `Operator`."><title>OperatorFuture in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf08 [...]
 <p>The future will consume all the input to generate a future.</p>
 <h2 id="notes"><a class="doc-anchor" href="#notes">§</a>NOTES</h2>
 <p>This struct is by design to keep in crate. We don’t want
 users to use this struct directly.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpStat,+Metadata,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#96-111">source</a><a href="#impl-OperatorFuture%3COpStat,+Metadata,+F%3E" class="anchor">§</a><h3 class="code-h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#103-105">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#108-110">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpStat,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#118-143">source</a><a href="#impl-OperatorFuture%3C(OpStat,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/fu [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#125-127">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#130-132">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#135-137">source</a><h4 class="code-header">pub fn <a href="#method.if_match-1" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#140-142">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-1" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#150-175">source</a><a href="#impl-OperatorFuture%3C(OpRead,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/fu [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#157-159">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control-1" class="fn">override_cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#162-164">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type-1" class="fn">override_content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><di [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#167-169">source</a><h4 class="code-header">pub fn <a href="#method.if_match-2" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#172-174">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-2" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#182-197">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#189-191">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#194-196">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+OpReader),+Buffer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#204-239">source</a><a href="#impl-OperatorFuture%3C(OpRead,+OpReader),+Buffer,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.ht [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#211-213">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-3" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#216-218">source</a><h4 class="code-header">pub fn <a href="#method.version-1" class="fn">version</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#221-223">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#226-228">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(self, range: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive"  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#231-233">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#236-238">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+OpReader),+Reader,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#250-270">source</a><a href="#impl-OperatorFuture%3C(OpRead,+OpReader),+Reader,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.ht [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#257-259">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-1" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#262-264">source</a><h4 class="code-header">pub fn <a href="#method.chunk-1" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#267-269">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(self, gap_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap size for this reader.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#277-325">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpStat,+Metadata,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#97-112">source</a><a href="#impl-OperatorFuture%3COpStat,+Metadata,+F%3E" class="anchor">§</a><h3 class="code-h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#104-106">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#109-111">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpStat,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#119-144">source</a><a href="#impl-OperatorFuture%3C(OpStat,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/fu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#126-128">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#131-133">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#136-138">source</a><h4 class="code-header">pub fn <a href="#method.if_match-1" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#141-143">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-1" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#151-176">source</a><a href="#impl-OperatorFuture%3C(OpRead,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/fu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#158-160">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control-1" class="fn">override_cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#163-165">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type-1" class="fn">override_content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><di [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#168-170">source</a><h4 class="code-header">pub fn <a href="#method.if_match-2" class="fn">if_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#173-175">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-2" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+Duration),+PresignedRequest,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#183-198">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+Duration),+PresignedRequest,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#190-192">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#195-197">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+OpReader),+Buffer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#205-240">source</a><a href="#impl-OperatorFuture%3C(OpRead,+OpReader),+Buffer,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.ht [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#212-214">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match-3" class="fn">if_none_match</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#217-219">source</a><h4 class="code-header">pub fn <a href="#method.version-1" class="fn">version</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#222-224">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#227-229">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(self, range: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive"  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#232-234">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#237-239">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpRead,+OpReader),+Reader,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#251-271">source</a><a href="#impl-OperatorFuture%3C(OpRead,+OpReader),+Reader,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.ht [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#258-260">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-1" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#263-265">source</a><h4 class="code-header">pub fn <a href="#method.chunk-1" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#268-270">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(self, gap_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap size for this reader.</p>
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#278-342">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait [...]
 <p>If the append mode is set, the data will be appended to the end of the file.</p>
 <h5 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</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.chunk-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#297-299">source</a><h4 class="code-header">pub fn <a href="#method.chunk-2" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the buffer size of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#298-300">source</a><h4 class="code-header">pub fn <a href="#method.chunk-2" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the buffer size of op.</p>
 <p>If buffer size is set, the data will be buffered by the underlying writer.</p>
 <h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
 <p>Service could have their own minimum buffer size while perform write operations like
 multipart uploads. So the buffer size may be larger than the given buffer size.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#302-304">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-2" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maxi [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#307-309">source</a><h4 class="code-header">pub fn <a href="#method.cache_control-1" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#312-314">source</a><h4 class="code-header">pub fn <a href="#method.content_type-1" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#317-319">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition-1" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div clas [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#322-324">source</a><h4 class="code-header">pub fn <a href="#method.executor-1" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the execu [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#332-387">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future. [...]
-<p>If the append mode is set, the data will be appended to the end of the file.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#303-305">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-2" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maxi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#308-310">source</a><h4 class="code-header">pub fn <a href="#method.cache_control-1" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#313-315">source</a><h4 class="code-header">pub fn <a href="#method.content_type-1" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#318-320">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition-1" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div clas [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#323-325">source</a><h4 class="code-header">pub fn <a href="#method.executor-1" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the execu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#333-341">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata" class="fn">user_metadata</a>(
+    self,
+    data: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)&gt;,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the user defined metadata of the op</p>
 <h6 id="notes-2"><a class="doc-anchor" href="#notes-2">§</a>Notes</h6>
+<p>we don’t need to include the user defined metadata prefix in the key
+every service will handle it internally</p>
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#349-414">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future. [...]
+<p>If the append mode is set, the data will be appended to the end of the file.</p>
+<h6 id="notes-3"><a class="doc-anchor" href="#notes-3">§</a>Notes</h6>
 <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.chunk-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#359-361">source</a><h4 class="code-header">pub fn <a href="#method.chunk-3" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#376-378">source</a><h4 class="code-header">pub fn <a href="#method.chunk-3" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
 <p>If chunk size is set, the data will be chunked by the underlying writer.</p>
 <h6 id="note-1"><a class="doc-anchor" href="#note-1">§</a>NOTE</h6>
 <p>Service could have their own limitation for chunk size. It’s possible that chunk size
@@ -59,56 +66,63 @@ is not equal to the given chunk size.</p>
 <li>GCS requires the part size to be aligned with 256 KiB.</li>
 </ul>
 <p>The services will alter the chunk size to meet their requirements.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#364-366">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-3" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maxi [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#369-371">source</a><h4 class="code-header">pub fn <a href="#method.cache_control-2" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#374-376">source</a><h4 class="code-header">pub fn <a href="#method.content_type-2" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#379-381">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition-2" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div clas [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#384-386">source</a><h4 class="code-header">pub fn <a href="#method.executor-2" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the execu [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpDelete,+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#394-399">source</a><a href="#impl-OperatorFuture%3COpDelete,+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::futur [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpList,+Vec%3CEntry%3E,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#406-451">source</a><a href="#impl-OperatorFuture%3COpList,+Vec%3CEntry%3E,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" titl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-3" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#381-383">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-3" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maxi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#386-388">source</a><h4 class="code-header">pub fn <a href="#method.cache_control-2" class="fn">cache_control</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Se [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#391-393">source</a><h4 class="code-header">pub fn <a href="#method.content_type-2" class="fn">content_type</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#396-398">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition-2" class="fn">content_disposition</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div clas [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor-2" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#401-403">source</a><h4 class="code-header">pub fn <a href="#method.executor-2" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the execu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#411-413">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata-1" class="fn">user_metadata</a>(
+    self,
+    data: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)&gt;,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the user defined metadata of the op</p>
+<h6 id="notes-4"><a class="doc-anchor" href="#notes-4">§</a>Notes</h6>
+<p>we don’t need to include the user defined metadata prefix in the key
+every service will handle it internally</p>
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpDelete,+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#421-426">source</a><a href="#impl-OperatorFuture%3COpDelete,+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::futur [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpList,+Vec%3CEntry%3E,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#433-478">source</a><a href="#impl-OperatorFuture%3COpList,+Vec%3CEntry%3E,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" titl [...]
 that could return per-request.</p>
 <p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#417-419">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#444-446">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
 to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#427-429">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#454-456">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
 <ul>
 <li>If <code>false</code>, list operation will only list the entries under the given path.</li>
 <li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
 </ul>
 <p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#439-441">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#466-468">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
 <p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
 <ul>
 <li><code>Some(v)</code> means exist.</li>
 <li><code>None</code> means services doesn’t have this meta.</li>
 </ul>
 <p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-4" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#448-450">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-4" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent i [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-4" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#475-477">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-4" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent i [...]
 <p>If concurrent is set to &lt;=1, the lister will perform stat requests sequentially.</p>
 <p>The default concurrent is 1.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpList,+Lister,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#458-503">source</a><a href="#impl-OperatorFuture%3COpList,+Lister,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::f [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpList,+Lister,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#485-530">source</a><a href="#impl-OperatorFuture%3COpList,+Lister,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::f [...]
 that could return per-request.</p>
 <p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#469-471">source</a><h4 class="code-header">pub fn <a href="#method.start_after-1" class="fn">start_after</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The star [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#496-498">source</a><h4 class="code-header">pub fn <a href="#method.start_after-1" class="fn">start_after</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The star [...]
 to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#479-481">source</a><h4 class="code-header">pub fn <a href="#method.recursive-1" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#506-508">source</a><h4 class="code-header">pub fn <a href="#method.recursive-1" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is  [...]
 <ul>
 <li>If <code>false</code>, list operation will only list the entries under the given path.</li>
 <li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
 </ul>
 <p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#491-493">source</a><h4 class="code-header">pub fn <a href="#method.metakey-1" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#518-520">source</a><h4 class="code-header">pub fn <a href="#method.metakey-1" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum. [...]
 <p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
 <ul>
 <li><code>Some(v)</code> means exist.</li>
 <li><code>None</code> means services doesn’t have this meta.</li>
 </ul>
 <p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-5" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#500-502">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-5" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent i [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-5" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#527-529">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-5" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent i [...]
 <p>If concurrent is set to &lt;=1, the lister will perform stat requests sequentially.</p>
 <p>The default concurrent is 1.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="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-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#79-89">source</a><a href="#impl-IntoFuture-for-OperatorFuture% [...]
-    F: <a class="trait" href="https://doc.rust-lang.org/nightly/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::Result">Result</a>&lt;O&gt;&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a href="#associatedtype.Output" class="anchor">§</a><h4 class="c [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#80-90">source</a><a href="#impl-IntoFuture-for-OperatorFuture% [...]
+    F: <a class="trait" href="https://doc.rust-lang.org/nightly/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::Result">Result</a>&lt;O&gt;&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a href="#associatedtype.Output" class="anchor">§</a><h4 class="c [...]
     I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a href="#impl-RefUnwindSafe-for-OperatorFuture%3CI,+O,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I, O, F&gt; !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core:: [...]
     I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section><section id="impl-Sync-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a href="#impl-Sync-for-OperatorFuture%3CI,+O,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I, O, F&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct"  [...]
     I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</div></h3></section><section id="impl-Unpin-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a href="#impl-Unpin-for-OperatorFuture%3CI,+O,+F%3E" class="anchor">§</a><h3 class="code-header">impl&lt;I, O, F&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="str [...]
diff --git a/docs/rust/opendal/operator_futures/type.FutureDelete.html b/docs/rust/opendal/operator_futures/type.FutureDelete.html
index 480b040e03..a78020b79e 100644
--- a/docs/rust/opendal/operator_futures/type.FutureDelete.html
+++ b/docs/rust/opendal/operator_futures/type.FutureDelete.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="Future that generated by `Operator::delete_with`."><title>FutureDelete in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureDelete&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COp [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureDelete&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COp [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureDelete" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureList.html b/docs/rust/opendal/operator_futures/type.FutureList.html
index aff9c91e9f..2ca8908857 100644
--- a/docs/rust/opendal/operator_futures/type.FutureList.html
+++ b/docs/rust/opendal/operator_futures/type.FutureList.html
@@ -1,24 +1,24 @@
-<!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` or `Operator::lister_with`."><title>FutureList in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Re [...]
+<!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` or `Operator::lister_with`."><title>FutureList in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Re [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureList&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpLi [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureList&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpLi [...]
 that could return per-request.</p>
 <p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#417-419">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#444-446">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
 to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#427-429">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#454-456">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
 <ul>
 <li>If <code>false</code>, list operation will only list the entries under the given path.</li>
 <li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
 </ul>
 <p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#439-441">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#466-468">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
 <p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
 <ul>
 <li><code>Some(v)</code> means exist.</li>
 <li><code>None</code> means services doesn’t have this meta.</li>
 </ul>
 <p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#448-450">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent is us [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#475-477">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent is us [...]
 <p>If concurrent is set to &lt;=1, the lister will perform stat requests sequentially.</p>
 <p>The default concurrent is 1.</p>
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureList" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureLister.html b/docs/rust/opendal/operator_futures/type.FutureLister.html
index d032844ef6..198fa4f2e8 100644
--- a/docs/rust/opendal/operator_futures/type.FutureLister.html
+++ b/docs/rust/opendal/operator_futures/type.FutureLister.html
@@ -1,24 +1,24 @@
-<!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` or `Operator::lister_with`."><title>FutureLister in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans- [...]
+<!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` or `Operator::lister_with`."><title>FutureLister in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans- [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureLister&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COp [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureLister&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COp [...]
 that could return per-request.</p>
 <p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#469-471">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#496-498">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The start_af [...]
 to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#479-481">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#506-508">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used [...]
 <ul>
 <li>If <code>false</code>, list operation will only list the entries under the given path.</li>
 <li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
 </ul>
 <p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#491-493">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#518-520">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/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Meta [...]
 <p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
 <ul>
 <li><code>Some(v)</code> means exist.</li>
 <li><code>None</code> means services doesn’t have this meta.</li>
 </ul>
 <p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#500-502">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent is us [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#527-529">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Concurrent is us [...]
 <p>If concurrent is set to &lt;=1, the lister will perform stat requests sequentially.</p>
 <p>The default concurrent is 1.</p>
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureLister" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FuturePresignRead.html b/docs/rust/opendal/operator_futures/type.FuturePresignRead.html
index 8054dfb0ef..f577ef4072 100644
--- a/docs/rust/opendal/operator_futures/type.FuturePresignRead.html
+++ b/docs/rust/opendal/operator_futures/type.FuturePresignRead.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="Future that generated by `Operator::presign_read_with`."><title>FuturePresignRead in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c14 [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c14 [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignRead&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#157-159">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#162-164">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#167-169">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of t [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#172-174">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignRead&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#158-160">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#163-165">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#168-170">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#173-175">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FuturePresignRead" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FuturePresignStat.html b/docs/rust/opendal/operator_futures/type.FuturePresignStat.html
index d67d338d64..d93a020b8b 100644
--- a/docs/rust/opendal/operator_futures/type.FuturePresignStat.html
+++ b/docs/rust/opendal/operator_futures/type.FuturePresignStat.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="Future that generated by `Operator::presign_stat_with`."><title>FuturePresignStat in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c14 [...]
+<!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_stat_with`."><title>FuturePresignStat in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c14 [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignStat&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#125-127">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#130-132">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#135-137">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of t [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#140-142">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignStat&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#126-128">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#131-133">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#136-138">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#141-143">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FuturePresignStat" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FuturePresignWrite.html b/docs/rust/opendal/operator_futures/type.FuturePresignWrite.html
index f3d2a3f42a..63415bbff4 100644
--- a/docs/rust/opendal/operator_futures/type.FuturePresignWrite.html
+++ b/docs/rust/opendal/operator_futures/type.FuturePresignWrite.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="Future that generated by `Operator::presign_write_with`."><title>FuturePresignWrite in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c [...]
+<!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_write_with`."><title>FuturePresignWrite in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignWrite&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFutur [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#189-191">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#194-196">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FuturePresignWrite&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFutur [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#190-192">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#195-197">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set th [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FuturePresignWrite" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureRead.html b/docs/rust/opendal/operator_futures/type.FutureRead.html
index 9b3f8b36b8..990821a115 100644
--- a/docs/rust/opendal/operator_futures/type.FutureRead.html
+++ b/docs/rust/opendal/operator_futures/type.FutureRead.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::read_with` or `Operator::reader_with`."><title>FutureRead in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Re [...]
+<!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` or `Operator::reader_with`."><title>FutureRead in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Re [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureRead&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpR [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#211-213">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#216-218">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#221-223">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#226-228">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(self, range: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive"  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#231-233">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#236-238">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureRead&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpR [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#212-214">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#217-219">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#222-224">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#227-229">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(self, range: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive"  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#232-234">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#237-239">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureRead" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureReader.html b/docs/rust/opendal/operator_futures/type.FutureReader.html
index b496b56e21..e0441e2407 100644
--- a/docs/rust/opendal/operator_futures/type.FutureReader.html
+++ b/docs/rust/opendal/operator_futures/type.FutureReader.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::read_with` or `Operator::reader_with`."><title>FutureReader in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans- [...]
+<!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` or `Operator::reader_with`."><title>FutureReader in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans- [...]
 <p>Users can add more options by public functions provided by this struct.</p>
 <h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
 <p><code>(OpRead, ())</code> is a trick to make sure <code>FutureReader</code> is different from <code>FutureRead</code></p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureReader&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(O [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#257-259">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#262-264">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#267-269">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(self, gap_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap size for this reader.</p>
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureReader&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(O [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#258-260">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#263-265">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size for [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#268-270">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(self, gap_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap size for this reader.</p>
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureReader" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureStat.html b/docs/rust/opendal/operator_futures/type.FutureStat.html
index 6571e361ee..9c1f4002f5 100644
--- a/docs/rust/opendal/operator_futures/type.FutureStat.html
+++ b/docs/rust/opendal/operator_futures/type.FutureStat.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="Future that generated by `Operator::stat_with`."><title>FutureStat in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
+<!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::stat_with`."><title>FutureStat in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureStat&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpSt [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#103-105">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#108-110">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureStat&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpSt [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#104-106">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/nightly/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.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#109-111">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version for this [...]
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureStat" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureWrite.html b/docs/rust/opendal/operator_futures/type.FutureWrite.html
index bf46200243..557d748906 100644
--- a/docs/rust/opendal/operator_futures/type.FutureWrite.html
+++ b/docs/rust/opendal/operator_futures/type.FutureWrite.html
@@ -1,17 +1,24 @@
-<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.wo [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.wo [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWrite&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(Op [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWrite&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(Op [...]
 <p>If the append mode is set, the data will be appended to the end of the file.</p>
 <h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</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.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#297-299">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the buffer size of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#298-300">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the buffer size of op.</p>
 <p>If buffer size is set, the data will be buffered by the underlying writer.</p>
 <h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
 <p>Service could have their own minimum buffer size while perform write operations like
 multipart uploads. So the buffer size may be larger than the given buffer size.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#302-304">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#307-309">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/nightly/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_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#312-314">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the c [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#317-319">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#322-324">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#303-305">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#308-310">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/nightly/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_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#313-315">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the c [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#318-320">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#323-325">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#333-341">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata" class="fn">user_metadata</a>(
+    self,
+    data: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)&gt;,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the user defined metadata of the op</p>
+<h6 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h6>
+<p>we don’t need to include the user defined metadata prefix in the key
+every service will handle it internally</p>
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureWrite" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_futures/type.FutureWriter.html b/docs/rust/opendal/operator_futures/type.FutureWriter.html
index 3a15f9b31a..b855fcc0c2 100644
--- a/docs/rust/opendal/operator_futures/type.FutureWriter.html
+++ b/docs/rust/opendal/operator_futures/type.FutureWriter.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::writer_with`."><title>FutureWriter in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
 <p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWriter&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(O [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWriter&lt;F&gt; { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(O [...]
 <p>If the append mode is set, the data will be appended to the end of the file.</p>
 <h6 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h6>
 <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.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#359-361">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#376-378">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
 <p>If chunk size is set, the data will be chunked by the underlying writer.</p>
 <h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
 <p>Service could have their own limitation for chunk size. It’s possible that chunk size
@@ -15,9 +15,16 @@ is not equal to the given chunk size.</p>
 <li>GCS requires the part size to be aligned with 256 KiB.</li>
 </ul>
 <p>The services will alter the chunk size to meet their requirements.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#364-366">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#369-371">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/nightly/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_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#374-376">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the c [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#379-381">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#384-386">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#381-383">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#386-388">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/nightly/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_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#391-393">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the c [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#396-398">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#401-403">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#411-413">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata" class="fn">user_metadata</a>(
+    self,
+    data: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)&gt;,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the user defined metadata of the op</p>
+<h6 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h6>
+<p>we don’t need to include the user defined metadata prefix in the key
+every service will handle it internally</p>
 </div></details></div></details></div><script src="../../type.impl/opendal/operator_futures/struct.OperatorFuture.js" data-self-path="opendal::types::operator::operator_futures::FutureWriter" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/enum.BatchOperation.html b/docs/rust/opendal/raw/enum.BatchOperation.html
index f5025beff7..4fb923d534 100644
--- a/docs/rust/opendal/raw/enum.BatchOperation.html
+++ b/docs/rust/opendal/raw/enum.BatchOperation.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="Batch operation used for batch."><title>BatchOperation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Batch operation used for batch."><title>BatchOperation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781 [...]
     Delete(<a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a>),
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Batch operation used for batch.</p>
 </div></details><h2 id="variants" class="variants 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 variants.</di [...]
-</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BatchOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#290-298">source</a><a href="#impl-BatchOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.BatchOperation.html" title="enum opend [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BatchOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#277">source</a><a href="#impl-Clone-for-BatchOperation" class="anchor">§</a><h3 class="code-header">impl [...]
+</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BatchOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#291-299">source</a><a href="#impl-BatchOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.BatchOperation.html" title="enum opend [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BatchOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#278">source</a><a href="#impl-Clone-for-BatchOperation" class="anchor">§</a><h3 class="code-header">impl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/enum.PresignOperation.html b/docs/rust/opendal/raw/enum.PresignOperation.html
index f39d9f512d..fbdeef341f 100644
--- a/docs/rust/opendal/raw/enum.PresignOperation.html
+++ b/docs/rust/opendal/raw/enum.PresignOperation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Presign operation used for presign."><title>PresignOperation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-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="Presign operation used for presign."><title>PresignOperation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8 [...]
     Stat(<a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpStat">OpStat</a>),
     Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>),
     Write(<a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>),
@@ -6,7 +6,7 @@
 </div></details><h2 id="variants" class="variants 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 variants.</di [...]
 </div><section id="variant.Read" class="variant"><a href="#variant.Read" class="anchor">§</a><h3 class="code-header">Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>)</h3></section><div class="docblock"><p>Presign a read operation.</p>
 </div><section id="variant.Write" class="variant"><a href="#variant.Write" class="anchor">§</a><h3 class="code-header">Write(<a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>)</h3></section><div class="docblock"><p>Presign a write operation.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#224">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#225">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/index.html b/docs/rust/opendal/raw/index.html
index d966c95d4b..969276a0f1 100644
--- a/docs/rust/opendal/raw/index.html
+++ b/docs/rust/opendal/raw/index.html
@@ -5,7 +5,7 @@
 access raw APIs.</li>
 <li>Raw APIs should only be accessed via <code>opendal::raw::Xxxx</code>, any public
 API should never expose raw API directly.</li>
-<li>Raw APIs are far more less stable than public API, please don’t rely on
+<li>Raw APIs are far less stable than public API, please don’t rely on
 them whenever possible.</li>
 </ul>
 </div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</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</co [...]
diff --git a/docs/rust/opendal/raw/struct.OpBatch.html b/docs/rust/opendal/raw/struct.OpBatch.html
index 145c6b7767..34718b8c41 100644
--- a/docs/rust/opendal/raw/struct.OpBatch.html
+++ b/docs/rust/opendal/raw/struct.OpBatch.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `batch` operation."><title>OpBatch in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpBatch" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#259-274">source</a><a href="#impl-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpBatch.html" title="struct opendal::raw::Op [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#266-268">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="enum" href="enum.BatchOperation.html [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#271-273">source</a><h4 class="code-header">pub fn <a href="#method.into_operation" class="fn">into_operation</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/night [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpBatch" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#254">source</a><a href="#impl-Clone-for-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="tra [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `batch` operation."><title>OpBatch in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpBatch" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#260-275">source</a><a href="#impl-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpBatch.html" title="struct opendal::raw::Op [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#267-269">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;[(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="enum" href="enum.BatchOperation.html [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#272-274">source</a><h4 class="code-header">pub fn <a href="#method.into_operation" class="fn">into_operation</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;(<a class="struct" href="https://doc.rust-lang.org/night [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpBatch" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#255">source</a><a href="#impl-Clone-for-OpBatch" class="anchor">§</a><h3 class="code-header">impl <a class="tra [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpCopy.html b/docs/rust/opendal/raw/struct.OpCopy.html
index 09b588a73d..34c624a6ac 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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
-</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#720-725">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal::raw::OpCop [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#717">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
+</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#733-738">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal::raw::OpCop [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#730">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpCreateDir.html b/docs/rust/opendal/raw/struct.OpCreateDir.html
index 8ffe63d847..62855e45f3 100644
--- a/docs/rust/opendal/raw/struct.OpCreateDir.html
+++ b/docs/rust/opendal/raw/struct.OpCreateDir.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `create` operation."><title>OpCreateDir in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `create` operation."><title>OpCreateDir in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
 <p>The path must be normalized.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCreateDir" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#35-40">source</a><a href="#impl-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCreateDir.html" title="struct openda [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCreateDir" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#32">source</a><a href="#impl-Clone-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCreateDir" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#36-41">source</a><a href="#impl-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCreateDir.html" title="struct openda [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCreateDir" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#33">source</a><a href="#impl-Clone-for-OpCreateDir" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpDelete.html b/docs/rust/opendal/raw/struct.OpDelete.html
index cb2c3ebb5b..564ab87b25 100644
--- a/docs/rust/opendal/raw/struct.OpDelete.html
+++ b/docs/rust/opendal/raw/struct.OpDelete.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `delete` operation."><title>OpDelete in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `delete` operation."><title>OpDelete in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
 <p>The path must be normalized.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpDelete" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#50-55">source</a><a href="#impl-OpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::O [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OpDelete-1" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#57-68">source</a><a href="#impl-OpDelete-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><sec [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#65-67">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpDelete" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#45">source</a><a href="#impl-Clone-for-OpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="tr [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpDelete" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#51-56">source</a><a href="#impl-OpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::O [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OpDelete-1" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#58-69">source</a><a href="#impl-OpDelete-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpDelete.html" title="struct opendal::raw::OpDelete">OpDelete</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><sec [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#66-68">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpDelete" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#46">source</a><a href="#impl-Clone-for-OpDelete" class="anchor">§</a><h3 class="code-header">impl <a class="tr [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpList.html b/docs/rust/opendal/raw/struct.OpList.html
index 92799d0115..fb9c9696cc 100644
--- a/docs/rust/opendal/raw/struct.OpList.html
+++ b/docs/rust/opendal/raw/struct.OpList.html
@@ -1,23 +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 `list` operation."><title>OpList in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpList" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#117-186">source</a><a href="#impl-OpList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpLis [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_limit" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#124-127">source</a><h4 class="code-header">pub fn <a href="#method.with_limit" class="fn">with_limit</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the limit of this list operat [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.limit" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#130-132">source</a><h4 class="code-header">pub fn <a href="#method.limit" class="fn">limit</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_start_after" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#135-138">source</a><h4 class="code-header">pub fn <a href="#method.with_start_after" class="fn">with_start_after</a>(self, start_after: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#141-143">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_recursive" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#151-154">source</a><h4 class="code-header">pub fn <a href="#method.with_recursive" class="fn">with_recursive</a>(self, recursive: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used  [...]
+<!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 `list` operation."><title>OpList in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpList" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#118-187">source</a><a href="#impl-OpList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpLis [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_limit" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#125-128">source</a><h4 class="code-header">pub fn <a href="#method.with_limit" class="fn">with_limit</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the limit of this list operat [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.limit" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#131-133">source</a><h4 class="code-header">pub fn <a href="#method.limit" class="fn">limit</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_start_after" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#136-139">source</a><h4 class="code-header">pub fn <a href="#method.with_start_after" class="fn">with_start_after</a>(self, start_after: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#142-144">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_recursive" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#152-155">source</a><h4 class="code-header">pub fn <a href="#method.with_recursive" class="fn">with_recursive</a>(self, recursive: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>The recursive is used  [...]
 <ul>
 <li>If <code>false</code>, list operation will only list the entries under the given path.</li>
 <li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
 </ul>
 <p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#157-159">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the current recursive.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_metakey" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#164-167">source</a><h4 class="code-header">pub fn <a href="#method.with_metakey" class="fn">with_metakey</a>(self, metakey: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Metakey [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#158-160">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the current recursive.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_metakey" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#165-168">source</a><h4 class="code-header">pub fn <a href="#method.with_metakey" class="fn">with_metakey</a>(self, metakey: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;FlagSet&lt;<a class="enum" href="../enum.Metakey [...]
 <p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#170-172">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(&amp;self) -&gt; FlagSet&lt;<a class="enum" href="../enum.Metakey.html" title="enum opendal::Metakey">Metakey</a>&gt;</h4></section></summary><div class="docblock"><p>Get the current metakey.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#177-180">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the concu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#171-173">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(&amp;self) -&gt; FlagSet&lt;<a class="enum" href="../enum.Metakey.html" title="enum opendal::Metakey">Metakey</a>&gt;</h4></section></summary><div class="docblock"><p>Get the current metakey.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#178-181">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Change the concu [...]
 <p>The default concurrent is 1.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#183-185">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent of list operation.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="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-OpList" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#71">source</a><a href="#impl-Clone-for-OpList" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#184-186">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent of list operation.</p>
+</div></details></div></details></div><h2 id="trait-implementations" class="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-OpList" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#72">source</a><a href="#impl-Clone-for-OpList" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpPresign.html b/docs/rust/opendal/raw/struct.OpPresign.html
index 9abaa35a78..bc6cb05aa7 100644
--- a/docs/rust/opendal/raw/struct.OpPresign.html
+++ b/docs/rust/opendal/raw/struct.OpPresign.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `presign` operation."><title>OpPresign in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d3 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `presign` operation."><title>OpPresign in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d3 [...]
 <p>The path must be normalized.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpPresign" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#198-221">source</a><a href="#impl-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpPresign.html" title="struct opendal::r [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#208-210">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a></h4></section></summary><div class="docblock"><p>Get operation from op.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.expire" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#213-215">source</a><h4 class="code-header">pub fn <a href="#method.expire" class="fn">expire</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a></h4></section></summary><div class="docblock"><p>Get expire fro [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_parts" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#218-220">source</a><h4 class="code-header">pub fn <a href="#method.into_parts" class="fn">into_parts</a>(self) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>, <a class="enum" href="enum.PresignOperation.html" titl [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpPresign" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#191">source</a><a href="#impl-Clone-for-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class= [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpPresign" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#199-222">source</a><a href="#impl-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpPresign.html" title="struct opendal::r [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.operation" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#209-211">source</a><h4 class="code-header">pub fn <a href="#method.operation" class="fn">operation</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a></h4></section></summary><div class="docblock"><p>Get operation from op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.expire" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#214-216">source</a><h4 class="code-header">pub fn <a href="#method.expire" class="fn">expire</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a></h4></section></summary><div class="docblock"><p>Get expire fro [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_parts" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#219-221">source</a><h4 class="code-header">pub fn <a href="#method.into_parts" class="fn">into_parts</a>(self) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>, <a class="enum" href="enum.PresignOperation.html" titl [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpPresign" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#192">source</a><a href="#impl-Clone-for-OpPresign" class="anchor">§</a><h3 class="code-header">impl <a class= [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpRead.html b/docs/rust/opendal/raw/struct.OpRead.html
index 4b2c9314da..d791716634 100644
--- a/docs/rust/opendal/raw/struct.OpRead.html
+++ b/docs/rust/opendal/raw/struct.OpRead.html
@@ -1,26 +1,26 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `read` operation."><title>OpRead in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRead" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#313-426">source</a><a href="#impl-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRea [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_range" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#320-323">source</a><h4 class="code-header">pub fn <a href="#method.with_range" class="fn">with_range</a>(self, range: <a class="struct" href="struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the range of the option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#326-328">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(&amp;self) -&gt; <a class="struct" href="struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a></h4></section></summary><div class="docblock"><p>Get range from option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#336-339">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `read` operation."><title>OpRead in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRead" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#314-427">source</a><a href="#impl-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRea [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_range" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#321-324">source</a><h4 class="code-header">pub fn <a href="#method.with_range" class="fn">with_range</a>(self, range: <a class="struct" href="struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the range of the option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#327-329">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(&amp;self) -&gt; <a class="struct" href="struct.BytesRange.html" title="struct opendal::raw::BytesRange">BytesRange</a></h4></section></summary><div class="docblock"><p>Get range from option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#337-340">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(
     self,
     content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Sets the content-disposition header that should be send back by the remote read operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#343-345">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#344-346">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&a [...]
 operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#348-351">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#354-356">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primi [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#359-362">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_type" class="fn">with_override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#365-367">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitiv [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#370-373">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#376-378">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nigh [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#381-384">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#387-389">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/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_version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#392-395">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, version: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version of the option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#398-400">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#403-406">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#423-425">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="../struct.Executor.html" title="s [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRead" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#301">source</a><a href="#impl-Clone-for-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#349-352">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#355-357">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#360-363">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_type" class="fn">with_override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#366-368">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitiv [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#371-374">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#377-379">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nigh [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#382-385">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#388-390">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/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_version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#393-396">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, version: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version of the option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#399-401">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#404-407">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#424-426">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="../struct.Executor.html" title="s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRead" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#302">source</a><a href="#impl-Clone-for-OpRead" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpReader.html b/docs/rust/opendal/raw/struct.OpReader.html
index 11feb85bca..e93330c6c0 100644
--- a/docs/rust/opendal/raw/struct.OpReader.html
+++ b/docs/rust/opendal/raw/struct.OpReader.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="Args for reader operation."><title>OpReader in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpReader" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#449-487">source</a><a href="#impl-OpReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpReader.html" title="struct opendal::raw: [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#456-459">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the concurre [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#462-464">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get concurrent from option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#467-470">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk of the option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#473-475">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_gap" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#478-481">source</a><h4 class="code-header">pub fn <a href="#method.with_gap" class="fn">with_gap</a>(self, gap: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap of the option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#484-486">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.us [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="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-OpReader" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#429">source</a><a href="#impl-Clone-for-OpReader" class="anchor">§</a><h3 class="code-header">impl <a class="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="Args for reader operation."><title>OpReader in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpReader" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#450-488">source</a><a href="#impl-OpReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpReader.html" title="struct opendal::raw: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#457-460">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the concurre [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#463-465">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get concurrent from option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#468-471">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk of the option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#474-476">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_gap" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#479-482">source</a><h4 class="code-header">pub fn <a href="#method.with_gap" class="fn">with_gap</a>(self, gap: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the gap of the option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#485-487">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.us [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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-OpReader" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#430">source</a><a href="#impl-Clone-for-OpReader" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpRename.html b/docs/rust/opendal/raw/struct.OpRename.html
index 54217ec50d..d21c785dbd 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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
-</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#731-736">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct opendal::raw: [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#728">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="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="Args for `rename` operation."><title>OpRename in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
+</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#744-749">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct opendal::raw: [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#741">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpStat.html b/docs/rust/opendal/raw/struct.OpStat.html
index ee00a2a082..9327c535b0 100644
--- a/docs/rust/opendal/raw/struct.OpStat.html
+++ b/docs/rust/opendal/raw/struct.OpStat.html
@@ -1,22 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `stat` operation."><title>OpStat in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpStat" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#500-572">source</a><a href="#impl-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpSta [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#507-510">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#513-515">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nigh [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#518-521">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#524-526">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/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_override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#529-532">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `stat` operation."><title>OpStat in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpStat" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#501-573">source</a><a href="#impl-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpStat.html" title="struct opendal::raw::OpSta [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#508-511">source</a><h4 class="code-header">pub fn <a href="#method.with_if_match" class="fn">with_if_match</a>(self, if_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the If-Match of the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#514-516">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nigh [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#519-522">source</a><h4 class="code-header">pub fn <a href="#method.with_if_none_match" class="fn">with_if_none_match</a>(self, if_none_match: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/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.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#525-527">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/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_override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#530-533">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_disposition" class="fn">with_override_content_disposition</a>(
     self,
     content_disposition: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Sets the content-disposition header that should be send back by the remote read operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#536-538">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#537-539">source</a><h4 class="code-header">pub fn <a href="#method.override_content_disposition" class="fn">override_content_disposition</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&a [...]
 operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#541-544">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#547-549">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primi [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#552-555">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_type" class="fn">with_override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#558-560">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitiv [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#563-566">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, version: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version of the option</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#569-571">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpStat" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#490">source</a><a href="#impl-Clone-for-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#542-545">source</a><h4 class="code-header">pub fn <a href="#method.with_override_cache_control" class="fn">with_override_cache_control</a>(self, cache_control: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#548-550">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primi [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#553-556">source</a><h4 class="code-header">pub fn <a href="#method.with_override_content_type" class="fn">with_override_content_type</a>(self, content_type: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#559-561">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitiv [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#564-567">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, version: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the version of the option</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#570-572">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpStat" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#491">source</a><a href="#impl-Clone-for-OpStat" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpWrite.html b/docs/rust/opendal/raw/struct.OpWrite.html
index 226d988dba..0edac380bb 100644
--- a/docs/rust/opendal/raw/struct.OpWrite.html
+++ b/docs/rust/opendal/raw/struct.OpWrite.html
@@ -1,23 +1,25 @@
-<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
-</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#585-680">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::Op [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#587-693">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::Op [...]
 <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.append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#596-598">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/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the append from op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#598-600">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/nightly/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="src rightside" href="../../src/opendal/raw/ops.rs.html#607-610">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/nightly/std/primitive.bool.html">bool</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the append mode of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#609-612">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/nightly/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 class="doc-anchor" href="#notes">§</a>Notes</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_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#613-615">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-l [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#618-621">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#624-626">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" hre [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#629-632">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#635-637">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/nightly/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_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#640-643">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/nightly/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.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#646-648">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#651-654">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#657-659">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="../struct.Executor.html" title="s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#662-665">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#575">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="tra [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#615-617">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#620-623">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#626-628">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" hre [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#631-634">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/nightly/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#637-639">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/nightly/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_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#642-645">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/nightly/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.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#648-650">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#653-656">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the maximum  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#659-661">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="../struct.Executor.html" title="s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#664-667">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_user_metadata" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#684-687">source</a><h4 class="code-header">pub fn <a href="#method.with_user_metadata" class="fn">with_user_metadata</a>(self, metadata: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#690-692">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata" class="fn">user_metadata</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="https://doc.rust-l [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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="src rightside" href="../../src/opendal/raw/ops.rs.html#576">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="tra [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpWriter.html b/docs/rust/opendal/raw/struct.OpWriter.html
index 0c0cb02874..536365b9ac 100644
--- a/docs/rust/opendal/raw/struct.OpWriter.html
+++ b/docs/rust/opendal/raw/struct.OpWriter.html
@@ -1,14 +1,14 @@
-<!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 `writer` operation."><title>OpWriter in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#688-714">source</a><a href="#impl-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWriter.html" title="struct opendal::raw: [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#697-699">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
+<!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 `writer` operation."><title>OpWriter in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#701-727">source</a><a href="#impl-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWriter.html" title="struct opendal::raw: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#710-712">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
 <p>The chunk is used by service to decide the chunk size of the underlying writer.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#710-713">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#723-726">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set the chunk of op.</p>
 <p>If chunk is set, the data will be chunked by the underlying writer.</p>
 <h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
 <p>Service could have their own minimum chunk size while perform write
 operations like multipart uploads. So the chunk size may be larger than
 the given buffer size.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="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-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#683">source</a><a href="#impl-Clone-for-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#696">source</a><a href="#impl-Clone-for-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/services/struct.Oss.html b/docs/rust/opendal/services/struct.Oss.html
index 1eeb883198..87ed8b3097 100644
--- a/docs/rust/opendal/services/struct.Oss.html
+++ b/docs/rust/opendal/services/struct.Oss.html
@@ -77,7 +77,7 @@ blocking</li>
 <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="src 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/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.refer [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="src 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/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primi [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_endpoint" class="method"><a class="src 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/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-la [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_endpoint" class="method"><a class="src 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/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-la [...]
 <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>
diff --git a/docs/rust/opendal/struct.Capability.html b/docs/rust/opendal/struct.Capability.html
index 3c07470f41..aa186cfaeb 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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c1 [...]
+<!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><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c1 [...]
     pub stat: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     pub stat_with_if_match: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     pub stat_with_if_none_match: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
@@ -18,6 +18,7 @@
     pub write_with_content_type: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     pub write_with_content_disposition: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     pub write_with_cache_control: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
+    pub write_with_user_metadata: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     pub write_multi_max_size: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;,
     pub write_multi_min_size: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;,
     pub write_multi_align_size: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;,
@@ -90,6 +91,7 @@ decide if this operation optimized or not.</p>
 </div><span id="structfield.write_with_content_type" class="structfield 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/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content type.</p>
 </div><span id="structfield.write_with_content_disposition" class="structfield 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/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with content disposition.</p>
 </div><span id="structfield.write_with_cache_control" class="structfield 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/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with cache control.</p>
+</div><span id="structfield.write_with_user_metadata" class="structfield section-header"><a href="#structfield.write_with_user_metadata" class="anchor field">§</a><code>write_with_user_metadata: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports write with user defined metadata</p>
 </div><span id="structfield.write_multi_max_size" class="structfield section-header"><a href="#structfield.write_multi_max_size" class="anchor field">§</a><code>write_multi_max_size: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code></span><div class="docblock"><p>write_multi_max_size is the max size [...]
 <p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
 </div><span id="structfield.write_multi_min_size" class="structfield section-header"><a href="#structfield.write_multi_min_size" class="anchor field">§</a><code>write_multi_min_size: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code></span><div class="docblock"><p>write_multi_min_size is the min size [...]
@@ -114,7 +116,7 @@ decide if this operation optimized or not.</p>
 </div><span id="structfield.batch_delete" class="structfield section-header"><a href="#structfield.batch_delete" class="anchor field">§</a><code>batch_delete: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports batch delete.</p>
 </div><span id="structfield.batch_max_operations" class="structfield 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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code></span><div class="docblock"><p>The max operations that operator sup [...]
 </div><span id="structfield.blocking" class="structfield section-header"><a href="#structfield.blocking" class="anchor field">§</a><code>blocking: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If operator supports blocking.</p>
-</div><h2 id="trait-implementations" class="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="src rightside" href="../src/opendal/types/capability.rs.html#56">source</a><a href="#impl-Clone-for-Capability" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc [...]
+</div><h2 id="trait-implementations" class="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="src rightside" href="../src/opendal/types/capability.rs.html#56">source</a><a href="#impl-Clone-for-Capability" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/struct.Metadata.html b/docs/rust/opendal/struct.Metadata.html
index 13a0d98634..be7055eddf 100644
--- a/docs/rust/opendal/struct.Metadata.html
+++ b/docs/rust/opendal/struct.Metadata.html
@@ -1,76 +1,76 @@
-<!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 carries all metadata associated with a path."><title>Metadata in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Med [...]
+<!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 carries all metadata associated with a path."><title>Metadata in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Med [...]
 <h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
 <p>mode and content_length are required metadata that all services
 should provide during <code>stat</code> operation. But in <code>list</code> operation,
 a.k.a., <code>Entry</code>’s content length could be <code>None</code>.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#50-510">source</a><a href="#impl-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Metadata.html" title="struct opendal::M [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#80-82">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(&amp;self) -&gt; FlagSet&lt;<a class="enum" href="enum.Metakey.html" title="enum opendal::Metakey">Metakey</a>&gt;</h4></section></summary><div class="docblock"><p>Get the metakey from metadata.</p>
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#52-528">source</a><a href="#impl-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Metadata.html" title="struct opendal::M [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#83-85">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(&amp;self) -&gt; FlagSet&lt;<a class="enum" href="enum.Metakey.html" title="enum opendal::Metakey">Metakey</a>&gt;</h4></section></summary><div class="docblock"><p>Get the metakey from metadata.</p>
 <p>This value describes which metadata has been set.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#103-110">source</a><h4 class="code-header">pub fn <a href="#method.mode" class="fn">mode</a>(&amp;self) -&gt; <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a></h4></section></summary><div class="docblock"><p>mode represent this entry’s mode.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_file" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#113-115">source</a><h4 class="code-header">pub fn <a href="#method.is_file" class="fn">is_file</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this metadata is for a [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_dir" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#118-120">source</a><h4 class="code-header">pub fn <a href="#method.is_dir" class="fn">is_dir</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this metadata is for a di [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#123-127">source</a><h4 class="code-header">pub fn <a href="#method.set_mode" class="fn">set_mode</a>(&amp;mut self, v: <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#130-134">source</a><h4 class="code-header">pub fn <a href="#method.with_mode" class="fn">with_mode</a>(self, v: <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set mode for entry.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#142-151">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/nightly/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.mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#106-113">source</a><h4 class="code-header">pub fn <a href="#method.mode" class="fn">mode</a>(&amp;self) -&gt; <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a></h4></section></summary><div class="docblock"><p>mode represent this entry’s mode.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_file" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#116-118">source</a><h4 class="code-header">pub fn <a href="#method.is_file" class="fn">is_file</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this metadata is for a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_dir" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#121-123">source</a><h4 class="code-header">pub fn <a href="#method.is_dir" class="fn">is_dir</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this metadata is for a di [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#126-130">source</a><h4 class="code-header">pub fn <a href="#method.set_mode" class="fn">set_mode</a>(&amp;mut self, v: <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_mode" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#133-137">source</a><h4 class="code-header">pub fn <a href="#method.with_mode" class="fn">with_mode</a>(self, v: <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set mode for entry.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#145-154">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc [...]
 Cache-Control is defined by <a href="https://httpwg.org/specs/rfc7234.html#header.cache-control">RFC 7234</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control">MDN Cache-Control</a> for more information.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.CacheControl" title="variant opendal::Metakey::CacheControl"><code>Metakey::CacheControl</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#157-161">source</a><h4 class="code-header">pub fn <a href="#method.set_cache_control" class="fn">set_cache_control</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#160-164">source</a><h4 class="code-header">pub fn <a href="#method.set_cache_control" class="fn">set_cache_control</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightl [...]
 <p>Cache-Control is defined by <a href="https://httpwg.org/specs/rfc7234.html#header.cache-control">RFC 7234</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control">MDN Cache-Control</a> for more information.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#167-171">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#170-174">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></sum [...]
 <p>Cache-Control is defined by <a href="https://httpwg.org/specs/rfc7234.html#header.cache-control">RFC 7234</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control">MDN Cache-Control</a> for more information.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#182-190">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Content length of this entry.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#185-193">source</a><h4 class="code-header">pub fn <a href="#method.content_length" class="fn">content_length</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Content length of this entry.</p>
 <p><code>Content-Length</code> is defined by <a href="https://httpwg.org/specs/rfc7230.html#header.content-length">RFC 7230</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length">MDN Content-Length</a> for more information.</p>
 <h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.ContentLength" title="variant opendal::Metakey::ContentLength"><code>Metakey::ContentLength</code></a>, otherwise it will panic.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#193-197">source</a><h4 class="code-header">pub fn <a href="#method.set_content_length" class="fn">set_content_length</a>(&amp;mut self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#200-204">source</a><h4 class="code-header">pub fn <a href="#method.with_content_length" class="fn">with_content_length</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set content l [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#215-223">source</a><h4 class="code-header">pub fn <a href="#method.content_md5" class="fn">content_md5</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust- [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#196-200">source</a><h4 class="code-header">pub fn <a href="#method.set_content_length" class="fn">set_content_length</a>(&amp;mut self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_length" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#203-207">source</a><h4 class="code-header">pub fn <a href="#method.with_content_length" class="fn">with_content_length</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Set content l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#218-226">source</a><h4 class="code-header">pub fn <a href="#method.content_md5" class="fn">content_md5</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust- [...]
 <p>Content MD5 is defined by <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC 2616</a>.
 And removed by <a href="https://www.rfc-editor.org/rfc/rfc7231">RFC 7231</a>.</p>
 <p>OpenDAL will try its best to set this value, but not guarantee this value is the md5 of content.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.ContentMd5" title="variant opendal::Metakey::ContentMd5"><code>Metakey::ContentMd5</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#229-233">source</a><h4 class="code-header">pub fn <a href="#method.set_content_md5" class="fn">set_content_md5</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#232-236">source</a><h4 class="code-header">pub fn <a href="#method.set_content_md5" class="fn">set_content_md5</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/ [...]
 <p>Content MD5 is defined by <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC 2616</a>.
 And removed by <a href="https://www.rfc-editor.org/rfc/rfc7231">RFC 7231</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#239-243">source</a><h4 class="code-header">pub fn <a href="#method.with_content_md5" class="fn">with_content_md5</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_md5" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#242-246">source</a><h4 class="code-header">pub fn <a href="#method.with_content_md5" class="fn">with_content_md5</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary>< [...]
 <p>Content MD5 is defined by <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC 2616</a>.
 And removed by <a href="https://www.rfc-editor.org/rfc/rfc7231">RFC 7231</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#251-259">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#254-262">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.ru [...]
 <p>Content Type is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-type">RFC 9110</a>.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.ContentType" title="variant opendal::Metakey::ContentType"><code>Metakey::ContentType</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#264-268">source</a><h4 class="code-header">pub fn <a href="#method.set_content_type" class="fn">set_content_type</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#267-271">source</a><h4 class="code-header">pub fn <a href="#method.set_content_type" class="fn">set_content_type</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
 <p>Content Type is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-type">RFC 9110</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#273-277">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summar [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#276-280">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summar [...]
 <p>Content Type is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-type">RFC 9110</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#285-294">source</a><h4 class="code-header">pub fn <a href="#method.content_range" class="fn">content_range</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="raw/struct.BytesCon [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#288-297">source</a><h4 class="code-header">pub fn <a href="#method.content_range" class="fn">content_range</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="raw/struct.BytesCon [...]
 <p>Content Range is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-range">RFC 9110</a>.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.ContentRange" title="variant opendal::Metakey::ContentRange"><code>Metakey::ContentRange</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#299-303">source</a><h4 class="code-header">pub fn <a href="#method.set_content_range" class="fn">set_content_range</a>(&amp;mut self, v: <a class="struct" href="raw/struct.BytesContentRange.html" title="struct opendal::raw::BytesContentRange">BytesContentRange</a>) -&gt; <a class="primitive" href="ht [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#302-306">source</a><h4 class="code-header">pub fn <a href="#method.set_content_range" class="fn">set_content_range</a>(&amp;mut self, v: <a class="struct" href="raw/struct.BytesContentRange.html" title="struct opendal::raw::BytesContentRange">BytesContentRange</a>) -&gt; <a class="primitive" href="ht [...]
 <p>Content Range is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-range">RFC 9110</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#308-312">source</a><h4 class="code-header">pub fn <a href="#method.with_content_range" class="fn">with_content_range</a>(self, v: <a class="struct" href="raw/struct.BytesContentRange.html" title="struct opendal::raw::BytesContentRange">BytesContentRange</a>) -&gt; Self</h4></section></summary><div c [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_range" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#311-315">source</a><h4 class="code-header">pub fn <a href="#method.with_content_range" class="fn">with_content_range</a>(self, v: <a class="struct" href="raw/struct.BytesContentRange.html" title="struct opendal::raw::BytesContentRange">BytesContentRange</a>) -&gt; Self</h4></section></summary><div c [...]
 <p>Content Range is defined by <a href="https://httpwg.org/specs/rfc9110.html#field.content-range">RFC 9110</a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#323-332">source</a><h4 class="code-header">pub fn <a href="#method.last_modified" class="fn">last_modified</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://docs.rs/chr [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#326-335">source</a><h4 class="code-header">pub fn <a href="#method.last_modified" class="fn">last_modified</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://docs.rs/chr [...]
 <p><code>Last-Modified</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.last-modified">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified">MDN Last-Modified</a> for more information.</p>
 <p>OpenDAL parse the raw value into <a href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="struct chrono::datetime::DateTime"><code>DateTime</code></a> for convenient.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.LastModified" title="variant opendal::Metakey::LastModified"><code>Metakey::LastModified</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#338-342">source</a><h4 class="code-header">pub fn <a href="#method.set_last_modified" class="fn">set_last_modified</a>(&amp;mut self, v: <a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="struct chrono::datetime::DateTime">DateTime</a>&lt;<a class="stru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#341-345">source</a><h4 class="code-header">pub fn <a href="#method.set_last_modified" class="fn">set_last_modified</a>(&amp;mut self, v: <a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="struct chrono::datetime::DateTime">DateTime</a>&lt;<a class="stru [...]
 <p><code>Last-Modified</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.last-modified">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified">MDN Last-Modified</a> for more information.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#348-352">source</a><h4 class="code-header">pub fn <a href="#method.with_last_modified" class="fn">with_last_modified</a>(self, v: <a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="struct chrono::datetime::DateTime">DateTime</a>&lt;<a class="struct" hr [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_last_modified" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#351-355">source</a><h4 class="code-header">pub fn <a href="#method.with_last_modified" class="fn">with_last_modified</a>(self, v: <a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="struct chrono::datetime::DateTime">DateTime</a>&lt;<a class="struct" hr [...]
 <p><code>Last-Modified</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.last-modified">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified">MDN Last-Modified</a> for more information.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#368-376">source</a><h4 class="code-header">pub fn <a href="#method.etag" class="fn">etag</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#371-379">source</a><h4 class="code-header">pub fn <a href="#method.etag" class="fn">etag</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/ [...]
 <p><code>ETag</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.etag">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag">MDN ETag</a> for more information.</p>
 <p>OpenDAL will return this value AS-IS like the following:</p>
@@ -81,7 +81,7 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
 <p><code>&quot;</code> is part of etag.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.Etag" title="variant opendal::Metakey::Etag"><code>Metakey::Etag</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#389-393">source</a><h4 class="code-header">pub fn <a href="#method.set_etag" class="fn">set_etag</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#392-396">source</a><h4 class="code-header">pub fn <a href="#method.set_etag" class="fn">set_etag</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.h [...]
 <p><code>ETag</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.etag">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag">MDN ETag</a> for more information.</p>
 <p>OpenDAL will return this value AS-IS like the following:</p>
@@ -90,7 +90,7 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
 <li><code>W/&quot;0815&quot;</code></li>
 </ul>
 <p><code>&quot;</code> is part of etag, don’t trim it before setting.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#406-410">source</a><h4 class="code-header">pub fn <a href="#method.with_etag" class="fn">with_etag</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary><div class="docblock"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_etag" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#409-413">source</a><h4 class="code-header">pub fn <a href="#method.with_etag" class="fn">with_etag</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary><div class="docblock"> [...]
 <p><code>ETag</code> is defined by <a href="https://httpwg.org/specs/rfc7232.html#header.etag">RFC 7232</a>
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag">MDN ETag</a> for more information.</p>
 <p>OpenDAL will return this value AS-IS like the following:</p>
@@ -99,7 +99,7 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
 <li><code>W/&quot;0815&quot;</code></li>
 </ul>
 <p><code>&quot;</code> is part of etag, don’t trim it before setting.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#426-435">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/nightly/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.content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#429-438">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/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" [...]
 <p><code>Content-Disposition</code> is defined by <a href="https://www.rfc-editor/rfcs/2616">RFC 2616</a> and
 clarified usage in <a href="https://www.rfc-editor/6266">RFC 6266</a>.
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition">MDN Content-Disposition</a> for more information.</p>
@@ -111,7 +111,7 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cont
 </ul>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.ContentDisposition" title="variant opendal::Metakey::ContentDisposition"><code>Metakey::ContentDisposition</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#448-452">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#451-455">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</ [...]
 <p><code>Content-Disposition</code> is defined by <a href="https://www.rfc-editor/rfcs/2616">RFC 2616</a> and
 clarified usage in <a href="https://www.rfc-editor/6266">RFC 6266</a>.
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition">MDN Content-Disposition</a> for more information.</p>
@@ -121,7 +121,7 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cont
 <li>“attachment”</li>
 <li>“attachment; filename=&quot;filename.jpg&quot;”</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#465-469">source</a><h4 class="code-header">pub fn <a href="#method.set_content_disposition" class="fn">set_content_disposition</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_content_disposition" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#468-472">source</a><h4 class="code-header">pub fn <a href="#method.set_content_disposition" class="fn">set_content_disposition</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.ru [...]
 <p><code>Content-Disposition</code> is defined by <a href="https://www.rfc-editor/rfcs/2616">RFC 2616</a> and
 clarified usage in <a href="https://www.rfc-editor/6266">RFC 6266</a>.
 Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition">MDN Content-Disposition</a> for more information.</p>
@@ -131,21 +131,25 @@ Refer to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cont
 <li>“attachment”</li>
 <li>“attachment; filename=&quot;filename.jpg&quot;”</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#479-487">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nig [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#482-490">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https://doc.rust-lang.org/nig [...]
 <p>Version is a string that can be used to identify the version of this entry.</p>
 <p>This field may come out from the version control system, like object versioning in AWS S3.</p>
 <p>This value is only available when calling on result of <code>stat</code> or <code>list</code> with
 <a href="enum.Metakey.html#variant.Version" title="variant opendal::Metakey::Version"><code>Metakey::Version</code></a>, otherwise this method returns <code>None</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#494-498">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary><div class="d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#497-501">source</a><h4 class="code-header">pub fn <a href="#method.with_version" class="fn">with_version</a>(self, v: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; Self</h4></section></summary><div class="d [...]
 <p>Version is a string that can be used to identify the version of this entry.</p>
 <p>This field may come out from the version control system, like object versioning in AWS S3.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#505-509">source</a><h4 class="code-header">pub fn <a href="#method.set_version" class="fn">set_version</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_version" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#508-512">source</a><h4 class="code-header">pub fn <a href="#method.set_version" class="fn">set_version</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.re [...]
 <p>Version is a string that can be used to identify the version of this entry.</p>
 <p>This field may come out from the version control system, like object versioning in AWS S3.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="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-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#32">source</a><a href="#impl-Clone-for-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class [...]
-</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="../src/opendal/services/sftp/utils.rs.html#25-50">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(meta: SftpMeta) -&gt; Self</h4></section></summary><div class='docblock'>Converts to this  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.user_metadata" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#518-520">source</a><h4 class="code-header">pub fn <a href="#method.user_metadata" class="fn">user_metadata</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="https://doc.ru [...]
+<p>The prefix of the user defined metadata key(for example: in oss, it’s x-oss-meta-)
+is remove from the key</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_user_metadata" class="method"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#523-527">source</a><h4 class="code-header">pub fn <a href="#method.with_user_metadata" class="fn">with_user_metadata</a>(&amp;mut self, data: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">Ha [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="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-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#33">source</a><a href="#impl-Clone-for-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class [...]
+</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="../src/opendal/services/sftp/utils.rs.html#25-50">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(meta: SftpMeta) -&gt; Self</h4></section></summary><div class='docblock'>Converts to this  [...]
 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="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#32">source</a><a href="#impl-Eq-for-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Metadata.html" title="struct op [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Metadata" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#33">source</a><a href="#impl-Eq-for-Metadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Metadata.html" title="struct op [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></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="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index 7e03bb7f6d..298e2b14ef 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1 +1 @@
-var searchIndex=new Map(JSON.parse('[["opendal",{"t":"RPPPPPPPPFFFFFFFKPPFPPPPPPPPPPPPPPPPPPFGPFGPPKFPPPPFFFFPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPPFFFPPPPPPPFPPIPPTGPPPPFFFPPPPPPPPPPPPPFPNNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
\ No newline at end of file
+var searchIndex=new Map(JSON.parse('[["opendal",{"t":"RPPPPPPPPFFFFFFFKPPFPPPPPPPPPPPPPPPPPPFGPFGPPKFPPPPFFFFPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPPFFFPPPPPPPFPPIPPTGPPPPFFFPPPPPPPPPPPPPPFPNNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
\ No newline at end of file
diff --git a/docs/rust/search.desc/opendal/opendal-desc-0-.js b/docs/rust/search.desc/opendal/opendal-desc-0-.js
index 9a0f9cbcd0..c692b10ce4 100644
--- a/docs/rust/search.desc/opendal/opendal-desc-0-.js
+++ b/docs/rust/search.desc/opendal/opendal-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("opendal",0,"Apache OpenDAL\u2122 is a data access layer that allows users \u2026\nThe accessor that built by this builder.\naliyun_drive: Aliyun Drive services.\nalluxio: Alluxio services.\nThe given path already exists thus we failed to the \u2026\natomicserver: Atomicserver services.\nazblob: Azure Storage Blob services.\nAzdls: Azure Data Lake Storage Gen2.\nazfile: Azfile Services\nB2: Backblaze B2 Services.\nBlockingLister is designed to list entries at  [...]
\ No newline at end of file
+searchState.loadedDescShard("opendal",0,"Apache OpenDAL\u2122 is a data access layer that allows users \u2026\nThe accessor that built by this builder.\naliyun_drive: Aliyun Drive services.\nalluxio: Alluxio services.\nThe given path already exists thus we failed to the \u2026\natomicserver: Atomicserver services.\nazblob: Azure Storage Blob services.\nAzdls: Azure Data Lake Storage Gen2.\nazfile: Azfile Services\nB2: Backblaze B2 Services.\nBlockingLister is designed to list entries at  [...]
\ No newline at end of file
diff --git a/docs/rust/src/opendal/lib.rs.html b/docs/rust/src/opendal/lib.rs.html
index 02e9276150..243049708a 100644
--- a/docs/rust/src/opendal/lib.rs.html
+++ b/docs/rust/src/opendal/lib.rs.html
@@ -335,8 +335,8 @@
     </span><span class="attr">#[test]
     </span><span class="kw">fn </span>assert_size() {
         <span class="macro">assert_eq!</span>(<span class="number">40</span>, size_of::&lt;Operator&gt;());
-        <span class="macro">assert_eq!</span>(<span class="number">256</span>, size_of::&lt;Entry&gt;());
-        <span class="macro">assert_eq!</span>(<span class="number">232</span>, size_of::&lt;Metadata&gt;());
+        <span class="macro">assert_eq!</span>(<span class="number">304</span>, size_of::&lt;Entry&gt;());
+        <span class="macro">assert_eq!</span>(<span class="number">280</span>, size_of::&lt;Metadata&gt;());
         <span class="macro">assert_eq!</span>(<span class="number">1</span>, size_of::&lt;EntryMode&gt;());
         <span class="macro">assert_eq!</span>(<span class="number">24</span>, size_of::&lt;Scheme&gt;());
     }
diff --git a/docs/rust/src/opendal/raw/mod.rs.html b/docs/rust/src/opendal/raw/mod.rs.html
index 51fc495766..018e3a0768 100644
--- a/docs/rust/src/opendal/raw/mod.rs.html
+++ b/docs/rust/src/opendal/raw/mod.rs.html
@@ -112,7 +112,7 @@
 //!   access raw APIs.
 //! - Raw APIs should only be accessed via `opendal::raw::Xxxx`, any public
 //!   API should never expose raw API directly.
-//! - Raw APIs are far more less stable than public API, please don't rely on
+//! - Raw APIs are far less stable than public API, please don't rely on
 //!   them whenever possible.
 
 </span><span class="kw">mod </span>accessor;
diff --git a/docs/rust/src/opendal/raw/ops.rs.html b/docs/rust/src/opendal/raw/ops.rs.html
index bd709f82d2..3bb71f01d0 100644
--- a/docs/rust/src/opendal/raw/ops.rs.html
+++ b/docs/rust/src/opendal/raw/ops.rs.html
@@ -734,6 +734,19 @@
 <a href="#734" id="734">734</a>
 <a href="#735" id="735">735</a>
 <a href="#736" id="736">736</a>
+<a href="#737" id="737">737</a>
+<a href="#738" id="738">738</a>
+<a href="#739" id="739">739</a>
+<a href="#740" id="740">740</a>
+<a href="#741" id="741">741</a>
+<a href="#742" id="742">742</a>
+<a href="#743" id="743">743</a>
+<a href="#744" id="744">744</a>
+<a href="#745" id="745">745</a>
+<a href="#746" id="746">746</a>
+<a href="#747" id="747">747</a>
+<a href="#748" id="748">748</a>
+<a href="#749" id="749">749</a>
 </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
@@ -755,7 +768,8 @@
 //!
 //! By using ops, users can add more context for operation.
 
-</span><span class="kw">use </span>std::time::Duration;
+</span><span class="kw">use </span>std::collections::HashMap;
+<span class="kw">use </span>std::time::Duration;
 
 <span class="kw">use </span>flagset::FlagSet;
 
@@ -1273,24 +1287,24 @@
         <span class="self">self</span>.override_content_disposition.as_deref()
     }
 
-    <span class="doccomment">/// Sets the cache-control header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the cache-control header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>with_override_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>.override_cache_control = <span class="prelude-val">Some</span>(cache_control.into());
         <span class="self">self
     </span>}
 
-    <span class="doccomment">/// Returns the cache-control header that should be send back by the remote read operation.
+    <span class="doccomment">/// Returns the cache-control header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_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>.override_cache_control.as_deref()
     }
 
-    <span class="doccomment">/// Sets the content-type header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the content-type header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>with_override_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>.override_content_type = <span class="prelude-val">Some</span>(content_type.into());
         <span class="self">self
     </span>}
 
-    <span class="doccomment">/// Returns the content-type header that should be send back by the remote read operation.
+    <span class="doccomment">/// Returns the content-type header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_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>.override_content_type.as_deref()
     }
@@ -1316,6 +1330,7 @@
     content_disposition: <span class="prelude-ty">Option</span>&lt;String&gt;,
     cache_control: <span class="prelude-ty">Option</span>&lt;String&gt;,
     executor: <span class="prelude-ty">Option</span>&lt;Executor&gt;,
+    user_metadata: <span class="prelude-ty">Option</span>&lt;HashMap&lt;String, String&gt;&gt;,
 }
 
 <span class="kw">impl </span>OpWrite {
@@ -1413,6 +1428,17 @@
         }
         <span class="self">self
     </span>}
+
+    <span class="doccomment">/// Set the user defined metadata of the op
+    </span><span class="kw">pub fn </span>with_user_metadata(<span class="kw-2">mut </span><span class="self">self</span>, metadata: HashMap&lt;String, String&gt;) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.user_metadata = <span class="prelude-val">Some</span>(metadata);
+        <span class="self">self
+    </span>}
+
+    <span class="doccomment">/// Get the user defined metadata from the op
+    </span><span class="kw">pub fn </span>user_metadata(<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>HashMap&lt;String, String&gt;&gt; {
+        <span class="self">self</span>.user_metadata.as_ref()
+    }
 }
 
 <span class="doccomment">/// Args for `writer` operation.
diff --git a/docs/rust/src/opendal/services/oss/backend.rs.html b/docs/rust/src/opendal/services/oss/backend.rs.html
index fb06a04851..77155de3c9 100644
--- a/docs/rust/src/opendal/services/oss/backend.rs.html
+++ b/docs/rust/src/opendal/services/oss/backend.rs.html
@@ -601,6 +601,9 @@
 <a href="#601" id="601">601</a>
 <a href="#602" id="602">602</a>
 <a href="#603" id="603">603</a>
+<a href="#604" id="604">604</a>
+<a href="#605" id="605">605</a>
+<a href="#606" id="606">606</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
@@ -710,7 +713,7 @@
         <span class="self">self
     </span>}
 
-    <span class="doccomment">/// Set a endpoint for generating presigned urls.
+    <span class="doccomment">/// Set an endpoint for generating presigned urls.
     ///
     /// You can offer a public endpoint like &lt;https://oss-cn-beijing.aliyuncs.com&gt; to return a presinged url for
     /// public accessors, along with an internal endpoint like &lt;https://oss-cn-beijing-internal.aliyuncs.com&gt;
@@ -1019,6 +1022,7 @@
                 } <span class="kw">else </span>{
                     <span class="prelude-val">Some</span>(usize::MAX)
                 },
+                write_with_user_metadata: <span class="bool-val">true</span>,
 
                 delete: <span class="bool-val">true</span>,
                 copy: <span class="bool-val">true</span>,
@@ -1050,7 +1054,9 @@
         <span class="kw">match </span>status {
             StatusCode::OK =&gt; {
                 <span class="kw">let </span>headers = resp.headers();
-                <span class="kw">let </span><span class="kw-2">mut </span>meta = parse_into_metadata(path, headers)<span class="question-mark">?</span>;
+                <span class="kw">let </span><span class="kw-2">mut </span>meta =
+                    <span class="self">self</span>.core
+                        .parse_metadata(path, constants::X_OSS_META_PREFIX, resp.headers())<span class="question-mark">?</span>;
 
                 <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = parse_header_to_str(headers, <span class="string">"x-oss-version-id"</span>)<span class="question-mark">? </span>{
                     meta.set_version(v);
diff --git a/docs/rust/src/opendal/services/oss/core.rs.html b/docs/rust/src/opendal/services/oss/core.rs.html
index 05c721440d..b875cb2bd7 100644
--- a/docs/rust/src/opendal/services/oss/core.rs.html
+++ b/docs/rust/src/opendal/services/oss/core.rs.html
@@ -919,6 +919,67 @@
 <a href="#919" id="919">919</a>
 <a href="#920" id="920">920</a>
 <a href="#921" id="921">921</a>
+<a href="#922" id="922">922</a>
+<a href="#923" id="923">923</a>
+<a href="#924" id="924">924</a>
+<a href="#925" id="925">925</a>
+<a href="#926" id="926">926</a>
+<a href="#927" id="927">927</a>
+<a href="#928" id="928">928</a>
+<a href="#929" id="929">929</a>
+<a href="#930" id="930">930</a>
+<a href="#931" id="931">931</a>
+<a href="#932" id="932">932</a>
+<a href="#933" id="933">933</a>
+<a href="#934" id="934">934</a>
+<a href="#935" id="935">935</a>
+<a href="#936" id="936">936</a>
+<a href="#937" id="937">937</a>
+<a href="#938" id="938">938</a>
+<a href="#939" id="939">939</a>
+<a href="#940" id="940">940</a>
+<a href="#941" id="941">941</a>
+<a href="#942" id="942">942</a>
+<a href="#943" id="943">943</a>
+<a href="#944" id="944">944</a>
+<a href="#945" id="945">945</a>
+<a href="#946" id="946">946</a>
+<a href="#947" id="947">947</a>
+<a href="#948" id="948">948</a>
+<a href="#949" id="949">949</a>
+<a href="#950" id="950">950</a>
+<a href="#951" id="951">951</a>
+<a href="#952" id="952">952</a>
+<a href="#953" id="953">953</a>
+<a href="#954" id="954">954</a>
+<a href="#955" id="955">955</a>
+<a href="#956" id="956">956</a>
+<a href="#957" id="957">957</a>
+<a href="#958" id="958">958</a>
+<a href="#959" id="959">959</a>
+<a href="#960" id="960">960</a>
+<a href="#961" id="961">961</a>
+<a href="#962" id="962">962</a>
+<a href="#963" id="963">963</a>
+<a href="#964" id="964">964</a>
+<a href="#965" id="965">965</a>
+<a href="#966" id="966">966</a>
+<a href="#967" id="967">967</a>
+<a href="#968" id="968">968</a>
+<a href="#969" id="969">969</a>
+<a href="#970" id="970">970</a>
+<a href="#971" id="971">971</a>
+<a href="#972" id="972">972</a>
+<a href="#973" id="973">973</a>
+<a href="#974" id="974">974</a>
+<a href="#975" id="975">975</a>
+<a href="#976" id="976">976</a>
+<a href="#977" id="977">977</a>
+<a href="#978" id="978">978</a>
+<a href="#979" id="979">979</a>
+<a href="#980" id="980">980</a>
+<a href="#981" id="981">981</a>
+<a href="#982" id="982">982</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
@@ -936,7 +997,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>std::fmt::Debug;
+</span><span class="kw">use </span>std::collections::HashMap;
+<span class="kw">use </span>std::fmt::Debug;
 <span class="kw">use </span>std::fmt::Formatter;
 <span class="kw">use </span>std::fmt::Write;
 <span class="kw">use </span>std::time::Duration;
@@ -949,10 +1011,10 @@
 <span class="kw">use </span>http::header::IF_MATCH;
 <span class="kw">use </span>http::header::IF_NONE_MATCH;
 <span class="kw">use </span>http::header::RANGE;
-<span class="kw">use </span>http::HeaderName;
 <span class="kw">use </span>http::HeaderValue;
 <span class="kw">use </span>http::Request;
 <span class="kw">use </span>http::Response;
+<span class="kw">use </span>http::{HeaderMap, HeaderName};
 <span class="kw">use </span>reqsign::AliyunCredential;
 <span class="kw">use </span>reqsign::AliyunLoader;
 <span class="kw">use </span>reqsign::AliyunOssSigner;
@@ -962,7 +1024,7 @@
 <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">mod </span>constants {
+<span class="kw">pub mod </span>constants {
     <span class="kw">pub const </span>X_OSS_SERVER_SIDE_ENCRYPTION: <span class="kw-2">&amp;</span>str = <span class="string">"x-oss-server-side-encryption"</span>;
 
     <span class="kw">pub const </span>X_OSS_SERVER_SIDE_ENCRYPTION_KEY_ID: <span class="kw-2">&amp;</span>str = <span class="string">"x-oss-server-side-encryption-key-id"</span>;
@@ -970,6 +1032,8 @@
     <span class="kw">pub const </span>RESPONSE_CONTENT_DISPOSITION: <span class="kw-2">&amp;</span>str = <span class="string">"response-content-disposition"</span>;
 
     <span class="kw">pub const </span>OSS_QUERY_VERSION_ID: <span class="kw-2">&amp;</span>str = <span class="string">"versionId"</span>;
+
+    <span class="kw">pub const </span>X_OSS_META_PREFIX: <span class="kw-2">&amp;</span>str = <span class="string">"x-oss-meta-"</span>;
 }
 
 <span class="kw">pub struct </span>OssCore {
@@ -1077,6 +1141,88 @@
         }
         req
     }
+
+    <span class="kw">fn </span>insert_metadata_headers(
+        <span class="kw-2">&amp;</span><span class="self">self</span>,
+        <span class="kw-2">mut </span>req: http::request::Builder,
+        size: <span class="prelude-ty">Option</span>&lt;u64&gt;,
+        args: <span class="kw-2">&amp;</span>OpWrite,
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;http::request::Builder&gt; {
+        req = req.header(CONTENT_LENGTH, size.unwrap_or_default());
+
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(mime) = args.content_type() {
+            req = req.header(CONTENT_TYPE, mime);
+        }
+
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(pos) = args.content_disposition() {
+            req = req.header(CONTENT_DISPOSITION, pos);
+        }
+
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(cache_control) = args.cache_control() {
+            req = req.header(CACHE_CONTROL, cache_control);
+        }
+
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(user_metadata) = args.user_metadata() {
+            <span class="kw">for </span>(key, value) <span class="kw">in </span>user_metadata {
+                <span class="comment">// before insert user defined metadata header, add prefix to the header name
+                </span><span class="kw">if </span>!<span class="self">self</span>.check_user_metadata_key(key) {
+                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                        ErrorKind::Unsupported,
+                        <span class="string">"the format of the user metadata key is invalid, please refer the document"</span>,
+                    ));
+                }
+                req = req.header(<span class="macro">format!</span>(<span class="string">"{}{}"</span>, constants::X_OSS_META_PREFIX, key), value)
+            }
+        }
+
+        <span class="prelude-val">Ok</span>(req)
+    }
+
+    <span class="comment">// According to https://help.aliyun.com/zh/oss/developer-reference/putobject
+    // there are some limits in user defined metadata key
+    </span><span class="kw">fn </span>check_user_metadata_key(<span class="kw-2">&amp;</span><span class="self">self</span>, key: <span class="kw-2">&amp;</span>str) -&gt; bool {
+        key.chars().all(|c| c.is_ascii_alphanumeric() || c == <span class="string">'-'</span>)
+    }
+
+    <span class="doccomment">/// parse_metadata will parse http headers(including standards http headers
+    /// and user defined metadata header) into Metadata.
+    ///
+    /// # Arguments
+    ///
+    /// * `user_metadata_prefix` is the prefix of user defined metadata key
+    ///
+    /// # Notes
+    ///
+    /// before return the user defined metadata, we'll strip the user_metadata_prefix from the key
+    </span><span class="kw">pub fn </span>parse_metadata(
+        <span class="kw-2">&amp;</span><span class="self">self</span>,
+        path: <span class="kw-2">&amp;</span>str,
+        user_metadata_prefix: <span class="kw-2">&amp;</span>str,
+        headers: <span class="kw-2">&amp;</span>HeaderMap,
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;Metadata&gt; {
+        <span class="kw">let </span><span class="kw-2">mut </span>m = parse_into_metadata(path, headers)<span class="question-mark">?</span>;
+
+        <span class="kw">let </span>data: HashMap&lt;String, String&gt; = headers
+            .iter()
+            .filter_map(|(key, <span class="kw">_</span>)| {
+                <span class="kw">if </span>key.as_str().starts_with(user_metadata_prefix) {
+                    <span class="kw">if let </span><span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(value)) = parse_header_to_str(headers, key) {
+                        <span class="kw">let </span>key_str = key.to_string();
+                        <span class="kw">let </span>stripped_key = key_str
+                            .strip_prefix(user_metadata_prefix)
+                            .expect(<span class="string">"strip prefix must succeed"</span>);
+                        <span class="kw">return </span><span class="prelude-val">Some</span>((stripped_key.to_string(), value.to_string()));
+                    }
+                }
+                <span class="prelude-val">None
+            </span>})
+            .collect();
+        <span class="kw">if </span>!data.is_empty() {
+            m.with_user_metadata(data);
+        }
+
+        <span class="prelude-val">Ok</span>(m)
+    }
 }
 
 <span class="kw">impl </span>OssCore {
@@ -1095,19 +1241,7 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>url);
 
-        req = req.header(CONTENT_LENGTH, size.unwrap_or_default());
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(mime) = args.content_type() {
-            req = req.header(CONTENT_TYPE, mime);
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(pos) = args.content_disposition() {
-            req = req.header(CONTENT_DISPOSITION, pos);
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(cache_control) = args.cache_control() {
-            req = req.header(CACHE_CONTROL, cache_control)
-        }
+        req = <span class="self">self</span>.insert_metadata_headers(req, size, args)<span class="question-mark">?</span>;
 
         <span class="comment">// set sse headers
         </span>req = <span class="self">self</span>.insert_sse_headers(req);
@@ -1135,19 +1269,7 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::post(<span class="kw-2">&amp;</span>url);
 
-        req = req.header(CONTENT_LENGTH, size);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(mime) = args.content_type() {
-            req = req.header(CONTENT_TYPE, mime);
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(pos) = args.content_disposition() {
-            req = req.header(CONTENT_DISPOSITION, pos);
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(cache_control) = args.cache_control() {
-            req = req.header(CACHE_CONTROL, cache_control)
-        }
+        req = <span class="self">self</span>.insert_metadata_headers(req, <span class="prelude-val">Some</span>(size), args)<span class="question-mark">?</span>;
 
         <span class="comment">// set sse headers
         </span>req = <span class="self">self</span>.insert_sse_headers(req);
@@ -1514,7 +1636,7 @@
         <span class="self">self</span>.send(req).<span class="kw">await
     </span>}
 
-    <span class="doccomment">/// Abort an on-going multipart upload.
+    <span class="doccomment">/// Abort an ongoing multipart upload.
     /// reference docs https://www.alibabacloud.com/help/zh/oss/developer-reference/abortmultipartupload
     </span><span class="kw">pub async fn </span>oss_abort_multipart_upload(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
diff --git a/docs/rust/src/opendal/types/capability.rs.html b/docs/rust/src/opendal/types/capability.rs.html
index c38715dd46..8d9c56c2ee 100644
--- a/docs/rust/src/opendal/types/capability.rs.html
+++ b/docs/rust/src/opendal/types/capability.rs.html
@@ -194,6 +194,8 @@
 <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>
 </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
@@ -291,6 +293,8 @@
     </span><span class="kw">pub </span>write_with_content_disposition: bool,
     <span class="doccomment">/// If operator supports write with cache control.
     </span><span class="kw">pub </span>write_with_cache_control: bool,
+    <span class="doccomment">/// If operator supports write with user defined metadata
+    </span><span class="kw">pub </span>write_with_user_metadata: bool,
     <span class="doccomment">/// write_multi_max_size is the max size that services support in write_multi.
     ///
     /// For example, AWS S3 supports 5GiB as max in write_multi.
diff --git a/docs/rust/src/opendal/types/list.rs.html b/docs/rust/src/opendal/types/list.rs.html
index 2f3a51bd73..a0202e6bf7 100644
--- a/docs/rust/src/opendal/types/list.rs.html
+++ b/docs/rust/src/opendal/types/list.rs.html
@@ -416,8 +416,8 @@
 /// use opendal::Entry;
 /// use opendal::Result;
 ///
-/// assert_eq!(256, size_of::&lt;(String, Result&lt;opendal::raw::RpStat&gt;)&gt;());
-/// assert_eq!(256, size_of::&lt;Option&lt;Entry&gt;&gt;());
+/// assert_eq!(304, size_of::&lt;(String, Result&lt;opendal::raw::RpStat&gt;)&gt;());
+/// assert_eq!(304, size_of::&lt;Option&lt;Entry&gt;&gt;());
 /// ```
 ///
 /// So let's ignore this lint:
diff --git a/docs/rust/src/opendal/types/metadata.rs.html b/docs/rust/src/opendal/types/metadata.rs.html
index c7ddf426a3..e9aa60441d 100644
--- a/docs/rust/src/opendal/types/metadata.rs.html
+++ b/docs/rust/src/opendal/types/metadata.rs.html
@@ -550,6 +550,26 @@
 <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>
 </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
@@ -570,6 +590,7 @@
 </span><span class="kw">use </span>chrono::prelude::<span class="kw-2">*</span>;
 <span class="kw">use </span>flagset::flags;
 <span class="kw">use </span>flagset::FlagSet;
+<span class="kw">use </span>std::collections::HashMap;
 
 <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>;
@@ -597,6 +618,7 @@
     etag: <span class="prelude-ty">Option</span>&lt;String&gt;,
     last_modified: <span class="prelude-ty">Option</span>&lt;DateTime&lt;Utc&gt;&gt;,
     version: <span class="prelude-ty">Option</span>&lt;String&gt;,
+    user_metadata: <span class="prelude-ty">Option</span>&lt;HashMap&lt;String, String&gt;&gt;,
 }
 
 <span class="kw">impl </span>Metadata {
@@ -623,6 +645,7 @@
             etag: <span class="prelude-val">None</span>,
             content_disposition: <span class="prelude-val">None</span>,
             version: <span class="prelude-val">None</span>,
+            user_metadata: <span class="prelude-val">None</span>,
         }
     }
 
@@ -639,7 +662,7 @@
         <span class="self">self
     </span>}
 
-    <span class="doccomment">/// Check if there metadata already contains given metakey.
+    <span class="doccomment">/// Check if the metadata already contains given metakey.
     </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>contains_metakey(<span class="kw-2">&amp;</span><span class="self">self</span>, metakey: <span class="kw">impl </span>Into&lt;FlagSet&lt;Metakey&gt;&gt;) -&gt; bool {
         <span class="kw">let </span>input_metakey = metakey.into();
 
@@ -1059,6 +1082,21 @@
         <span class="self">self</span>.metakey |= Metakey::Version;
         <span class="self">self
     </span>}
+
+    <span class="doccomment">/// User defined metadata of this entry
+    ///
+    /// The prefix of the user defined metadata key(for example: in oss, it's x-oss-meta-)
+    /// is remove from the key
+    </span><span class="kw">pub fn </span>user_metadata(<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>HashMap&lt;String, String&gt;&gt; {
+        <span class="self">self</span>.user_metadata.as_ref()
+    }
+
+    <span class="doccomment">/// Set user defined metadata of this entry
+    </span><span class="kw">pub fn </span>with_user_metadata(<span class="kw-2">&amp;mut </span><span class="self">self</span>, data: HashMap&lt;String, String&gt;) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.user_metadata = <span class="prelude-val">Some</span>(data);
+        <span class="self">self</span>.metakey |= Metakey::UserMetaData;
+        <span class="self">self
+    </span>}
 }
 
 <span class="macro">flags!</span> {
@@ -1100,6 +1138,8 @@
         </span>LastModified,
         <span class="doccomment">/// Key for version.
         </span>Version,
+        <span class="doccomment">/// Key for user metadata
+        </span>UserMetaData,
     }
 }
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/operator/operator_futures.rs.html b/docs/rust/src/opendal/types/operator/operator_futures.rs.html
index 2ce851a34c..4fe76d5886 100644
--- a/docs/rust/src/opendal/types/operator/operator_futures.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator_futures.rs.html
@@ -501,6 +501,33 @@
 <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>
+<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>
 </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
@@ -522,7 +549,8 @@
 //!
 //! By using futures, users can add more options for operation.
 
-</span><span class="kw">use </span>std::future::IntoFuture;
+</span><span class="kw">use </span>std::collections::HashMap;
+<span class="kw">use </span>std::future::IntoFuture;
 <span class="kw">use </span>std::ops::RangeBounds;
 <span class="kw">use </span>std::time::Duration;
 
@@ -574,7 +602,7 @@
 <span class="kw">impl</span>&lt;I, O, F: Future&lt;Output = <span class="prelude-ty">Result</span>&lt;O&gt;&gt;&gt; OperatorFuture&lt;I, O, F&gt; {
     <span class="doccomment">/// Change the operation's args.
     </span><span class="kw">fn </span>map(<span class="kw-2">mut </span><span class="self">self</span>, f: <span class="kw">impl </span>FnOnce(I) -&gt; I) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.args = (f)(<span class="self">self</span>.args);
+        <span class="self">self</span>.args = f(<span class="self">self</span>.args);
         <span class="self">self
     </span>}
 }
@@ -619,17 +647,17 @@
 </span><span class="kw">pub type </span>FuturePresignStat&lt;F&gt; = OperatorFuture&lt;(OpStat, Duration), PresignedRequest, F&gt;;
 
 <span class="kw">impl</span>&lt;F: Future&lt;Output = <span class="prelude-ty">Result</span>&lt;PresignedRequest&gt;&gt;&gt; FuturePresignStat&lt;F&gt; {
-    <span class="doccomment">/// Sets the content-disposition header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the content-disposition header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_content_disposition(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_content_disposition(v), dur))
     }
 
-    <span class="doccomment">/// Sets the cache-control header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the cache-control header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_cache_control(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_cache_control(v), dur))
     }
 
-    <span class="doccomment">/// Sets the content-type header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the content-type header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_content_type(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_content_type(v), dur))
     }
@@ -651,17 +679,17 @@
 </span><span class="kw">pub type </span>FuturePresignRead&lt;F&gt; = OperatorFuture&lt;(OpRead, Duration), PresignedRequest, F&gt;;
 
 <span class="kw">impl</span>&lt;F: Future&lt;Output = <span class="prelude-ty">Result</span>&lt;PresignedRequest&gt;&gt;&gt; FuturePresignRead&lt;F&gt; {
-    <span class="doccomment">/// Sets the content-disposition header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the content-disposition header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_content_disposition(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_content_disposition(v), dur))
     }
 
-    <span class="doccomment">/// Sets the cache-control header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the cache-control header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_cache_control(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_cache_control(v), dur))
     }
 
-    <span class="doccomment">/// Sets the content-type header that should be send back by the remote read operation.
+    <span class="doccomment">/// Sets the content-type header that should be sent back by the remote read operation.
     </span><span class="kw">pub fn </span>override_content_type(<span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, dur)| (args.with_override_content_type(v), dur))
     }
@@ -825,6 +853,22 @@
     </span><span class="kw">pub fn </span>executor(<span class="self">self</span>, executor: Executor) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, options, bs)| (args.with_executor(executor), options, bs))
     }
+
+    <span class="doccomment">/// Set the user defined metadata of the op
+    ///
+    /// ## Notes
+    ///
+    /// we don't need to include the user defined metadata prefix in the key
+    /// every service will handle it internally
+    </span><span class="kw">pub fn </span>user_metadata(<span class="self">self</span>, data: <span class="kw">impl </span>IntoIterator&lt;Item = (String, String)&gt;) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.map(|(args, options, bs)| {
+            (
+                args.with_user_metadata(HashMap::from_iter(data)),
+                options,
+                bs,
+            )
+        })
+    }
 }
 
 <span class="doccomment">/// Future that generated by [`Operator::writer_with`].
@@ -887,6 +931,16 @@
     </span><span class="kw">pub fn </span>executor(<span class="self">self</span>, executor: Executor) -&gt; <span class="self">Self </span>{
         <span class="self">self</span>.map(|(args, options)| (args.with_executor(executor), options))
     }
+
+    <span class="doccomment">/// Set the user defined metadata of the op
+    ///
+    /// ## Notes
+    ///
+    /// we don't need to include the user defined metadata prefix in the key
+    /// every service will handle it internally
+    </span><span class="kw">pub fn </span>user_metadata(<span class="self">self</span>, data: <span class="kw">impl </span>IntoIterator&lt;Item = (String, String)&gt;) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.map(|(args, options)| (args.with_user_metadata(HashMap::from_iter(data)), options))
+    }
 }
 
 <span class="doccomment">/// Future that generated by [`Operator::delete_with`].
diff --git a/docs/rust/type.impl/opendal/operator_futures/struct.OperatorFuture.js b/docs/rust/type.impl/opendal/operator_futures/struct.OperatorFuture.js
index f0477b5ded..66df14a518 100644
--- a/docs/rust/type.impl/opendal/operator_futures/struct.OperatorFuture.js
+++ b/docs/rust/type.impl/opendal/operator_futures/struct.OperatorFuture.js
@@ -1 +1 @@
-!function(){var t={opendal:[['<details class="toggle implementors-toggle" open><summary><section id="impl-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a class="src rightside" href="src/opendal/types/operator/operator_futures.rs.html#79-89">source</a><a href="#impl-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="anchor">\xa7</a><h3 class="code-header">impl&lt;I, O, F&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/into_future/trait.IntoFuture.html" [...]
\ No newline at end of file
+!function(){var t={opendal:[['<details class="toggle implementors-toggle" open><summary><section id="impl-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="impl"><a class="src rightside" href="src/opendal/types/operator/operator_futures.rs.html#80-90">source</a><a href="#impl-IntoFuture-for-OperatorFuture%3CI,+O,+F%3E" class="anchor">\xa7</a><h3 class="code-header">impl&lt;I, O, F&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/into_future/trait.IntoFuture.html" [...]
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index 17dfd4dcaf..03a85bfbb1 100644
--- a/download/index.html
+++ b/download/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™ Downloads | 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/download"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/index.html b/index.html
index 8e8123ce61..f12aba127a 100644
--- a/index.html
+++ b/index.html
@@ -6,7 +6,7 @@
 <title data-rh="true">Apache OpenDAL™</title><meta data-rh="true" property="og:title" content="Apache OpenDAL™"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
 <script src="/assets/js/runtime~main.092b7a77.js" defer="defer"></script>
-<script src="/assets/js/main.104e720b.js" defer="defer"></script>
+<script src="/assets/js/main.e38fcbc3.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/lunr-index-1720955960360.json b/lunr-index-1720955960360.json
deleted file mode 100644
index 1b2cbda2be..0000000000
--- a/lunr-index-1720955960360.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,218.108,1,80.477,2,384.852,3,484.782]],["content/0",[]],["keywords/0",[]],["title/1",[0,250.462,1,92.415,4,697.052]],["content/1",[0,1.48,1,1.359,5,5.597,6,3.836,7,2.676,8,2.899,9,1.652,10,3.289,11,3.412,12,4.118,13,2.549,14,7.796,15,4.606,16,3.077,17,2.332,18,3.71,19,3.551,20,2.613,21,3.551,22,6.221,23,3.077,24,2.491,25,4.118,26,5.925,27,4.77,28,5.337,29,5.337,30,5.337,31,2.069,32,5.337,33,8.524,34, [...]
\ No newline at end of file
diff --git a/lunr-index-1720967784581.json b/lunr-index-1720967784581.json
new file mode 100644
index 0000000000..8725236dde
--- /dev/null
+++ b/lunr-index-1720967784581.json
@@ -0,0 +1 @@
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,143.804,1,53.06,2,331.624,3,231.541,4,226.638,5,400.215,6,299.023,7,345.123]],["content/0",[0,1.271,1,1.256,2,7.852,3,5.895,4,5.77,5,8.577,6,5.533,7,7.396,8,3.051,9,3.347,10,4.098,11,2.19,12,3.778,13,4.819,14,5.501,15,4.063,16,10.189,17,3.187,18,4.098,19,5.501,20,4.098,21,3.051,22,3.347,23,1.126,24,2.422,25,2.359,26,5.239,27,3.347,28,5.239,29,4.585,30,7.08,31,4.585,32,4.585,33,3.778,34,3.538,35,3.778 [...]
\ No newline at end of file
diff --git a/lunr-index.json b/lunr-index.json
index 1b2cbda2be..8725236dde 100644
--- a/lunr-index.json
+++ b/lunr-index.json
@@ -1 +1 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,218.108,1,80.477,2,384.852,3,484.782]],["content/0",[]],["keywords/0",[]],["title/1",[0,250.462,1,92.415,4,697.052]],["content/1",[0,1.48,1,1.359,5,5.597,6,3.836,7,2.676,8,2.899,9,1.652,10,3.289,11,3.412,12,4.118,13,2.549,14,7.796,15,4.606,16,3.077,17,2.332,18,3.71,19,3.551,20,2.613,21,3.551,22,6.221,23,3.077,24,2.491,25,4.118,26,5.925,27,4.77,28,5.337,29,5.337,30,5.337,31,2.069,32,5.337,33,8.524,34, [...]
\ No newline at end of file
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,143.804,1,53.06,2,331.624,3,231.541,4,226.638,5,400.215,6,299.023,7,345.123]],["content/0",[0,1.271,1,1.256,2,7.852,3,5.895,4,5.77,5,8.577,6,5.533,7,7.396,8,3.051,9,3.347,10,4.098,11,2.19,12,3.778,13,4.819,14,5.501,15,4.063,16,10.189,17,3.187,18,4.098,19,5.501,20,4.098,21,3.051,22,3.347,23,1.126,24,2.422,25,2.359,26,5.239,27,3.347,28,5.239,29,4.585,30,7.08,31,4.585,32,4.585,33,3.778,34,3.538,35,3.778 [...]
\ No newline at end of file
diff --git a/search-doc-1720955960360.json b/search-doc-1720955960360.json
deleted file mode 100644
index bb128ee660..0000000000
--- a/search-doc-1720955960360.json
+++ /dev/null
@@ -1 +0,0 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ is now Graduated","type":0,"sectionRef":"#","url":"/blog/apache-opendal-graduated","content":"","keywords":"","version":null},{"title":"What's Apache OpenDAL?​","type":1,"pageTitle":"Apache OpenDAL™ is now Graduated","url":"/blog/apache-opendal-graduated#whats-apache-opendal","content":" Apache OpenDAL is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is acce [...]
\ No newline at end of file
diff --git a/search-doc-1720967784581.json b/search-doc-1720967784581.json
new file mode 100644
index 0000000000..8a3539ec89
--- /dev/null
+++ b/search-doc-1720967784581.json
@@ -0,0 +1 @@
+{"searchDocs":[{"title":"Apache OpenDAL™ participates in Open Source Promotion Plan 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-ospp-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Open Source Promotion Plan (OSPP) 2024. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some u [...]
\ No newline at end of file
diff --git a/search-doc.json b/search-doc.json
index bb128ee660..8a3539ec89 100644
--- a/search-doc.json
+++ b/search-doc.json
@@ -1 +1 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ is now Graduated","type":0,"sectionRef":"#","url":"/blog/apache-opendal-graduated","content":"","keywords":"","version":null},{"title":"What's Apache OpenDAL?​","type":1,"pageTitle":"Apache OpenDAL™ is now Graduated","url":"/blog/apache-opendal-graduated#whats-apache-opendal","content":" Apache OpenDAL is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is acce [...]
\ No newline at end of file
+{"searchDocs":[{"title":"Apache OpenDAL™ participates in Open Source Promotion Plan 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-ospp-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Open Source Promotion Plan (OSPP) 2024. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some u [...]
\ No newline at end of file