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

[incubator-opendal] branch gh-pages updated: deploy: 42b12e3926df26d4266e91d085d827c5dd56cf8c

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

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


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 381dd1944 deploy: 42b12e3926df26d4266e91d085d827c5dd56cf8c
381dd1944 is described below

commit 381dd1944467a72d8ab47ede21750fccc555f4c2
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Fri Sep 15 08:32:29 2023 +0000

    deploy: 42b12e3926df26d4266e91d085d827c5dd56cf8c
---
 404.html                                           |   4 +-
 .../{054cd2fb.da432774.js => 054cd2fb.d75e4ac1.js} |   2 +-
 .../{093f5f04.f0577fe2.js => 093f5f04.221f04b5.js} |   2 +-
 .../{136e1c50.61d05d0b.js => 136e1c50.3a9e6f3b.js} |   2 +-
 .../{151cd40f.b1ce4968.js => 151cd40f.fa11841a.js} |   2 +-
 .../{1957547a.bf09f824.js => 1957547a.9da11698.js} |   2 +-
 .../{1db64337.06ff82e3.js => 1db64337.4b73f501.js} |   2 +-
 .../{22d8fa67.5f2fbd81.js => 22d8fa67.e33fe94c.js} |   2 +-
 .../{29b208a4.54a8554d.js => 29b208a4.45467a70.js} |   2 +-
 .../{2cbf1097.78fb174c.js => 2cbf1097.c09b7c27.js} |   2 +-
 .../{434bbc94.e911ac92.js => 434bbc94.d49740cb.js} |   2 +-
 .../{57a16c1d.0f99acc1.js => 57a16c1d.e2c8ca6d.js} |   2 +-
 .../{592d1076.871cda39.js => 592d1076.46978bae.js} |   2 +-
 assets/js/5a65e608.1f28f5b3.js                     |   1 +
 assets/js/5a65e608.5f16bc01.js                     |   1 -
 .../{621b831b.a38d5156.js => 621b831b.ccef11a1.js} |   2 +-
 assets/js/6eb7fe18.1beb6627.js                     |   1 -
 assets/js/6eb7fe18.4e1cf471.js                     |   1 +
 .../{7263c0b5.20710712.js => 7263c0b5.e827058c.js} |   2 +-
 .../{8b18d929.3d926b5f.js => 8b18d929.2d08b1f5.js} |   2 +-
 .../{8cc9519e.22eae607.js => 8cc9519e.5757cc85.js} |   2 +-
 .../{8f4159f2.65be54a9.js => 8f4159f2.84c31cd1.js} |   2 +-
 .../{939f74f6.f4c2609e.js => 939f74f6.441f69ae.js} |   2 +-
 assets/js/9fedeb09.4e17664d.js                     |   1 -
 assets/js/9fedeb09.b0ec9e0c.js                     |   1 +
 .../{a0405932.31f4536a.js => a0405932.26b04cd2.js} |   2 +-
 .../{ab10c306.d3ac8de2.js => ab10c306.22756670.js} |   2 +-
 assets/js/ae4554eb.233adcb3.js                     |   1 +
 assets/js/ae4554eb.bc7395b4.js                     |   1 -
 .../{b114cefa.587f36d7.js => b114cefa.2c2fc529.js} |   2 +-
 .../{b56f9725.af6df7f3.js => b56f9725.73434313.js} |   2 +-
 assets/js/b9ae8b37.bbc2431a.js                     |   1 -
 assets/js/b9ae8b37.e5e4f625.js                     |   1 +
 .../{bb5b2057.2ea0243d.js => bb5b2057.e0372e8e.js} |   2 +-
 .../{c46c6b55.a8e29c54.js => c46c6b55.8a3ec8ef.js} |   2 +-
 .../{c4f5d8e4.05e91285.js => c4f5d8e4.e8051513.js} |   2 +-
 .../{c6ab695b.92078684.js => c6ab695b.ee75e4a6.js} |   2 +-
 .../{cc62039a.1b7c104c.js => cc62039a.2862ab6d.js} |   2 +-
 .../{d3c0d8d5.444f90f9.js => d3c0d8d5.e2aa625e.js} |   2 +-
 assets/js/d5c31a96.2358a8e8.js                     |   1 -
 assets/js/d5c31a96.768d1538.js                     |   1 +
 .../{ddccef4c.bc52ba95.js => ddccef4c.984df39f.js} |   2 +-
 .../{e892cec6.ebb33103.js => e892cec6.2a21822b.js} |   2 +-
 .../{f1ca5a39.2a022583.js => f1ca5a39.de7df21f.js} |   2 +-
 .../{f9145722.26eb5315.js => f9145722.d44ea0e9.js} |   2 +-
 .../{fde7cc64.d2070cc7.js => fde7cc64.0a076d07.js} |   2 +-
 assets/js/runtime~main.03d8ed87.js                 |   1 +
 assets/js/runtime~main.dfa2fa25.js                 |   1 -
 blog/archive/index.html                            |   4 +-
 blog/how-opendal-read-data/index.html              |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-access-data-freely/index.html         |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 blog/tags/internal/index.html                      |   4 +-
 docs/category/contributing/index.html              |   4 +-
 docs/category/reference/index.html                 |   4 +-
 docs/category/services/index.html                  |   4 +-
 docs/contributing/committer/index.html             |   6 +-
 docs/contributing/podling-report/index.html        |   6 +-
 .../reference/generate_release_note/index.html     |   6 +-
 docs/contributing/reference/setup_gpg/index.html   |   6 +-
 docs/contributing/release/index.html               |   6 +-
 docs/contributing/verify/index.html                |   6 +-
 docs/lua/classes/opendal.metadata.html             |   2 +-
 docs/lua/classes/opendal.operator.html             |   2 +-
 docs/lua/index.html                                |   2 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  58 +-
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/overview/index.html                           |   6 +-
 docs/python/opendal.html                           |  40 +-
 docs/python/search.js                              |   2 +-
 docs/rust/implementors/core/clone/trait.Clone.js   |   2 +-
 docs/rust/implementors/core/cmp/trait.Eq.js        |   2 +-
 docs/rust/implementors/core/cmp/trait.PartialEq.js |   2 +-
 docs/rust/implementors/core/convert/trait.From.js  |   2 +-
 .../implementors/core/default/trait.Default.js     |   2 +-
 docs/rust/implementors/core/fmt/trait.Debug.js     |   2 +-
 docs/rust/implementors/core/fmt/trait.Display.js   |   2 +-
 .../core/future/future/trait.Future.js             |   2 +-
 docs/rust/implementors/core/hash/trait.Hash.js     |   2 +-
 .../core/iter/traits/iterator/trait.Iterator.js    |   2 +-
 docs/rust/implementors/core/marker/trait.Copy.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Freeze.js |   2 +-
 docs/rust/implementors/core/marker/trait.Send.js   |   2 +-
 .../implementors/core/marker/trait.StructuralEq.js |   2 +-
 .../core/marker/trait.StructuralPartialEq.js       |   2 +-
 docs/rust/implementors/core/marker/trait.Sync.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Unpin.js  |   2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |   2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |   2 +-
 .../futures_core/stream/trait.Stream.js            |   2 +-
 .../futures_io/if_std/trait.AsyncRead.js           |   2 +-
 docs/rust/implementors/std/io/trait.Seek.js        |   2 +-
 docs/rust/opendal/all.html                         |   2 +-
 docs/rust/opendal/docs/features/index.html         |   1 +
 docs/rust/opendal/enum.EntryMode.html              |   2 +-
 docs/rust/opendal/enum.ErrorKind.html              |   2 +-
 docs/rust/opendal/enum.Metakey.html                |   4 +-
 docs/rust/opendal/enum.Scheme.html                 |  12 +-
 docs/rust/opendal/raw/enum.Operation.html          |   2 +-
 docs/rust/opendal/raw/enum.PresignOperation.html   |   2 +-
 docs/rust/opendal/raw/oio/struct.ChunkedBytes.html |   4 +-
 docs/rust/opendal/raw/oio/struct.FlatPager.html    |   4 +-
 docs/rust/opendal/raw/oio/trait.BlockingPage.html  |   4 +-
 docs/rust/opendal/raw/oio/trait.BlockingRead.html  |   6 +-
 docs/rust/opendal/raw/oio/trait.Page.html          |   8 +-
 docs/rust/opendal/raw/oio/trait.Read.html          |  18 +-
 docs/rust/opendal/raw/oio/trait.Stream.html        |   4 +-
 docs/rust/opendal/raw/oio/trait.WriteBuf.html      |   2 +-
 docs/rust/opendal/raw/struct.BytesRange.html       |   2 +-
 docs/rust/opendal/raw/trait.Accessor.html          |   8 +-
 .../backend/struct.AtomicserverBuilder.html        |  11 +
 docs/rust/opendal/services/index.html              |   4 +-
 docs/rust/opendal/services/sidebar-items.js        |   2 +-
 .../rust/opendal/services/struct.Atomicserver.html |  84 ++
 docs/rust/opendal/struct.BlockingReader.html       |  16 +-
 docs/rust/opendal/struct.Error.html                |   2 +-
 docs/rust/opendal/struct.Operator.html             |   6 +-
 docs/rust/opendal/struct.OperatorBuilder.html      |   8 +-
 docs/rust/opendal/struct.Reader.html               |   6 +-
 docs/rust/opendal/struct.Writer.html               |  20 +-
 docs/rust/opendal/trait.Builder.html               |   2 +-
 docs/rust/search-index.js                          |   2 +-
 docs/rust/source-files.js                          |   2 +-
 .../opendal/services/atomicserver/backend.rs.html  | 911 +++++++++++++++++++++
 .../src/opendal/services/atomicserver/mod.rs.html  |  41 +
 docs/rust/src/opendal/services/gcs/backend.rs.html |  40 +-
 docs/rust/src/opendal/services/gcs/core.rs.html    |  78 +-
 docs/rust/src/opendal/services/mod.rs.html         |  10 +
 .../src/opendal/types/operator/builder.rs.html     |   4 +
 docs/rust/src/opendal/types/scheme.rs.html         |   8 +
 docs/services/azblob/index.html                    |   6 +-
 docs/services/azdls/index.html                     |   6 +-
 docs/services/cos/index.html                       |   6 +-
 docs/services/dashmap/index.html                   |   6 +-
 docs/services/dropbox/index.html                   |   6 +-
 docs/services/etcd/index.html                      |   6 +-
 docs/services/foundationdb/index.html              |   6 +-
 docs/services/fs/index.html                        |   6 +-
 docs/services/ftp/index.html                       |   6 +-
 docs/services/gcs/index.html                       |   6 +-
 docs/services/gdrive/index.html                    |   6 +-
 docs/services/hdfs/index.html                      |   6 +-
 docs/services/http/index.html                      |   6 +-
 docs/services/ipfs/index.html                      |   6 +-
 docs/services/ipmfs/index.html                     |   6 +-
 docs/services/memcached/index.html                 |   6 +-
 docs/services/memory/index.html                    |   6 +-
 docs/services/moka/index.html                      |   6 +-
 docs/services/obs/index.html                       |   6 +-
 docs/services/onedrive/index.html                  |   6 +-
 docs/services/oss/index.html                       |   6 +-
 docs/services/redis/index.html                     |   6 +-
 docs/services/rocksdb/index.html                   |   6 +-
 docs/services/s3/index.html                        |   6 +-
 docs/services/sftp/index.html                      |   6 +-
 docs/services/sled/index.html                      |   6 +-
 docs/services/supabase/index.html                  |   6 +-
 docs/services/wasabi/index.html                    |   6 +-
 docs/services/webdav/index.html                    |   6 +-
 docs/services/webhdfs/index.html                   |   6 +-
 docs/vision/index.html                             |   6 +-
 download/index.html                                |   4 +-
 index.html                                         |   6 +-
 170 files changed, 1454 insertions(+), 444 deletions(-)

diff --git a/404.html b/404.html
index a8743db61..3f7ee6cf9 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.da432774.js b/assets/js/054cd2fb.d75e4ac1.js
similarity index 84%
rename from assets/js/054cd2fb.da432774.js
rename to assets/js/054cd2fb.d75e4ac1.js
index e01e9000f..ff3f03c3f 100644
--- a/assets/js/054cd2fb.da432774.js
+++ b/assets/js/054cd2fb.d75e4ac1.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/093f5f04.f0577fe2.js b/assets/js/093f5f04.221f04b5.js
similarity index 84%
rename from assets/js/093f5f04.f0577fe2.js
rename to assets/js/093f5f04.221f04b5.js
index e8b480443..7281b9131 100644
--- a/assets/js/093f5f04.f0577fe2.js
+++ b/assets/js/093f5f04.221f04b5.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.61d05d0b.js b/assets/js/136e1c50.3a9e6f3b.js
similarity index 83%
rename from assets/js/136e1c50.61d05d0b.js
rename to assets/js/136e1c50.3a9e6f3b.js
index 3de92cf6e..9e018240e 100644
--- a/assets/js/136e1c50.61d05d0b.js
+++ b/assets/js/136e1c50.3a9e6f3b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/151cd40f.b1ce4968.js b/assets/js/151cd40f.fa11841a.js
similarity index 86%
rename from assets/js/151cd40f.b1ce4968.js
rename to assets/js/151cd40f.fa11841a.js
index fbff5ad24..9a70acae9 100644
--- a/assets/js/151cd40f.b1ce4968.js
+++ b/assets/js/151cd40f.fa11841a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.bf09f824.js b/assets/js/1957547a.9da11698.js
similarity index 72%
rename from assets/js/1957547a.bf09f824.js
rename to assets/js/1957547a.9da11698.js
index cbc4e4585..17844afb8 100644
--- a/assets/js/1957547a.bf09f824.js
+++ b/assets/js/1957547a.9da11698.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.06ff82e3.js b/assets/js/1db64337.4b73f501.js
similarity index 50%
rename from assets/js/1db64337.06ff82e3.js
rename to assets/js/1db64337.4b73f501.js
index b210b6665..226f875bb 100644
--- a/assets/js/1db64337.06ff82e3.js
+++ b/assets/js/1db64337.4b73f501.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.5f2fbd81.js b/assets/js/22d8fa67.e33fe94c.js
similarity index 85%
rename from assets/js/22d8fa67.5f2fbd81.js
rename to assets/js/22d8fa67.e33fe94c.js
index f68fd3ac1..717e37500 100644
--- a/assets/js/22d8fa67.5f2fbd81.js
+++ b/assets/js/22d8fa67.e33fe94c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/29b208a4.54a8554d.js b/assets/js/29b208a4.45467a70.js
similarity index 70%
rename from assets/js/29b208a4.54a8554d.js
rename to assets/js/29b208a4.45467a70.js
index 3623b33ab..5924274d8 100644
--- a/assets/js/29b208a4.54a8554d.js
+++ b/assets/js/29b208a4.45467a70.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.78fb174c.js b/assets/js/2cbf1097.c09b7c27.js
similarity index 91%
rename from assets/js/2cbf1097.78fb174c.js
rename to assets/js/2cbf1097.c09b7c27.js
index 3308e55fe..259c3853c 100644
--- a/assets/js/2cbf1097.78fb174c.js
+++ b/assets/js/2cbf1097.c09b7c27.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.e911ac92.js b/assets/js/434bbc94.d49740cb.js
similarity index 85%
rename from assets/js/434bbc94.e911ac92.js
rename to assets/js/434bbc94.d49740cb.js
index f6089ded0..747bf637f 100644
--- a/assets/js/434bbc94.e911ac92.js
+++ b/assets/js/434bbc94.d49740cb.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.0f99acc1.js b/assets/js/57a16c1d.e2c8ca6d.js
similarity index 65%
rename from assets/js/57a16c1d.0f99acc1.js
rename to assets/js/57a16c1d.e2c8ca6d.js
index 313981824..6d3b8d61e 100644
--- a/assets/js/57a16c1d.0f99acc1.js
+++ b/assets/js/57a16c1d.e2c8ca6d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/592d1076.871cda39.js b/assets/js/592d1076.46978bae.js
similarity index 83%
rename from assets/js/592d1076.871cda39.js
rename to assets/js/592d1076.46978bae.js
index 12f5b33ee..519b66028 100644
--- a/assets/js/592d1076.871cda39.js
+++ b/assets/js/592d1076.46978bae.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.1f28f5b3.js b/assets/js/5a65e608.1f28f5b3.js
new file mode 100644
index 000000000..720be23f7
--- /dev/null
+++ b/assets/js/5a65e608.1f28f5b3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/5a65e608.5f16bc01.js b/assets/js/5a65e608.5f16bc01.js
deleted file mode 100644
index 03988e9fc..000000000
--- a/assets/js/5a65e608.5f16bc01.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6427],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>m});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/621b831b.a38d5156.js b/assets/js/621b831b.ccef11a1.js
similarity index 84%
rename from assets/js/621b831b.a38d5156.js
rename to assets/js/621b831b.ccef11a1.js
index b14792970..f4b04222d 100644
--- a/assets/js/621b831b.a38d5156.js
+++ b/assets/js/621b831b.ccef11a1.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.1beb6627.js b/assets/js/6eb7fe18.1beb6627.js
deleted file mode 100644
index 3df5a79f0..000000000
--- a/assets/js/6eb7fe18.1beb6627.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6eb7fe18.4e1cf471.js b/assets/js/6eb7fe18.4e1cf471.js
new file mode 100644
index 000000000..fdd4f8598
--- /dev/null
+++ b/assets/js/6eb7fe18.4e1cf471.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3922],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/7263c0b5.20710712.js b/assets/js/7263c0b5.e827058c.js
similarity index 72%
rename from assets/js/7263c0b5.20710712.js
rename to assets/js/7263c0b5.e827058c.js
index b0336f20f..8ed50c612 100644
--- a/assets/js/7263c0b5.20710712.js
+++ b/assets/js/7263c0b5.e827058c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8b18d929.3d926b5f.js b/assets/js/8b18d929.2d08b1f5.js
similarity index 89%
rename from assets/js/8b18d929.3d926b5f.js
rename to assets/js/8b18d929.2d08b1f5.js
index 6af64b418..0d0d3ea7b 100644
--- a/assets/js/8b18d929.3d926b5f.js
+++ b/assets/js/8b18d929.2d08b1f5.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6299],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6299],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.22eae607.js b/assets/js/8cc9519e.5757cc85.js
similarity index 89%
rename from assets/js/8cc9519e.22eae607.js
rename to assets/js/8cc9519e.5757cc85.js
index a35222747..d6b050940 100644
--- a/assets/js/8cc9519e.22eae607.js
+++ b/assets/js/8cc9519e.5757cc85.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.65be54a9.js b/assets/js/8f4159f2.84c31cd1.js
similarity index 88%
rename from assets/js/8f4159f2.65be54a9.js
rename to assets/js/8f4159f2.84c31cd1.js
index 349aeca59..bab569283 100644
--- a/assets/js/8f4159f2.65be54a9.js
+++ b/assets/js/8f4159f2.84c31cd1.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/939f74f6.f4c2609e.js b/assets/js/939f74f6.441f69ae.js
similarity index 86%
rename from assets/js/939f74f6.f4c2609e.js
rename to assets/js/939f74f6.441f69ae.js
index 7b88771d2..5930ed92a 100644
--- a/assets/js/939f74f6.f4c2609e.js
+++ b/assets/js/939f74f6.441f69ae.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/9fedeb09.4e17664d.js b/assets/js/9fedeb09.4e17664d.js
deleted file mode 100644
index 066e0c1dc..000000000
--- a/assets/js/9fedeb09.4e17664d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9782],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/9fedeb09.b0ec9e0c.js b/assets/js/9fedeb09.b0ec9e0c.js
new file mode 100644
index 000000000..6f1968907
--- /dev/null
+++ b/assets/js/9fedeb09.b0ec9e0c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9782],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.31f4536a.js b/assets/js/a0405932.26b04cd2.js
similarity index 78%
rename from assets/js/a0405932.31f4536a.js
rename to assets/js/a0405932.26b04cd2.js
index 25fb79cf3..12a9de708 100644
--- a/assets/js/a0405932.31f4536a.js
+++ b/assets/js/a0405932.26b04cd2.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ab10c306.d3ac8de2.js b/assets/js/ab10c306.22756670.js
similarity index 68%
rename from assets/js/ab10c306.d3ac8de2.js
rename to assets/js/ab10c306.22756670.js
index 22121101d..c31b58b5b 100644
--- a/assets/js/ab10c306.d3ac8de2.js
+++ b/assets/js/ab10c306.22756670.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[380],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.233adcb3.js b/assets/js/ae4554eb.233adcb3.js
new file mode 100644
index 000000000..49b011b28
--- /dev/null
+++ b/assets/js/ae4554eb.233adcb3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.bc7395b4.js b/assets/js/ae4554eb.bc7395b4.js
deleted file mode 100644
index 96820291d..000000000
--- a/assets/js/ae4554eb.bc7395b4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b114cefa.587f36d7.js b/assets/js/b114cefa.2c2fc529.js
similarity index 61%
rename from assets/js/b114cefa.587f36d7.js
rename to assets/js/b114cefa.2c2fc529.js
index 77f4cdd9a..9087b3f00 100644
--- a/assets/js/b114cefa.587f36d7.js
+++ b/assets/js/b114cefa.2c2fc529.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.af6df7f3.js b/assets/js/b56f9725.73434313.js
similarity index 84%
rename from assets/js/b56f9725.af6df7f3.js
rename to assets/js/b56f9725.73434313.js
index 755da81e7..53c6af61e 100644
--- a/assets/js/b56f9725.af6df7f3.js
+++ b/assets/js/b56f9725.73434313.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/b9ae8b37.bbc2431a.js b/assets/js/b9ae8b37.bbc2431a.js
deleted file mode 100644
index e50c33a98..000000000
--- a/assets/js/b9ae8b37.bbc2431a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6578],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b9ae8b37.e5e4f625.js b/assets/js/b9ae8b37.e5e4f625.js
new file mode 100644
index 000000000..b1d0e0985
--- /dev/null
+++ b/assets/js/b9ae8b37.e5e4f625.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6578],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.2ea0243d.js b/assets/js/bb5b2057.e0372e8e.js
similarity index 83%
rename from assets/js/bb5b2057.2ea0243d.js
rename to assets/js/bb5b2057.e0372e8e.js
index a3dabc3ae..66ce45325 100644
--- a/assets/js/bb5b2057.2ea0243d.js
+++ b/assets/js/bb5b2057.e0372e8e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c46c6b55.a8e29c54.js b/assets/js/c46c6b55.8a3ec8ef.js
similarity index 84%
rename from assets/js/c46c6b55.a8e29c54.js
rename to assets/js/c46c6b55.8a3ec8ef.js
index 1baac6f53..d46e80ecc 100644
--- a/assets/js/c46c6b55.a8e29c54.js
+++ b/assets/js/c46c6b55.8a3ec8ef.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c4f5d8e4.05e91285.js b/assets/js/c4f5d8e4.e8051513.js
similarity index 76%
rename from assets/js/c4f5d8e4.05e91285.js
rename to assets/js/c4f5d8e4.e8051513.js
index 0f1c8f54b..42857e648 100644
--- a/assets/js/c4f5d8e4.05e91285.js
+++ b/assets/js/c4f5d8e4.e8051513.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4195],{5162:(e,t,a)=>{a.d(t,{Z:()=>o});var r=a(7294),n=a(6010);const l={tabItem:"tabItem_Ymn6"};function o(e){let{children:t,hidden:a,className:o}=e;return r.createElement("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,o),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>y});var r=a(7462),n=a(7294),l=a(6010),o=a(2466),s=a(6550),i=a(1980),u=a(7392),c=a(12);function m(e){return function(e){return n.Chi [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4195],{5162:(e,t,a)=>{a.d(t,{Z:()=>o});var r=a(7294),n=a(6010);const l={tabItem:"tabItem_Ymn6"};function o(e){let{children:t,hidden:a,className:o}=e;return r.createElement("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,o),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>y});var r=a(7462),n=a(7294),l=a(6010),o=a(2466),s=a(6550),i=a(1980),u=a(7392),c=a(12);function m(e){return function(e){return n.Chi [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.92078684.js b/assets/js/c6ab695b.ee75e4a6.js
similarity index 72%
rename from assets/js/c6ab695b.92078684.js
rename to assets/js/c6ab695b.ee75e4a6.js
index 847f6f1d8..c44b94c9b 100644
--- a/assets/js/c6ab695b.92078684.js
+++ b/assets/js/c6ab695b.ee75e4a6.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.1b7c104c.js b/assets/js/cc62039a.2862ab6d.js
similarity index 89%
rename from assets/js/cc62039a.1b7c104c.js
rename to assets/js/cc62039a.2862ab6d.js
index b85cf79c9..6b66c8cd2 100644
--- a/assets/js/cc62039a.1b7c104c.js
+++ b/assets/js/cc62039a.2862ab6d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d3c0d8d5.444f90f9.js b/assets/js/d3c0d8d5.e2aa625e.js
similarity index 84%
rename from assets/js/d3c0d8d5.444f90f9.js
rename to assets/js/d3c0d8d5.e2aa625e.js
index fc6ca6ce9..6bdd6f447 100644
--- a/assets/js/d3c0d8d5.444f90f9.js
+++ b/assets/js/d3c0d8d5.e2aa625e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.2358a8e8.js b/assets/js/d5c31a96.2358a8e8.js
deleted file mode 100644
index c2c379980..000000000
--- a/assets/js/d5c31a96.2358a8e8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d5c31a96.768d1538.js b/assets/js/d5c31a96.768d1538.js
new file mode 100644
index 000000000..e3716c48b
--- /dev/null
+++ b/assets/js/d5c31a96.768d1538.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ddccef4c.bc52ba95.js b/assets/js/ddccef4c.984df39f.js
similarity index 79%
rename from assets/js/ddccef4c.bc52ba95.js
rename to assets/js/ddccef4c.984df39f.js
index d83291c9a..6866f3de9 100644
--- a/assets/js/ddccef4c.bc52ba95.js
+++ b/assets/js/ddccef4c.984df39f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.ebb33103.js b/assets/js/e892cec6.2a21822b.js
similarity index 86%
rename from assets/js/e892cec6.ebb33103.js
rename to assets/js/e892cec6.2a21822b.js
index 2a83a2710..c14b762e3 100644
--- a/assets/js/e892cec6.ebb33103.js
+++ b/assets/js/e892cec6.2a21822b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.2a022583.js b/assets/js/f1ca5a39.de7df21f.js
similarity index 87%
rename from assets/js/f1ca5a39.2a022583.js
rename to assets/js/f1ca5a39.de7df21f.js
index 08b3830bb..58deb3fb4 100644
--- a/assets/js/f1ca5a39.2a022583.js
+++ b/assets/js/f1ca5a39.de7df21f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f9145722.26eb5315.js b/assets/js/f9145722.d44ea0e9.js
similarity index 66%
rename from assets/js/f9145722.26eb5315.js
rename to assets/js/f9145722.d44ea0e9.js
index 79c7913a2..662854839 100644
--- a/assets/js/f9145722.26eb5315.js
+++ b/assets/js/f9145722.d44ea0e9.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/fde7cc64.d2070cc7.js b/assets/js/fde7cc64.0a076d07.js
similarity index 79%
rename from assets/js/fde7cc64.d2070cc7.js
rename to assets/js/fde7cc64.0a076d07.js
index 6988bbf2d..99684167a 100644
--- a/assets/js/fde7cc64.d2070cc7.js
+++ b/assets/js/fde7cc64.0a076d07.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.03d8ed87.js b/assets/js/runtime~main.03d8ed87.js
new file mode 100644
index 000000000..294b53ccf
--- /dev/null
+++ b/assets/js/runtime~main.03d8ed87.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,b,d,f={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return f[e].call(c.exports,c,c.exports,r),c.exports}r.m=f,e=[],r.O=(a,c,b,d)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],b=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||f>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<f&&(f=d));if(t){e.splice(i--,1);var n=b();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.dfa2fa25.js b/assets/js/runtime~main.dfa2fa25.js
deleted file mode 100644
index fad6d37d6..000000000
--- a/assets/js/runtime~main.dfa2fa25.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,c,a,b,f,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,b,f)=>{if(!a){var d=1/0;for(i=0;i<e.length;i++){a=e[i][0],b=e[i][1],f=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&f||d>=f)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,f<d&&(d=f));if(t){e.splice(i--,1);var n=b();void 0!==n&&(c=n)}}return c}f=f||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 4271df14d..b24f2d623 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index 7cbe541fe..3151ebeeb 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OpenDAL Internal: Data Reading | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:la [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 0b5d59915..db3a6c93f 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index c1bb11b59..1cfb590ec 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index 8799b8a2a..96255e59c 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index b365c0f34..08c2a9a03 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">2 posts tagged with &quot;announcement&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 1f4e91056..dbe602518 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index b718b4398..1e6506a91 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;internal&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:tit [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/contributing/index.html b/docs/category/contributing/index.html
index fe7cf07e5..3e7a38984 100644
--- a/docs/category/contributing/index.html
+++ b/docs/category/contributing/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Contributing | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/contributing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/reference/index.html b/docs/category/reference/index.html
index 3079dd8e8..dcc4d45db 100644
--- a/docs/category/reference/index.html
+++ b/docs/category/reference/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Reference | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/reference"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index 9bb4d680f..226f228bf 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Services | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/committer/index.html b/docs/contributing/committer/index.html
index 3752a7b71..ca7894cf3 100644
--- a/docs/contributing/committer/index.html
+++ b/docs/contributing/committer/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Committer 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/docs/contributing/committer"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" co [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/podling-report/index.html b/docs/contributing/podling-report/index.html
index 2581549ef..c79f3f23b 100644
--- a/docs/contributing/podling-report/index.html
+++ b/docs/contributing/podling-report/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Podling Status Reports | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/podling-report"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_vers [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/reference/generate_release_note/index.html b/docs/contributing/reference/generate_release_note/index.html
index 3ba4c2583..954b2c116 100644
--- a/docs/contributing/reference/generate_release_note/index.html
+++ b/docs/contributing/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Generate Release Note | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/reference/setup_gpg/index.html b/docs/contributing/reference/setup_gpg/index.html
index 37acf4e8e..5d89e96c6 100644
--- a/docs/contributing/reference/setup_gpg/index.html
+++ b/docs/contributing/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Setup GPG Key | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/reference/setup_gpg"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/release/index.html b/docs/contributing/release/index.html
index 4cb6bb9e0..a7335d39f 100644
--- a/docs/contributing/release/index.html
+++ b/docs/contributing/release/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/release"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -14,8 +14,8 @@
 how the release manager releases a new version in accordance with the Apache requirements.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p><code>Source Release</code> is the key point which Apache values, and is also necessary for an ASF release.</p><p>Please remember that publishing software has legal consequences.</p><p>This [...]
 we will abandon that version and prepare for the next one.
 Our release page will only display ASF releases instead of GitHub Releases.</p><ul><li><code>opendal_version</code>: the version for opendal, like <code>0.36.0</code>.</li><li><code>release_version</code>: the version for voting, like <code>0.36.0-rc1</code>.</li><li><code>rc_version</code>: the minor version for voting, like <code>rc1</code>.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-asf-release">Create an ASF Release<a href="#create-an-asf-release" class="ha [...]
-please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><ul><li><code>opendal_versio [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+please cancel the release for the current <code>release_version</code>, <em>increase th RC counting</em> and reinitiate a release with the new <code>release_version</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><ul><li><code>opendal_versio [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/verify/index.html b/docs/contributing/verify/index.html
index bbb217031..5f2b12a5a 100644
--- a/docs/contributing/verify/index.html
+++ b/docs/contributing/verify/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Verify | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/contributing/verify"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
-or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 33ed6abbd..63c117f6e 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-09-15 06:42:25 </i>
+<i style="float:right;">Last updated 2023-09-15 08:25:41 </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 31c01a6de..ca53cb38c 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-09-15 06:42:25 </i>
+<i style="float:right;">Last updated 2023-09-15 08:25:41 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index d6f621721..097075ef5 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-09-15 06:42:25 </i>
+<i style="float:right;">Last updated 2023-09-15 08:25:41 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 716f0cf35..f710077e4 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index 59dd357b5..de2b3dbf1 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 644bf3fcb..ee1853499 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -57,7 +57,7 @@ thing internally.</p>
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index 0f80d3f96..2faf8c76f 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -73,7 +73,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -83,7 +83,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -93,7 +93,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -103,7 +103,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -114,7 +114,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -136,7 +136,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index ce273ea81..ded65ab07 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -79,7 +79,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type tsd-kind-class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a>
@@ -104,7 +104,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>check</span><a href="#check" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -117,7 +117,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -136,7 +136,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -155,7 +155,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -172,7 +172,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -189,7 +189,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -207,7 +207,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -224,7 +224,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -241,7 +241,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -258,7 +258,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -277,7 +277,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -296,7 +296,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -316,7 +316,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -336,7 +336,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -356,7 +356,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -373,7 +373,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -390,7 +390,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -408,7 +408,7 @@
 <h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -426,7 +426,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -446,7 +446,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -466,7 +466,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -485,7 +485,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -504,7 +504,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -527,7 +527,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -544,7 +544,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -563,7 +563,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -582,7 +582,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 44a6dc7b3..c43067c49 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -40,21 +40,21 @@
 <div class="tsd-comment tsd-typography"><p>HTTP headers of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">method</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>URL of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/2325bb8/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/42b12e3/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 8c13b554d..160fbd829 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index f1c24c1f5..49cc7b401 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -177,10 +177,10 @@
                                 <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_type">content_type</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                 </ul>
 
@@ -192,10 +192,10 @@
                                 <a class="variable" href="#PresignedRequest.url">url</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.method">method</a>
+                                <a class="variable" href="#PresignedRequest.headers">headers</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.headers">headers</a>
+                                <a class="variable" href="#PresignedRequest.method">method</a>
                         </li>
                 </ul>
 
@@ -974,28 +974,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_type" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_type</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.content_type"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>Content Type of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>Content Type of this entry.</p>
 </div>
 
 
@@ -1026,28 +1026,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="PresignedRequest.method" class="classattr">
+                            <div id="PresignedRequest.headers" class="classattr">
                                 <div class="attr variable">
-            <span class="name">method</span><span class="annotation">: str</span>
+            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.method"></a>
+    <a class="headerlink" href="#PresignedRequest.headers"></a>
     
-            <div class="docstring"><p>Return the HTTP method of this request.</p>
+            <div class="docstring"><p>Return the HTTP headers of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.headers" class="classattr">
+                            <div id="PresignedRequest.method" class="classattr">
                                 <div class="attr variable">
-            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
+            <span class="name">method</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.headers"></a>
+    <a class="headerlink" href="#PresignedRequest.method"></a>
     
-            <div class="docstring"><p>Return the HTTP headers of this request.</p>
+            <div class="docstring"><p>Return the HTTP method of this request.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index ca6f885c7..42c41725b 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/rust/implementors/core/clone/trait.Clone.js b/docs/rust/implementors/core/clone/trait.Clone.js
index c5f690d48..56c263430 100644
--- a/docs/rust/implementors/core/clone/trait.Clone.js
+++ b/docs/rust/implementors/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/raw/struct.OpPresign.html\" title=\"struct opendal::raw::OpPresign\">OpPresign</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/raw/struct.OpCopy.html\" title=\"str [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/services/struct.Memcached.html\" title=\"struct opendal::services::Memcached\">MemcachedBuilder</a>"],["impl&lt;I&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/layers/str [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/cmp/trait.Eq.js b/docs/rust/implementors/core/cmp/trait.Eq.js
index 07fc5ea1b..e01962948 100644
--- a/docs/rust/implementors/core/cmp/trait.Eq.js
+++ b/docs/rust/implementors/core/cmp/trait.Eq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContentRange\">BytesContentRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opend [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"opendal/enum.ErrorKind.html\" title=\"enum opendal::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"opendal/enum.Metakey.html\" title=\"enum opendal::Metakey\">Metakey</a>"],["impl <a cla [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/cmp/trait.PartialEq.js b/docs/rust/implementors/core/cmp/trait.PartialEq.js
index efc4f5be6..f5567128b 100644
--- a/docs/rust/implementors/core/cmp/trait.PartialEq.js
+++ b/docs/rust/implementors/core/cmp/trait.PartialEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a>&lt;<a class=\"enum\" href=\"opendal/raw/oio/enum.ReadOperation.html\" title=\"enum opendal::raw::oio::ReadOperation\">ReadOperation</a>&gt; for <a class=\"enum\" href=\"opendal/raw/oio/enum.ReadOperation.html\" title=\"enum opendal::raw::oio::ReadOperation\">ReadOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lan [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a>&lt;<a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContentRange\">BytesContentRange</a>&gt; for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContentRange\">BytesContentRange</a>"],["impl <a class=\"trait\" href=\"ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/convert/trait.From.js b/docs/rust/implementors/core/convert/trait.From.js
index 00eae303d..ae69aa367 100644
--- a/docs/rust/implementors/core/convert/trait.From.js
+++ b/docs/rust/implementors/core/convert/trait.From.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;Error&gt; for <a class=\"struct\" href=\"opendal/struct.Error.html\" title=\"struct opendal::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;Error&gt; for <a class=\"struct\" href=\"opendal/struct.Error.html\" title=\"s [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"opendal/raw/adapters/kv/struct.Metadata.html\" title=\"struct opendal::raw::adapters::kv::Metadata\">Metadata</a>&gt; for <a class=\"struct\" href=\"opendal/raw/struct.AccessorInfo.html\" title=\"struct opendal::raw::AccessorInfo\">AccessorInfo</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/default/trait.Default.js b/docs/rust/implementors/core/default/trait.Default.js
index 1a16cac18..7294e4f35 100644
--- a/docs/rust/implementors/core/default/trait.Default.js
+++ b/docs/rust/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Postgresql.html\" title=\"struct opendal::services::Postgresql\">PostgresqlBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"open [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpWrite.html\" title=\"struct opendal::raw::RpWrite\">RpWrite</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/layers/struct.Promethe [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/fmt/trait.Debug.js b/docs/rust/implementors/core/fmt/trait.Debug.js
index 1a358ef4d..d37e40ae3 100644
--- a/docs/rust/implementors/core/fmt/trait.Debug.js
+++ b/docs/rust/implementors/core/fmt/trait.Debug.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpList.html\" title=\"struct opendal::raw::RpList\">RpList</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/layers/struct.BlockingLayer.html\" title=\"struct ope [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/struct.OpCopy.html\" title=\"struct opendal::raw::OpCopy\">OpCopy</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/services/struct.MiniMoka.html\" title=\"struct openda [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/fmt/trait.Display.js b/docs/rust/implementors/core/fmt/trait.Display.js
index 6c7d114e1..c1d489631 100644
--- a/docs/rust/implementors/core/fmt/trait.Display.js
+++ b/docs/rust/implementors/core/fmt/trait.Display.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.ReadOperation.html\" title=\"enum op [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesC [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/future/future/trait.Future.js b/docs/rust/implementors/core/future/future/trait.Future.js
index d1a3dc2b6..7bc05eec3 100644
--- a/docs/rust/implementors/core/future/future/trait.Future.js
+++ b/docs/rust/implementors/core/future/future/trait.Future.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a class=\"struct\" href=\"opendal/operator_futures/struct.FutureRead.html\" title=\"struct opendal::operator_futures::FutureRead\">FutureRead</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a> for <a class=\"struct\" href=\"opendal/operator_futures/struct.FutureWriter.html\" title=\"struct opendal::operator_futures::FutureWriter\">FutureWriter</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html\" title=\"trait core::future::future::Future\">Future</a>  [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/hash/trait.Hash.js b/docs/rust/implementors/core/hash/trait.Hash.js
index 6662a146e..e9b58fc85 100644
--- a/docs/rust/implementors/core/hash/trait.Hash.js
+++ b/docs/rust/implementors/core/hash/trait.Hash.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\ [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/enum.Scheme.html\" title=\"enum opendal::Scheme\">Scheme</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.ReadOperation.html\" title=\"enum opendal::raw::oio::ReadOp [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/iter/traits/iterator/trait.Iterator.js b/docs/rust/implementors/core/iter/traits/iterator/trait.Iterator.js
index e3e652781..e1ed6e021 100644
--- a/docs/rust/implementors/core/iter/traits/iterator/trait.Iterator.js
+++ b/docs/rust/implementors/core/iter/traits/iterator/trait.Iterator.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.BlockingRead.html\" title=\"trait opendal::raw::oio::BlockingRead\">BlockingRead</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"opendal/struct.BlockingReader.html\" title=\"struct opendal::BlockingReader\">BlockingReader</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\"> [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Copy.js b/docs/rust/implementors/core/marker/trait.Copy.js
index 6bb226330..e34b3db17 100644
--- a/docs/rust/implementors/core/marker/trait.Copy.js
+++ b/docs/rust/implementors/core/marker/trait.Copy.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesRange.html\" title=\"struct opendal::raw::BytesRange\">BytesRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Freeze.js b/docs/rust/implementors/core/marker/trait.Freeze.js
index 788e0f866..c14265db8 100644
--- a/docs/rust/implementors/core/marker/trait.Freeze.js
+++ b/docs/rust/implementors/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Send.js b/docs/rust/implementors/core/marker/trait.Send.js
index 191abc13f..dd52b9002 100644
--- a/docs/rust/implementors/core/marker/trait.Send.js
+++ b/docs/rust/implementors/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.StructuralEq.js b/docs/rust/implementors/core/marker/trait.StructuralEq.js
index 844a151dc..17a3b9e86 100644
--- a/docs/rust/implementors/core/marker/trait.StructuralEq.js
+++ b/docs/rust/implementors/core/marker/trait.StructuralEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"struct\" href=\"opendal/raw/s [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.WriteOperation.html\" title=\"enum opendal::raw::oio::WriteOperation\">WriteOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralEq.html\" title=\"trait core::marker::StructuralEq\">StructuralEq</a> for <a clas [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js b/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
index 071a875fe..593c46d94 100644
--- a/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
+++ b/docs/rust/implementors/core/marker/trait.StructuralPartialEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"struct\" href=\"opendal/raw/oio/struct.Entry.html\" title=\"struct opendal::raw::oio::Entry\">Entry</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPart [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Sync.js b/docs/rust/implementors/core/marker/trait.Sync.js
index e008b2912..25dc79b06 100644
--- a/docs/rust/implementors/core/marker/trait.Sync.js
+++ b/docs/rust/implementors/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Unpin.js b/docs/rust/implementors/core/marker/trait.Unpin.js
index b61b524f3..36cc70887 100644
--- a/docs/rust/implementors/core/marker/trait.Unpin.js
+++ b/docs/rust/implementors/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index f114a895f..a9d31e0c5 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 004ec93ea..5257d5d50 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/futures_core/stream/trait.Stream.js b/docs/rust/implementors/futures_core/stream/trait.Stream.js
index c79b022b5..aaceb6d2c 100644
--- a/docs/rust/implementors/futures_core/stream/trait.Stream.js
+++ b/docs/rust/implementors/futures_core/stream/trait.Stream.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Stream for <a class=\"struct\" href=\"opendal/struct.Lister.html\" title=\"struct opendal::Lister\">Lister</a>"],["impl Stream for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Read.html\" title=\"trait opendal::raw::oio::Read\">Read</a>"],["impl Stream for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Stream.html\" title=\"trait opendal::raw::oio::Stream\">Stream</a>"],["impl Stream for <a class=\"struct\" href=\"opendal/raw/oio/struct.ChunkedBytes.html\" t [...]
+"opendal":[["impl Stream for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Stream.html\" title=\"trait opendal::raw::oio::Stream\">Stream</a>"],["impl Stream for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Read.html\" title=\"trait opendal::raw::oio::Read\">Read</a>"],["impl Stream for <a class=\"struct\" href=\"opendal/struct.Reader.html\" title=\"struct opendal::Reader\">Reader</a>"],["impl Stream for <a class=\"struct\" href=\"opendal/raw/oio/struct.ChunkedBytes.html\" t [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/futures_io/if_std/trait.AsyncRead.js b/docs/rust/implementors/futures_io/if_std/trait.AsyncRead.js
index 0d5cca548..0fc4d7554 100644
--- a/docs/rust/implementors/futures_io/if_std/trait.AsyncRead.js
+++ b/docs/rust/implementors/futures_io/if_std/trait.AsyncRead.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncRead for <a class=\"struct\" href=\"opendal/struct.Reader.html\" title=\"struct opendal::Reader\">Reader</a>"],["impl AsyncRead for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Read.html\" title=\"trait opendal::raw::oio::Read\">Read</a>"]]
+"opendal":[["impl AsyncRead for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.Read.html\" title=\"trait opendal::raw::oio::Read\">Read</a>"],["impl AsyncRead for <a class=\"struct\" href=\"opendal/struct.Reader.html\" title=\"struct opendal::Reader\">Reader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/std/io/trait.Seek.js b/docs/rust/implementors/std/io/trait.Seek.js
index 6db7dcaaf..ee7ef3fbc 100644
--- a/docs/rust/implementors/std/io/trait.Seek.js
+++ b/docs/rust/implementors/std/io/trait.Seek.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.BlockingRead.html\" title=\"trait opendal::raw::oio::BlockingRead\">BlockingRead</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for <a class=\"struct\" href=\"opendal/struct.BlockingReader.html\" title=\"st [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for <a class=\"struct\" href=\"opendal/struct.BlockingReader.html\" title=\"struct opendal::BlockingReader\">BlockingReader</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for dyn <a class=\"trait\" href=\"opendal/raw/oio/trait.BlockingRead.html\" title=\"trait o [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 40a8e0d45..eeb4ad112 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/docs/features/index.html b/docs/rust/opendal/docs/features/index.html
index 64632eca9..4e707c1ce 100644
--- a/docs/rust/opendal/docs/features/index.html
+++ b/docs/rust/opendal/docs/features/index.html
@@ -21,6 +21,7 @@
 <li><code>services-redis-rustls</code>: Enable redis service support with <code>rustls</code>.</li>
 <li><code>services-redis-native-tls</code>: Enable redis service support with <code>native-tls</code>.</li>
 <li><code>services-rocksdb</code>: Enable rocksdb service support.</li>
+<li><code>services-atomicserver</code>: Enable atomicserver service support.</li>
 <li><code>services-sled</code>: Enable sled service support.</li>
 </ul>
 <h3 id="dependencies-features"><a href="#dependencies-features">Dependencies Features</a></h3>
diff --git a/docs/rust/opendal/enum.EntryMode.html b/docs/rust/opendal/enum.EntryMode.html
index 9a11233d1..f4a18af9c 100644
--- a/docs/rust/opendal/enum.EntryMode.html
+++ b/docs/rust/opendal/enum.EntryMode.html
@@ -8,7 +8,7 @@
 </div><section id="variant.Unknown" class="variant"><a href="#variant.Unknown" class="anchor">§</a><h3 class="code-header">Unknown</h3></section><div class="docblock"><p>Unknown means we don’t know what we can do on this path.</p>
 </div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-EntryMode" class="impl"><a class="srclink rightside" href="../src/opendal/types/mode.rs.html#32-41">source</a><a href="#impl-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.EntryMode.html" title="enum opendal::Ent [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.is_dir" class="method"><a class="srclink rightside" href="../src/opendal/types/mode.rs.html#38-40">source</a><h4 class="code-header">pub fn <a href="#method.is_dir" class="fn">is_dir</a>(self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if this mode is DIR.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-EntryMode" class="impl"><a class="srclink rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Clone-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl  [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-EntryMode" class="impl"><a class="srclink rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Clone-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl  [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
 sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-EntryMode" class="impl"><a class="srclink rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Copy-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.EntryMode.html" ti [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/enum.ErrorKind.html b/docs/rust/opendal/enum.ErrorKind.html
index 2a7b8fbd5..da280b87a 100644
--- a/docs/rust/opendal/enum.ErrorKind.html
+++ b/docs/rust/opendal/enum.ErrorKind.html
@@ -51,7 +51,7 @@ So users could to handle this error by themselves.</p>
 </div><section id="variant.InvalidInput" class="variant"><a href="#variant.InvalidInput" class="anchor">§</a><h3 class="code-header">InvalidInput</h3></section><div class="docblock"><p>The input is invalid.</p>
 <p>For example, user try to seek to a negative position</p>
 </div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ErrorKind" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#110-115">source</a><a href="#impl-ErrorKind" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.ErrorKind.html" title="enum opendal:: [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ErrorKind" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#50">source</a><a href="#impl-Clone-for-ErrorKind" class="anchor">§</a><h3 class="code-header">impl [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ErrorKind" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#50">source</a><a href="#impl-Clone-for-ErrorKind" class="anchor">§</a><h3 class="code-header">impl [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
 sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-ErrorKind" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#50">source</a><a href="#impl-Copy-for-ErrorKind" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.ErrorKind.html" t [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/enum.Metakey.html b/docs/rust/opendal/enum.Metakey.html
index 5fbb5691b..9ab7a3440 100644
--- a/docs/rust/opendal/enum.Metakey.html
+++ b/docs/rust/opendal/enum.Metakey.html
@@ -31,9 +31,9 @@ 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 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="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="srclink rightside" href="../src/opendal/types/metadata.rs.html#513-553">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: [...]
+</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="srclink rightside" href="../src/opendal/types/metadata.rs.html#513-553">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl&lt;R: [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
-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="srclink rightside" href="../src/opendal/types/metadata.rs.html#513-553">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/1.72.0/core/convert/trait.Into.html" title="tr [...]
+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="srclink rightside" href="../src/opendal/types/metadata.rs.html#513-553">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/1.72.0/core/convert/trait.Into.html" title="tr [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/enum.Scheme.html b/docs/rust/opendal/enum.Scheme.html
index c2f15b314..c207564e3 100644
--- a/docs/rust/opendal/enum.Scheme.html
+++ b/docs/rust/opendal/enum.Scheme.html
@@ -1,5 +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="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/Fira [...]
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 39 variants</span></summary>    Azblob,
+<!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="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/Fira [...]
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 40 variants</span></summary>    Atomicserver,
+    Azblob,
     Azdls,
     Cacache,
     Cos,
@@ -45,7 +46,8 @@
 <li>New variant SHOULD be added in alphabet orders,</li>
 <li>Users MUST NOT relay on its order.</li>
 </ul>
-</div></details><h2 id="variants" class="variants small-section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variant [...]
+</div></details><h2 id="variants" class="variants small-section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variant [...]
+</div><section id="variant.Azblob" class="variant"><a href="#variant.Azblob" class="anchor">§</a><h3 class="code-header">Azblob</h3></section><div class="docblock"><p><a href="services/struct.Azblob.html" title="struct opendal::services::Azblob">azblob</a>: Azure Storage Blob services.</p>
 </div><section id="variant.Azdls" class="variant"><a href="#variant.Azdls" class="anchor">§</a><h3 class="code-header">Azdls</h3></section><div class="docblock"><p><a href="services/struct.Azdls.html" title="struct opendal::services::Azdls">Azdls</a>: Azure Data Lake Storage Gen2.</p>
 </div><section id="variant.Cacache" class="variant"><a href="#variant.Cacache" class="anchor">§</a><h3 class="code-header">Cacache</h3></section><div class="docblock"><p><a href="services/struct.Cacache.html" title="struct opendal::services::Cacache">cacache</a>: cacache backend support.</p>
 </div><section id="variant.Cos" class="variant"><a href="#variant.Cos" class="anchor">§</a><h3 class="code-header">Cos</h3></section><div class="docblock"><p><a href="services/struct.Cos.html" title="struct opendal::services::Cos">cos</a>: Tencent Cloud Object Storage services.</p>
@@ -89,8 +91,8 @@
 <li>Custom must not overwrite any existing services name.</li>
 <li>Custom must be lowed cases.</li>
 </ul>
-</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Scheme" class="impl"><a class="srclink rightside" href="../src/opendal/types/scheme.rs.html#120-125">source</a><a href="#impl-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme"> [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Scheme" class="impl"><a class="srclink rightside" href="../src/opendal/types/scheme.rs.html#31">source</a><a href="#impl-Clone-for-Scheme" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Scheme" class="impl"><a class="srclink rightside" href="../src/opendal/types/scheme.rs.html#122-127">source</a><a href="#impl-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme"> [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Scheme" class="impl"><a class="srclink rightside" href="../src/opendal/types/scheme.rs.html#31">source</a><a href="#impl-Clone-for-Scheme" class="anchor">§</a><h3 class="code-header">impl <a c [...]
     H: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></det [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
diff --git a/docs/rust/opendal/raw/enum.Operation.html b/docs/rust/opendal/raw/enum.Operation.html
index b1d14c2bf..800b77522 100644
--- a/docs/rust/opendal/raw/enum.Operation.html
+++ b/docs/rust/opendal/raw/enum.Operation.html
@@ -39,7 +39,7 @@
 </div><section id="variant.BlockingDelete" class="variant"><a href="#variant.BlockingDelete" class="anchor">§</a><h3 class="code-header">BlockingDelete</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_delete" title="method opendal::raw::Accessor::blocking_delete"><code>crate::raw::Accessor::blocking_delete</code></a></p>
 </div><section id="variant.BlockingList" class="variant"><a href="#variant.BlockingList" class="anchor">§</a><h3 class="code-header">BlockingList</h3></section><div class="docblock"><p>Operation for <a href="trait.Accessor.html#method.blocking_list" title="method opendal::raw::Accessor::blocking_list"><code>crate::raw::Accessor::blocking_list</code></a></p>
 </div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Operation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/operation.rs.html#66-71">source</a><a href="#impl-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Operation.html" title="enum openda [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header" [...]
     H: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.72.0/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></det [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
diff --git a/docs/rust/opendal/raw/enum.PresignOperation.html b/docs/rust/opendal/raw/enum.PresignOperation.html
index 7a2019c79..86ef205e6 100644
--- a/docs/rust/opendal/raw/enum.PresignOperation.html
+++ b/docs/rust/opendal/raw/enum.PresignOperation.html
@@ -6,7 +6,7 @@
 </div></details><h2 id="variants" class="variants small-section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variant [...]
 </div><section id="variant.Read" class="variant"><a href="#variant.Read" class="anchor">§</a><h3 class="code-header">Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::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="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#183">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
+</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/ops.rs.html#183">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/raw/oio/struct.ChunkedBytes.html b/docs/rust/opendal/raw/oio/struct.ChunkedBytes.html
index 7af10a2f6..14e3b23af 100644
--- a/docs/rust/opendal/raw/oio/struct.ChunkedBytes.html
+++ b/docs/rust/opendal/raw/oio/struct.ChunkedBytes.html
@@ -15,12 +15,12 @@ or allocate any additional memory.</p>
     size: <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>,
     buf: &amp;dyn <a class="trait" href="trait.WriteBuf.html" title="trait opendal::raw::oio::WriteBuf">WriteBuf</a>
 ) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Pull data from <a href="trait.WriteBuf.html" title="trait opendal::raw::oio::WriteBuf"><code>oio::WriteBuf</code></a> into ChunkedBytes.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ChunkedBytes" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/buf/chunked_bytes.rs.html#36">source</a><a href="#impl-Clone-for-ChunkedBytes" class="anchor">§</a><h [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ChunkedBytes" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/buf/chunked_bytes.rs.html#36">source</a><a href="#impl-Clone-for-ChunkedBytes" class="anchor">§</a><h [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     _: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::Item&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
 current task for wakeup if the value is not yet available, and returning
-<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
+<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
 Buf::remaining(). Note that this can return shorter slice (this allows non-continuous
 internal representation). <a href="trait.WriteBuf.html#tymethod.chunk">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.vectored_chunk" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/buf/chunked_bytes.rs.html#225-233">source</a><a href="#method.vectored_chunk" class="anchor">§</a><h4 class="code-header">fn <a href="trait.WriteBuf.html#tymethod.vectored_chunk" class="fn">vectored_chunk</a>(&amp; [...]
 length between 0 and Buf::remaining(). Note that this can return shorter slice
diff --git a/docs/rust/opendal/raw/oio/struct.FlatPager.html b/docs/rust/opendal/raw/oio/struct.FlatPager.html
index b01ca4199..afb996510 100644
--- a/docs/rust/opendal/raw/oio/struct.FlatPager.html
+++ b/docs/rust/opendal/raw/oio/struct.FlatPager.html
@@ -27,9 +27,9 @@ may output parent dirs’ files before nested dirs, this is expected because fil
 always output directly while listing.</p>
 </div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingPage-for-FlatPager%3CA,+P%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#153-211">source</a><a href="#impl-BlockingPage-for-FlatPager%3CA,+P%3E" class="an [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;BlockingPager = P&gt;,
-    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#158-210">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingPage.html# [...]
+    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#158-210">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingPage.h [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;Pager = P&gt;,
-    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#98-150">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Page.html#tymethod.next" class="fn">nex [...]
+    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#98-150">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.Page.html#tymethod.next" class="fn">next</a [...]
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.72.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
diff --git a/docs/rust/opendal/raw/oio/trait.BlockingPage.html b/docs/rust/opendal/raw/oio/trait.BlockingPage.html
index 685ec3a03..93225ee2d 100644
--- a/docs/rust/opendal/raw/oio/trait.BlockingPage.html
+++ b/docs/rust/opendal/raw/oio/trait.BlockingPage.html
@@ -5,6 +5,6 @@
 </div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.next" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#104">source</a><h4 class="code-header">fn <a href="#tymethod.next" class="fn">next</a>(&amp;mut self) -&gt; <a class="type" href="../../type.Result.html" t [...]
 <p><code>Ok(None)</code> means all pages have been returned. Any following call
 to <code>next</code> will always get the same result.</p>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-BlockingPage-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#116-120">source</a><a href="#impl-BlockingPage-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.BlockingPage.html [...]
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-BlockingPage-for-Option%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#122-129">source</a><a href="#impl-BlockingPage-for-Option%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" h [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;BlockingPager = P&gt;,
-    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section><section id="impl-BlockingPage-for-HierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_hierarchy_pager.rs.html#136-150">source</a><a href="#impl-BlockingPage-for-HierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.BlockingPage.html" title= [...]
\ No newline at end of file
+    P: <a class="trait" href="trait.BlockingPage.html" title="trait opendal::raw::oio::BlockingPage">BlockingPage</a>,</span></h3></section><section id="impl-BlockingPage-for-HierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_hierarchy_pager.rs.html#136-150">source</a><a href="#impl-BlockingPage-for-HierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.BlockingPage.html" title= [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.BlockingRead.html b/docs/rust/opendal/raw/oio/trait.BlockingRead.html
index 443effabc..df916a94e 100644
--- a/docs/rust/opendal/raw/oio/trait.BlockingRead.html
+++ b/docs/rust/opendal/raw/oio/trait.BlockingRead.html
@@ -17,9 +17,9 @@ is optional. We use <code>Read</code> to make users life easier.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.next" class="method"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#280">source</a><h4 class="code-header">fn <a href="#tymethod.next" class="fn">next</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="type" href="../../type.Result.html" title="type o [...]
 </div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Iterator-for-dyn+BlockingRead" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#339-347">source</a><a href="#impl-Iterator-for-dyn+BlockingRead" class="anchor">§</a><h3 clas [...]
 how many bytes were read. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#tymethod.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_vectored" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.36.0">1.36.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#662">source</a></span><a href="#method.read_vectored" class="a [...]
-implementation. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.is_read_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_to_end" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#726">source</a></span><a href="#method.read_to_end" class="anchor" [...]
+implementation. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.is_read_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_to_end" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#726">source</a></span><a href="#method.read_to_end" class="anchor" [...]
 To make BlockingReader work as expected, we must add this impl.</p>
-</div><div class="impl-items"><section id="method.read-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#310-312">source</a><a href="#method.read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.read" class="fn">read</a>(&amp;mut self, buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]) -&gt; <a class="type" href="../../type.Result.html" title="type opend [...]
+</div><div class="impl-items"><section id="method.read-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#310-312">source</a><a href="#method.read-2" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.read" class="fn">read</a>(&amp;mut self, buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]) -&gt; <a class="type" href="../../type.Result.html" title="type opend [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;BlockingReader = R&gt;,
     R: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,</span></h3></section><section id="impl-BlockingRead-for-FromFileReader%3CR%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/into_read_from_file.rs.html#134-192">source</a><a href="#impl-BlockingRead-for-FromFileReader%3CR%3E" class="anchor">§</a><h3 class="code-header">impl&lt;R&gt; <a class="trait" href="trait.BlockingRead.html" titl [...]
-    R: <a class="trait" href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html" title="trait std::io::Read">Read</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html" title="trait std::io::Seek">Seek</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html" title="trait core::marker::Sync"> [...]
\ No newline at end of file
+    R: <a class="trait" href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html" title="trait std::io::Read">Read</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/std/io/trait.Seek.html" title="trait std::io::Seek">Seek</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html" title="trait core::marker::Sync"> [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Page.html b/docs/rust/opendal/raw/oio/trait.Page.html
index d94784fd2..047aee0aa 100644
--- a/docs/rust/opendal/raw/oio/trait.Page.html
+++ b/docs/rust/opendal/raw/oio/trait.Page.html
@@ -14,18 +14,18 @@ or <code>scan</code> operation.</p>
     'life0: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Fetch a new page of <a href="struct.Entry.html" title="struct opendal::raw::oio::Entry"><code>Entry</code></a></p>
 <p><code>Ok(None)</code> means all pages have been returned. Any following call
 to <code>next</code> will always get the same result.</p>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-Box%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#75-79">source</a><a href="#impl-Page-for-Box%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" ti [...]
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#82-86">source</a><a href="#impl-Page-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Page.html" title="trait opendal::ra [...]
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.72.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-Option%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#89-96">source</a><a href="#impl-Page-for-Option%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>&gt; <a class="trait" href="trait.Page.html [...]
+    'life0: 'async_trait,</span></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-Box%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#75-79">source</a><a href="#impl-Page-for-Box%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a> + ?<a class="trait" href="https://doc.rust-lang. [...]
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.72.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</span></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-()" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#82-86">source</a><a href="#impl-Page-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a> for <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/pr [...]
+    'life0: 'async_trait,</span></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Page-for-Option%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/api.rs.html#89-96">source</a><a href="#impl-Page-for-Option%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>&gt; <a class="trait" href="trait.Page.html [...]
     &amp;'life0 mut self
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.72.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type opendal: [...]
     Self: 'async_trait,
     'life0: 'async_trait,</span></h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-Page-for-FlatPager%3CA,+P%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_flat_page.rs.html#93-151">source</a><a href="#impl-Page-for-FlatPager%3CA,+P%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A, P&gt; <a class="tr [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;Pager = P&gt;,
-    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section><section id="impl-Page-for-HierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_hierarchy_pager.rs.html#120-134">source</a><a href="#impl-Page-for-HierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>&gt; <a  [...]
\ No newline at end of file
+    P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>,</span></h3></section><section id="impl-Page-for-HierarchyPager%3CP%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/page/into_hierarchy_pager.rs.html#120-134">source</a><a href="#impl-Page-for-HierarchyPager%3CP%3E" class="anchor">§</a><h3 class="code-header">impl&lt;P: <a class="trait" href="trait.Page.html" title="trait opendal::raw::oio::Page">Page</a>&gt; <a  [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Read.html b/docs/rust/opendal/raw/oio/trait.Read.html
index 8b95e085c..06f5d7d80 100644
--- a/docs/rust/opendal/raw/oio/trait.Read.html
+++ b/docs/rust/opendal/raw/oio/trait.Read.html
@@ -49,32 +49,32 @@ IO operations. <a>Read more</a></div></details></div></details><details class="t
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/1.72.0/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more</a [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more</a [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::Item&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
 current task for wakeup if the value is not yet available, and returning
-<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
+<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
+work as expected, we must add this impl.</p>
+</div><div class="impl-items"><section id="method.poll_read-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#138-140">source</a><a href="#method.poll_read-1" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.poll_read" class="fn">poll_read</a>(
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section><section id="method.poll_seek-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#116 [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section><section id="method.poll_seek-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#142 [...]
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/1.72.0/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section><section id="method.poll_next-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#125-132 [...]
-work as expected, we must add this impl.</p>
-</div><div class="impl-items"><section id="method.poll_read-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#138-140">source</a><a href="#method.poll_read-2" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.poll_read" class="fn">poll_read</a>(
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section><section id="method.poll_next-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#146-148 [...]
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section><section id="method.poll_seek-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#142 [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section><section id="method.poll_seek-2" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#116 [...]
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/1.72.0/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section><section id="method.poll_next-3" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#146-148 [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section><section id="method.poll_next-3" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#125-132 [...]
     A: <a class="trait" href="../trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&lt;Reader = R&gt;,
     R: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,</span></h3></section><section id="impl-Read-for-FromFileReader%3CR%3E" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/read/into_read_from_file.rs.html#60-132">source</a><a href="#impl-Read-for-FromFileReader%3CR%3E" class="anchor">§</a><h3 class="code-header">impl&lt;R&gt; <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a> for <a [...]
     R: AsyncRead + AsyncSeek + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Read-for-CloneableReaderWithinStd [...]
     S: Stream&lt;Item = <a class="type" href="../../type.Result.html" title="type opendal::Result">Result</a>&lt;T&gt;&gt; + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html" title="trait core::mark [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Bytes&gt;,</span></h3></section></div><script src="../../../implementors/opendal/raw/oio/read/api/trait.Read.js" data-ignore-extern-crates="std,alloc" async></script></section></div></main></body></html>
\ No newline at end of file
+    T: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Bytes&gt;,</span></h3></section></div><script src="../../../implementors/opendal/raw/oio/read/api/trait.Read.js" data-ignore-extern-crates="alloc,std" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Stream.html b/docs/rust/opendal/raw/oio/trait.Stream.html
index dbdf89868..fe900f151 100644
--- a/docs/rust/opendal/raw/oio/trait.Stream.html
+++ b/docs/rust/opendal/raw/oio/trait.Stream.html
@@ -12,6 +12,6 @@
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::Item&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
 current task for wakeup if the value is not yet available, and returning
-<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
+<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&amp;self) -&gt; (<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" ti [...]
 To make Streamer work as expected, we must add this impl.</p>
-</div><div class="impl-items"><section id="method.poll_next-3" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/stream/api.rs.html#63-65">source</a><a href="#method.poll_next-3" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.poll_next" class="fn">poll_next</a>(&amp;mut self, cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</ [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="method.poll_next-1" class="method trait-impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/stream/api.rs.html#63-65">source</a><a href="#method.poll_next-1" class="anchor">§</a><h4 class="code-header">fn <a href="#tymethod.poll_next" class="fn">poll_next</a>(&amp;mut self, cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</ [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.WriteBuf.html b/docs/rust/opendal/raw/oio/trait.WriteBuf.html
index 7fc5d4553..e731e253d 100644
--- a/docs/rust/opendal/raw/oio/trait.WriteBuf.html
+++ b/docs/rust/opendal/raw/oio/trait.WriteBuf.html
@@ -54,4 +54,4 @@ the given <code>self.bytes(size)</code> could be done without cost. For example,
 buffer is <code>Bytes</code>.</p>
 <h5 id="panics-3"><a href="#panics-3">Panics</a></h5>
 <p>This function will panic if size &gt; self.remaining().</p>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-WriteBuf-for-Bytes" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/buf/write_buf.rs.html#228-263">source</a><a href="#impl-WriteBuf-for-Bytes" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.WriteBuf.html" [...]
\ No newline at end of file
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-WriteBuf-for-%26mut+T" class="impl"><a class="srclink rightside" href="../../../src/opendal/raw/oio/buf/write_buf.rs.html#143-145">source</a><a href="#impl-WriteBuf-for-%26mut+T" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="trait.Wr [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.BytesRange.html b/docs/rust/opendal/raw/struct.BytesRange.html
index f065d19c8..720eaf093 100644
--- a/docs/rust/opendal/raw/struct.BytesRange.html
+++ b/docs/rust/opendal/raw/struct.BytesRange.html
@@ -33,7 +33,7 @@ tailing part of content, a.k.a, the last <code>&lt;end&gt;</code> bytes of conte
 </ul>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.to_range" class="method"><a class="srclink rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#103-114">source</a><h4 class="code-header">pub fn <a href="#method.to_range" class="fn">to_range</a>(&amp;self) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="p [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.apply_on_bytes" class="method"><a class="srclink rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#117-135">source</a><h4 class="code-header">pub fn <a href="#method.apply_on_bytes" class="fn">apply_on_bytes</a>(&amp;self, bs: Bytes) -&gt; Bytes</h4></section></summary><div class="docblock"><p>apply_on_bytes will apply range on bytes.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesRange" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#52">source</a><a href="#impl-Clone-for-BytesRange" class="anchor">§</a><h3 class [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesRange" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#52">source</a><a href="#impl-Clone-for-BytesRange" class="anchor">§</a><h3 class [...]
     T: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/raw/http_util/byte [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
 sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-BytesRange" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#52">source</a><a href="#impl-Copy-for-BytesRange" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="struct" href="s [...]
diff --git a/docs/rust/opendal/raw/trait.Accessor.html b/docs/rust/opendal/raw/trait.Accessor.html
index 763a37a47..fd206f903 100644
--- a/docs/rust/opendal/raw/trait.Accessor.html
+++ b/docs/rust/opendal/raw/trait.Accessor.html
@@ -361,10 +361,9 @@ written size if operate successful.</p>
 <ul>
 <li>List non-exist dir should return Empty.</li>
 </ul>
-</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Accessor-for-()" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#368-385">source</a><a href="#impl-Accessor-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Accessor.html" title="trait open [...]
-</div><div class="impl-items"><section id="associatedtype.Reader-1" class="associatedtype trait-impl"><a href="#associatedtype.Reader-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.unit.html">()</a></h4></section><section id="associatedtype.BlockingReader-1" class="associatedtype trait-impl"><a href="#associatedtype.BlockingReader-1" class="a [...]
+</div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Accessor-for-Arc%3CT%3E" class="impl"><a class="srclink rightside" href="../../src/opendal/raw/accessor.rs.html#390-466">source</a><a href="#impl-Accessor-for-Arc%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="trait.Accessor.h [...]
 <code>Accessor</code> for <code>Arc&lt;dyn Accessor&gt;</code>.</p>
-</div><div class="impl-items"><section id="associatedtype.Reader-2" class="associatedtype trait-impl"><a href="#associatedtype.Reader-2" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = &lt;T as <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;::<a class="associatedtype" href="trait.Accessor.html#associatedtype.Reader" title="type opendal::raw::Accessor::Reader">Reader</a> [...]
+</div><div class="impl-items"><section id="associatedtype.Reader-1" class="associatedtype trait-impl"><a href="#associatedtype.Reader-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = &lt;T as <a class="trait" href="trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;::<a class="associatedtype" href="trait.Accessor.html#associatedtype.Reader" title="type opendal::raw::Accessor::Reader">Reader</a> [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpCreateDir.html" title="struct opendal::raw::OpCreateDir">OpCreateDir</a>
@@ -457,4 +456,5 @@ written size if operate successful.</p>
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="struct.OpList.html" title="struct opendal::raw::OpList">OpList</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2>< [...]
\ No newline at end of file
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Accessor-for-()" class="impl"><a class="sr [...]
+</div><div class="impl-items"><section id="associatedtype.Reader-2" class="associatedtype trait-impl"><a href="#associatedtype.Reader-2" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Reader" class="associatedtype">Reader</a> = <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.unit.html">()</a></h4></section><section id="associatedtype.BlockingReader-2" class="associatedtype trait-impl"><a href="#associatedtype.BlockingReader-2" class="a [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/atomicserver/backend/struct.AtomicserverBuilder.html b/docs/rust/opendal/services/atomicserver/backend/struct.AtomicserverBuilder.html
new file mode 100644
index 000000000..7d5e0354f
--- /dev/null
+++ b/docs/rust/opendal/services/atomicserver/backend/struct.AtomicserverBuilder.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../../opendal/services/struct.Atomicserver.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../../opendal/services/struct.Atomicserver.html">../../../../opendal/services/struct.Atomicserver.html</a>...</p>
+    <script>location.replace("../../../../opendal/services/struct.Atomicserver.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/services/index.html b/docs/rust/opendal/services/index.html
index e010359bf..df5ca286a 100644
--- a/docs/rust/opendal/services/index.html
+++ b/docs/rust/opendal/services/index.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="Services will provide builders to build underlying backends."><title>opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cross [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services will provide builders to build underlying backends."><title>opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cross [...]
 <p>More ongoing services support is tracked at <a href="https://github.com/apache/incubator-opendal/issues/5">opendal#5</a>. Please feel free to submit issues if there are services not covered.</p>
-</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Azblob.html" title="struct opendal::services::Azblob">Azblob</a></div><div class="desc docblock-short">Azure Storage Blob services support.</div></li><li><div class="item-name"><a class="struct" href="struct.Azdls.html" title="struct opendal::services::Azdls">Azdls</a></div><div class="desc docblock-short">Azure  [...]
+</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Atomicserver.html" title="struct opendal::services::Atomicserver">Atomicserver</a></div><div class="desc docblock-short">Atomicserver service support.</div></li><li><div class="item-name"><a class="struct" href="struct.Azblob.html" title="struct opendal::services::Azblob">Azblob</a></div><div class="desc docblock [...]
 As known as <code>abfs</code>, <code>azdls</code> or <code>azdls</code>.</div></li><li><div class="item-name"><a class="struct" href="struct.Cacache.html" title="struct opendal::services::Cacache">Cacache</a></div><div class="desc docblock-short">cacache service support.</div></li><li><div class="item-name"><a class="struct" href="struct.Cos.html" title="struct opendal::services::Cos">Cos</a></div><div class="desc docblock-short">Tencent-Cloud COS services support.</div></li><li><div cla [...]
 A distributed file system that provides high-throughput access to application data.</div></li><li><div class="item-name"><a class="struct" href="struct.Http.html" title="struct opendal::services::Http">Http</a></div><div class="desc docblock-short">HTTP Read-only service support like <a href="https://www.nginx.com/">Nginx</a> and <a href="https://caddyserver.com/">Caddy</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Ipfs.html" title="struct opendal::services::Ip [...]
 For more information about s3-compatible services, refer to <a href="#compatible-services">Compatible Services</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Sftp.html" title="struct opendal::services::Sftp">Sftp</a></div><div class="desc docblock-short">SFTP services support. (only works on unix)</div></li><li><div class="item-name"><a class="struct" href="struct.Sled.html" title="struct opendal::services::Sled">Sled</a></div><div class="desc docblock-short">Sl [...]
diff --git a/docs/rust/opendal/services/sidebar-items.js b/docs/rust/opendal/services/sidebar-items.js
index 13d68aaf1..b0707f3aa 100644
--- a/docs/rust/opendal/services/sidebar-items.js
+++ b/docs/rust/opendal/services/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"struct":["Azblob","Azdls","Cacache","Cos","Dashmap","Dropbox","Etcd","Foundationdb","Fs","Ftp","Gcs","Gdrive","Ghac","Hdfs","Http","Ipfs","Ipmfs","Memcached","Memory","MiniMoka","Moka","Obs","Onedrive","Oss","Persy","Postgresql","Redb","Redis","Rocksdb","S3","Sftp","Sled","Supabase","Tikv","VercelArtifacts","Wasabi","Webdav","Webhdfs"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"struct":["Atomicserver","Azblob","Azdls","Cacache","Cos","Dashmap","Dropbox","Etcd","Foundationdb","Fs","Ftp","Gcs","Gdrive","Ghac","Hdfs","Http","Ipfs","Ipmfs","Memcached","Memory","MiniMoka","Moka","Obs","Onedrive","Oss","Persy","Postgresql","Redb","Redis","Rocksdb","S3","Sftp","Sled","Supabase","Tikv","VercelArtifacts","Wasabi","Webdav","Webhdfs"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.Atomicserver.html b/docs/rust/opendal/services/struct.Atomicserver.html
new file mode 100644
index 000000000..5bc120272
--- /dev/null
+++ b/docs/rust/opendal/services/struct.Atomicserver.html
@@ -0,0 +1,84 @@
+<!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="Atomicserver service support."><title>Atomicserver in opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href=".. [...]
+<h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
+<p>This service can be used to:</p>
+<ul>
+<li><input disabled="" type="checkbox" checked=""/>
+stat</li>
+<li><input disabled="" type="checkbox" checked=""/>
+read</li>
+<li><input disabled="" type="checkbox" checked=""/>
+write</li>
+<li><input disabled="" type="checkbox" checked=""/>
+create_dir</li>
+<li><input disabled="" type="checkbox" checked=""/>
+delete</li>
+<li><input disabled="" type="checkbox" checked=""/>
+copy</li>
+<li><input disabled="" type="checkbox" checked=""/>
+rename</li>
+<li><input disabled="" type="checkbox"/>
+<del>list</del></li>
+<li><input disabled="" type="checkbox"/>
+scan</li>
+<li><input disabled="" type="checkbox"/>
+<del>presign</del></li>
+<li><input disabled="" type="checkbox"/>
+blocking</li>
+</ul>
+<h3 id="configuration"><a href="#configuration">Configuration</a></h3>
+<ul>
+<li><code>root</code>: Set the working directory of <code>OpenDAL</code></li>
+<li><code>endpoint</code>: Set the server address for <code>Atomicserver</code></li>
+<li><code>private_key</code>: Set the private key for agent used for <code>Atomicserver</code></li>
+<li><code>public_key</code>: Set the public key for agent used for <code>Atomicserver</code></li>
+<li><code>parent_resource_id</code>:  Set the parent resource id (url) that <code>Atomicserver</code> uses to store resources under</li>
+</ul>
+<p>You can refer to <a href="struct.Atomicserver.html" title="struct opendal::services::Atomicserver"><code>AtomicserverBuilder</code></a>’s docs for more information.</p>
+<h3 id="example"><a href="#example">Example</a></h3><h4 id="via-builder"><a href="#via-builder">Via Builder</a></h4>
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
+<span class="kw">use </span>opendal::services::Atomicserver;
+<span class="kw">use </span>opendal::Operator;
+
+<span class="attr">#[tokio::main]
+</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+    <span class="kw">let </span><span class="kw-2">mut </span>builder = Atomicserver::default();
+
+    <span class="comment">// Set the server address for Atomicserver
+    </span>builder.endpoint(<span class="string">&quot;http://localhost:9883&quot;</span>);
+    <span class="comment">// Set the public/private key for agent for Atomicserver
+    </span>builder.private_key(<span class="string">&quot;&lt;private_key&gt;&quot;</span>);
+    builder.public_key(<span class="string">&quot;&lt;public_key&gt;&quot;</span>);
+    <span class="comment">// Set the parent resource id for Atomicserver. In this case
+    // We are using the root resource (Drive)
+    </span>builder.parent_resource_id(<span class="string">&quot;http://localhost:9883&quot;</span>);
+
+    <span class="kw">let </span>op: Operator = Operator::new(builder)<span class="question-mark">?</span>.finish();
+    <span class="prelude-val">Ok</span>(())
+}</code></pre></div>
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#60-93">source</a><a href="#impl-AtomicserverBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" hre [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#68-71">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.private_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#74-77">source</a><h4 class="code-header">pub fn <a href="#method.private_key" class="fn">private_key</a>(&amp;mut self, private_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.public_key" class="method"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#83-86">source</a><h4 class="code-header">pub fn <a href="#method.public_key" class="fn">public_key</a>(&amp;mut self, public_key: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org [...]
+For example, if the subject URL for the agent being used
+is ${endpoint}/agents/lTB+W3C/2YfDu9IAVleEy34uCmb56iXXuzWCKBVwdRI=
+Then the required public key is <code>lTB+W3C/2YfDu9IAVleEy34uCmb56iXXuzWCKBVwdRI=</code></p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.parent_resource_id" class="method"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#89-92">source</a><h4 class="code-header">pub fn <a href="#method.parent_resource_id" class="fn">parent_resource_id</a>(&amp;mut self, parent_resource_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/atomicserver/backend.rs.html#95-142">source</a><a href="#impl-Builder-for-AtomicserverBuilder" [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-AtomicserverBuilder" class="impl"><a href="#impl-FutureExt-for-AtomicserverBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 cl [...]
+wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-AtomicserverBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/convert/mod.rs.html#706">source</a><a href="#impl-Into%3CU%3E-for-AtomicserverBuilder" class="anchor">§</a><h [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/convert/mod.rs.html#715">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.72.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-AtomicserverBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::re [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.72.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.72.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-AtomicserverBuilder" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html# [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.BlockingReader.html b/docs/rust/opendal/struct.BlockingReader.html
index 467ab7edf..db0f9f0c6 100644
--- a/docs/rust/opendal/struct.BlockingReader.html
+++ b/docs/rust/opendal/struct.BlockingReader.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingReader is designed to read data from given path in an blocking manner."><title>BlockingReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font"  [...]
 manner.</p>
-</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-BlockingReader" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#201-216">source</a><a href="#impl-BlockingRead-for-BlockingReader" class="anchor">§</a><h3 class="code-head [...]
+</div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-BlockingReader" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#201-216">source</a><a href="#impl-BlockingRead-for-BlockingReader" class="anchor">§</a><h3 class="code-head [...]
     &amp;mut self
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;[Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.array.html">N</a>], <a class="struct" href="https://doc.rust-lang.org/ [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>iter_next_chunk</code>)</span></div></span><div class='docblock'>Advances the iterator and returns an array containing the next <code>N</code> values. <a href="https://doc.rust-lang.org/1 [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Consumes the iterator, counting the number of iterations and returning it. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.count">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.last" class="method  [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Consumes the iterator, returning the last element. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.last">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.advance_by" class="method trait-impl"><a clas [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator starting at the same point, but stepping by
-the given amount at each iteration. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.step_by">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain-1" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/iter/traits/iterator.rs.html#519-522">source</a></ [...]
+the given amount at each iteration. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.step_by">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/iter/traits/iterator.rs.html#519-522">source</a></sp [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
     U: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>&gt;,</span></h4></section></summary><div class='docblock'>Takes two iterators and creates a [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
@@ -36,7 +36,7 @@ their documentation for more information. <a href="https://doc.rust-lang.org/1.7
     P: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&amp;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.bool.html">bool</a>,</span></h4></section></summary [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
     P: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>& [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.skip">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take-1" class="method trait-im [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.skip">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method trait-impl [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator that yields the first <code>n</code> elements, or fewer
 if the underlying iterator ends sooner. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.take">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/core/iter/traits/iterator.rs.html#1460-1463">source</a></ [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
@@ -49,7 +49,7 @@ unlike <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait
     Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator that flattens nested structur [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an iterator which ends after the first <a href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html#variant.None" title="variant core::option::Option::None"><code>None</code></a>. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.fuse" [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    F: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&amp;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>),</span></h4></section></summary><div class='docblock'>Does something with each element of an iterator, passing the value on. <a hre [...]
+    F: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&amp;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>),</span></h4></section></summary><div class='docblock'>Does something with each element of an iterator, passing the value on. <a hre [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Borrows an iterator, rather than consuming it. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.by_ref">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.collect" class="method trait-impl"><span class= [...]
     B: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/collect/trait.FromIterator.html" title="trait core::iter::traits::collect::FromIterator">FromIterator</a>&lt;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>&gt;,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Transforms an iterator into a collection. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.collect">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.try_collect" class="method trait-impl"><a class="sr [...]
@@ -182,13 +182,13 @@ greater than or equal to those of another. <a href="https://doc.rust-lang.org/1.
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
     F: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -&gt; K,
     K: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a>&lt;K&gt;,</span></h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>is_sorted</code>)</span></div></span><div class='docblock'>Checks if the elements of this iterator are sorted using the given key extraction
-function. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.is_sorted_by_key">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-BlockingReader" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#218-223">source</a><a href="#impl-Read-for-BlockingReader" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https:// [...]
+function. <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html#method.is_sorted_by_key">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-BlockingReader" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#218-223">source</a><a href="#impl-Read-for-BlockingReader" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https:// [...]
 how many bytes were read. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#tymethod.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_vectored" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.36.0">1.36.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#662">source</a></span><a href="#method.read_vectored" class="a [...]
-implementation. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.is_read_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_to_end" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#726">source</a></span><a href="#method.read_to_end" class="anchor" [...]
+implementation. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.is_read_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_to_end" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/1.72.0/src/std/io/mod.rs.html#726">source</a></span><a href="#method.read_to_end" class="anchor" [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates a “by reference” adaptor for this instance of <code>Read</code>. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.by_ref">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.bytes" class="method trait-impl"><span class [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Transforms this <code>Read</code> instance to an <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> over its bytes. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html# [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Transforms this <code>Read</code> instance to an <a href="https://doc.rust-lang.org/1.72.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> over its bytes. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html# [...]
     R: <a class="trait" href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html" title="trait std::io::Read">Read</a>,
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an adapter which will chain this stream with another. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.chain">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method trait-impl"><span class="rightside"> [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an adapter which will chain this stream with another. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.chain">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take-1" class="method trait-impl"><span class="rightside [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Creates an adapter which will read at most <code>limit</code> bytes from it. <a href="https://doc.rust-lang.org/1.72.0/std/io/trait.Read.html#method.take">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Seek-for-BlockingReade [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
diff --git a/docs/rust/opendal/struct.Error.html b/docs/rust/opendal/struct.Error.html
index ea2b6ee99..784e408bd 100644
--- a/docs/rust/opendal/struct.Error.html
+++ b/docs/rust/opendal/struct.Error.html
@@ -68,7 +68,7 @@ Backtrace:
 <p>By setting persistent, we indicate the retry should be stopped.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.kind" class="method"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#406-408">source</a><h4 class="code-header">pub fn <a href="#method.kind" class="fn">kind</a>(&amp;self) -&gt; <a class="enum" href="enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind</a></h4></section></summary><div class="docblock"><p>Return error’s kind.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.is_temporary" class="method"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#411-413">source</a><h4 class="code-header">pub fn <a href="#method.is_temporary" class="fn">is_temporary</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if this error is temporary.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#277-317">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="srclink rightside" href="../src/opendal/types/error.rs.html#277-317">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="http [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a hr [...]
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index 522bf76e8..78bfd5527 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -490,7 +490,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         .uri(signed_req.uri())
         .body(())<span class="question-mark">?</span>;
 </code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-3" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#48-273">source</a><a href="#impl-Operator-3" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-build-api"><a href="#operator [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-3" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#48-275">source</a><a href="#impl-Operator-3" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-build-api"><a href="#operator [...]
 <p>Operator should be built via <a href="struct.OperatorBuilder.html" title="struct opendal::OperatorBuilder"><code>OperatorBuilder</code></a>. We recommend to use <a href="struct.Operator.html#method.new" title="associated function opendal::Operator::new"><code>Operator::new</code></a> to get started:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::services::Fs;
@@ -558,7 +558,7 @@ type parameter which is not always easy to be used.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.via_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#154-236">source</a><h4 class="code-header">pub fn <a href="#method.via_map" class="fn">via_map</a>(scheme: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, map: <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/collections/hash/map/struct.HashMap.html" tit [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.via_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#154-238">source</a><h4 class="code-header">pub fn <a href="#method.via_map" class="fn">via_map</a>(scheme: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, map: <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/collections/hash/map/struct.HashMap.html" tit [...]
 <h5 id="notes-16"><a href="#notes-16">Notes</a></h5>
 <p>from_map is using static dispatch layers which is zero cost. via_map is
 using dynamic dispatch layers which has a bit runtime overhead with an
@@ -583,7 +583,7 @@ type parameter which is not always easy to be used.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#268-272">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;<a class="type" href="raw/type.FusedAccessor.html" title="type opendal::raw::FusedAccessor">FusedAccessor</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#270-274">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;<a class="type" href="raw/type.FusedAccessor.html" title="type opendal::raw::FusedAccessor">FusedAccessor</a [...]
 <h5 id="notes-17"><a href="#notes-17">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
diff --git a/docs/rust/opendal/struct.OperatorBuilder.html b/docs/rust/opendal/struct.OperatorBuilder.html
index 2e61da752..b5128dc0a 100644
--- a/docs/rust/opendal/struct.OperatorBuilder.html
+++ b/docs/rust/opendal/struct.OperatorBuilder.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="OperatorBuilder is a typed builder to build an Operator."><title>OperatorBuilder in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cro [...]
+<!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="OperatorBuilder is a typed builder to build an Operator."><title>OperatorBuilder in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cro [...]
 <h2 id="notes"><a href="#notes">Notes</a></h2>
 <p>OpenDAL uses static dispatch internally and only performs dynamic
 dispatch at the outmost type erase layer. OperatorBuilder is the only
@@ -35,8 +35,8 @@ public API provided by OpenDAL come with generic parameters.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorBuilder%3CA%3E" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#323-375">source</a><a href="#impl-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait"  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#364-368">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;A&gt;&gt;(self, layer: L) -&gt; <a class="struct" href="struct.OperatorBuilder.html" title="struct opendal:: [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorBuilder%3CA%3E" class="impl"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#325-377">source</a><a href="#impl-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait"  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#366-370">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;A&gt;&gt;(self, layer: L) -&gt; <a class="struct" href="struct.OperatorBuilder.html" title="struct opendal:: [...]
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
@@ -53,7 +53,7 @@ inline.</p>
     .finish();
 <span class="comment">// All operations will go through the new_layer
 </span><span class="kw">let _ </span>= op.read(<span class="string">&quot;test_file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.finish" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#371-374">source</a><h4 class="code-header">pub fn <a href="#method.finish" class="fn">finish</a>(self) -&gt; <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h4></section></summary><div class="docblock"><p>Finish the building to construct an Operator.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.finish" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#373-376">source</a><h4 class="code-header">pub fn <a href="#method.finish" class="fn">finish</a>(self) -&gt; <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h4></section></summary><div class="docblock"><p>Finish the building to construct an Operator.</p>
 </div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-OperatorBuilder%3CA%3E" class="impl"><a href="#impl-RefUnwindSafe-for-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A&gt; <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/panic/unwind [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-OperatorBuilder%3CA%3E" class="impl"><a href="#impl-Send-for-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A&gt; <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Send.html" title="trait core::marker::Send [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-OperatorBuilder%3CA%3E" cl [...]
diff --git a/docs/rust/opendal/struct.Reader.html b/docs/rust/opendal/struct.Reader.html
index 41f5a7d65..8620d473a 100644
--- a/docs/rust/opendal/struct.Reader.html
+++ b/docs/rust/opendal/struct.Reader.html
@@ -26,7 +26,7 @@ stream based (like services s3, azure which based on HTTP).</p>
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     bufs: &amp;mut [<a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/struct.IoSliceMut.html" title="struct std::io::IoSliceMut">IoSliceMut</a>&lt;'_&gt;]
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncRead-for-Reader-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#113-127">source</a><a href="#impl-AsyncRead-for-Reader-1" class="anchor">§</a><h3 class="code-header">impl AsyncRead for <a class="struct" href="struct.Reader.html" title="struct opendal::Reader">Reader</a></h3></section></summary><div class="im [...]
+IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncRead-for-Reader-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/reader.rs.html#113-127">source</a><a href="#impl-AsyncRead-for-Reader-1" class="anchor">§</a><h3 class="code-header">impl AsyncRead for <a class="struct" href="struct.Reader.html" title="struct opendal::Reader">Reader</a></h3></section></summary><div class="im [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;mut ReadBuf&lt;'_&gt;
@@ -37,7 +37,7 @@ IO operations. <a>Read more</a></div></details></div></details><details class="t
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/1.72.0/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more</a [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more</a [...]
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]
@@ -45,7 +45,7 @@ IO operations. <a>Read more</a></div></details></div></details><details class="t
     &amp;mut self,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/1.72.0/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Seek asynchronously. <a href="raw/oio/trait.Read.html#tymethod.poll_seek">Read more</a></div></details><details class="to [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Seek asynchronously. <a href="raw/oio/trait.Read.html#tymethod.poll_seek">Read more</a></div></details><details class="to [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::Item&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
diff --git a/docs/rust/opendal/struct.Writer.html b/docs/rust/opendal/struct.Writer.html
index 6356115f2..d21668419 100644
--- a/docs/rust/opendal/struct.Writer.html
+++ b/docs/rust/opendal/struct.Writer.html
@@ -89,28 +89,28 @@ aborted, otherwise an unexpected error could be returned.</p>
 <h6 id="notes-4"><a href="#notes-4">Notes</a></h6>
 <p>Close should only be called when the writer is not closed or
 aborted, otherwise an unexpected error could be returned.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#212-233">source</a><a href="#impl-AsyncWrite-for-Writer" class="anchor">§</a><h3 class="code-he [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#213-221">source</a><a href="#method.poll_write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write</a>(
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#235-255">source</a><a href="#impl-AsyncWrite-for-Writer" class="anchor">§</a><h3 class="code-he [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
+their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_shutdown" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#250-254">source</a><a href="#method.poll_shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_shutdown</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>& [...]
+the I/O connection has completely shut down. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write_vectored" class="method trait-impl"><a href="#method.poll_write_vectored" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write_vectored</a>(
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     bufs: &amp;[<a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'_&gt;]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#235-255">source</a><a href="#impl-AsyncWrite-for-Writer-1" class="anchor">§</a><h3 class="code-header">impl AsyncWrite for <a class="struct" href="struct.Writer.html" title="struct opendal::Writer">Writer</a></h3></section></summary><div class= [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
+implementation. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-Writer-1" class="impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#212-233">source</a><a href="#impl-AsyncWrite-for-Writer-1" class="anchor">§</a><h3 class="code-header">impl AsyncWrite for <a class="struct" href="struct.Writer.html" title="struct opendal::Writer">Writer</a></h3></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write-1" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#213-221">source</a><a href="#method.poll_write-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write</a>(
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
-their destination. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_shutdown" class="method trait-impl"><a class="srclink rightside" href="../src/opendal/types/writer.rs.html#250-254">source</a><a href="#method.poll_shutdown" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_shutdown</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>& [...]
-the I/O connection has completely shut down. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_write_vectored-1" class="method trait-impl"><a href="#method.poll_write_vectored-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_write_vectored</a>(
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/1.72.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to write bytes from <code>buf</code> into the object. <a [...]
     self: <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.72.0/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     bufs: &amp;[<a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'_&gt;]
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
-implementation. <a>Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-Writer" class="impl"><a href="#impl-RefUnwindSafe-for-Writer" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/tr [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.72.0/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.72.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.72.0/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/1.72.0/std/io/error/struct.Error.html" title="struct std::io::error::E [...]
+IO operations. <a>Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-Writer" class="impl"><a href="#impl-RefUnwindSafe-for-Writer" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/panic/unwind_safe/tra [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.72.0/src/core/any.rs.html#202">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     W: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.flush" class="method trait-impl"><a href="#method.flush" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) -&gt; Flush&lt;'_, Self&gt;<span class="where fmt-newline">where
     Self: <a class="trait" href="https://doc.rust-lang.org/1.72.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h4></section></summary><div class='docblock'>Creates a future which will entirely flush this <code>AsyncWrite</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.close-1" class="method trait-impl"><a href="#method.close-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 637500dc4..6d44d68f0 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -22,4 +22,4 @@ We also promise that every public API will provide detailed documentation.</p>
 </div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/1.72. [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.build" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(&amp;mut self) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.Builder.html#associatedtype.Accessor" title="type opendal::Builder::Acce [...]
 </div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Builder-for-()" class="impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#52-62">source</a><a href="#impl-Builder-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Builder.html" title="trait opendal::Bu [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index b2cd23da2..c32288edb 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = JSON.parse('{\
-"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNNDDDDINNDNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNDNNDENNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/source-files.js b/docs/rust/source-files.js
index 87d648b87..09417fe9e 100644
--- a/docs/rust/source-files.js
+++ b/docs/rust/source-files.js
@@ -1,4 +1,4 @@
 var sourcesIndex = JSON.parse('{\
-"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs"]],["raw",[["adapters", [...]
+"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs"]],["raw",[["adapters", [...]
 }');
 createSourceSidebar();
diff --git a/docs/rust/src/opendal/services/atomicserver/backend.rs.html b/docs/rust/src/opendal/services/atomicserver/backend.rs.html
new file mode 100644
index 000000000..b86097fd7
--- /dev/null
+++ b/docs/rust/src/opendal/services/atomicserver/backend.rs.html
@@ -0,0 +1,911 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/atomicserver/backend.rs`."><title>backend.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/wof [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</a>
+<a href="#64" id="64">64</a>
+<a href="#65" id="65">65</a>
+<a href="#66" id="66">66</a>
+<a href="#67" id="67">67</a>
+<a href="#68" id="68">68</a>
+<a href="#69" id="69">69</a>
+<a href="#70" id="70">70</a>
+<a href="#71" id="71">71</a>
+<a href="#72" id="72">72</a>
+<a href="#73" id="73">73</a>
+<a href="#74" id="74">74</a>
+<a href="#75" id="75">75</a>
+<a href="#76" id="76">76</a>
+<a href="#77" id="77">77</a>
+<a href="#78" id="78">78</a>
+<a href="#79" id="79">79</a>
+<a href="#80" id="80">80</a>
+<a href="#81" id="81">81</a>
+<a href="#82" id="82">82</a>
+<a href="#83" id="83">83</a>
+<a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</a>
+<a href="#93" id="93">93</a>
+<a href="#94" id="94">94</a>
+<a href="#95" id="95">95</a>
+<a href="#96" id="96">96</a>
+<a href="#97" id="97">97</a>
+<a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<a href="#104" id="104">104</a>
+<a href="#105" id="105">105</a>
+<a href="#106" id="106">106</a>
+<a href="#107" id="107">107</a>
+<a href="#108" id="108">108</a>
+<a href="#109" id="109">109</a>
+<a href="#110" id="110">110</a>
+<a href="#111" id="111">111</a>
+<a href="#112" id="112">112</a>
+<a href="#113" id="113">113</a>
+<a href="#114" id="114">114</a>
+<a href="#115" id="115">115</a>
+<a href="#116" id="116">116</a>
+<a href="#117" id="117">117</a>
+<a href="#118" id="118">118</a>
+<a href="#119" id="119">119</a>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<a href="#170" id="170">170</a>
+<a href="#171" id="171">171</a>
+<a href="#172" id="172">172</a>
+<a href="#173" id="173">173</a>
+<a href="#174" id="174">174</a>
+<a href="#175" id="175">175</a>
+<a href="#176" id="176">176</a>
+<a href="#177" id="177">177</a>
+<a href="#178" id="178">178</a>
+<a href="#179" id="179">179</a>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
+<a href="#186" id="186">186</a>
+<a href="#187" id="187">187</a>
+<a href="#188" id="188">188</a>
+<a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
+<a href="#204" id="204">204</a>
+<a href="#205" id="205">205</a>
+<a href="#206" id="206">206</a>
+<a href="#207" id="207">207</a>
+<a href="#208" id="208">208</a>
+<a href="#209" id="209">209</a>
+<a href="#210" id="210">210</a>
+<a href="#211" id="211">211</a>
+<a href="#212" id="212">212</a>
+<a href="#213" id="213">213</a>
+<a href="#214" id="214">214</a>
+<a href="#215" id="215">215</a>
+<a href="#216" id="216">216</a>
+<a href="#217" id="217">217</a>
+<a href="#218" id="218">218</a>
+<a href="#219" id="219">219</a>
+<a href="#220" id="220">220</a>
+<a href="#221" id="221">221</a>
+<a href="#222" id="222">222</a>
+<a href="#223" id="223">223</a>
+<a href="#224" id="224">224</a>
+<a href="#225" id="225">225</a>
+<a href="#226" id="226">226</a>
+<a href="#227" id="227">227</a>
+<a href="#228" id="228">228</a>
+<a href="#229" id="229">229</a>
+<a href="#230" id="230">230</a>
+<a href="#231" id="231">231</a>
+<a href="#232" id="232">232</a>
+<a href="#233" id="233">233</a>
+<a href="#234" id="234">234</a>
+<a href="#235" id="235">235</a>
+<a href="#236" id="236">236</a>
+<a href="#237" id="237">237</a>
+<a href="#238" id="238">238</a>
+<a href="#239" id="239">239</a>
+<a href="#240" id="240">240</a>
+<a href="#241" id="241">241</a>
+<a href="#242" id="242">242</a>
+<a href="#243" id="243">243</a>
+<a href="#244" id="244">244</a>
+<a href="#245" id="245">245</a>
+<a href="#246" id="246">246</a>
+<a href="#247" id="247">247</a>
+<a href="#248" id="248">248</a>
+<a href="#249" id="249">249</a>
+<a href="#250" id="250">250</a>
+<a href="#251" id="251">251</a>
+<a href="#252" id="252">252</a>
+<a href="#253" id="253">253</a>
+<a href="#254" id="254">254</a>
+<a href="#255" id="255">255</a>
+<a href="#256" id="256">256</a>
+<a href="#257" id="257">257</a>
+<a href="#258" id="258">258</a>
+<a href="#259" id="259">259</a>
+<a href="#260" id="260">260</a>
+<a href="#261" id="261">261</a>
+<a href="#262" id="262">262</a>
+<a href="#263" id="263">263</a>
+<a href="#264" id="264">264</a>
+<a href="#265" id="265">265</a>
+<a href="#266" id="266">266</a>
+<a href="#267" id="267">267</a>
+<a href="#268" id="268">268</a>
+<a href="#269" id="269">269</a>
+<a href="#270" id="270">270</a>
+<a href="#271" id="271">271</a>
+<a href="#272" id="272">272</a>
+<a href="#273" id="273">273</a>
+<a href="#274" id="274">274</a>
+<a href="#275" id="275">275</a>
+<a href="#276" id="276">276</a>
+<a href="#277" id="277">277</a>
+<a href="#278" id="278">278</a>
+<a href="#279" id="279">279</a>
+<a href="#280" id="280">280</a>
+<a href="#281" id="281">281</a>
+<a href="#282" id="282">282</a>
+<a href="#283" id="283">283</a>
+<a href="#284" id="284">284</a>
+<a href="#285" id="285">285</a>
+<a href="#286" id="286">286</a>
+<a href="#287" id="287">287</a>
+<a href="#288" id="288">288</a>
+<a href="#289" id="289">289</a>
+<a href="#290" id="290">290</a>
+<a href="#291" id="291">291</a>
+<a href="#292" id="292">292</a>
+<a href="#293" id="293">293</a>
+<a href="#294" id="294">294</a>
+<a href="#295" id="295">295</a>
+<a href="#296" id="296">296</a>
+<a href="#297" id="297">297</a>
+<a href="#298" id="298">298</a>
+<a href="#299" id="299">299</a>
+<a href="#300" id="300">300</a>
+<a href="#301" id="301">301</a>
+<a href="#302" id="302">302</a>
+<a href="#303" id="303">303</a>
+<a href="#304" id="304">304</a>
+<a href="#305" id="305">305</a>
+<a href="#306" id="306">306</a>
+<a href="#307" id="307">307</a>
+<a href="#308" id="308">308</a>
+<a href="#309" id="309">309</a>
+<a href="#310" id="310">310</a>
+<a href="#311" id="311">311</a>
+<a href="#312" id="312">312</a>
+<a href="#313" id="313">313</a>
+<a href="#314" id="314">314</a>
+<a href="#315" id="315">315</a>
+<a href="#316" id="316">316</a>
+<a href="#317" id="317">317</a>
+<a href="#318" id="318">318</a>
+<a href="#319" id="319">319</a>
+<a href="#320" id="320">320</a>
+<a href="#321" id="321">321</a>
+<a href="#322" id="322">322</a>
+<a href="#323" id="323">323</a>
+<a href="#324" id="324">324</a>
+<a href="#325" id="325">325</a>
+<a href="#326" id="326">326</a>
+<a href="#327" id="327">327</a>
+<a href="#328" id="328">328</a>
+<a href="#329" id="329">329</a>
+<a href="#330" id="330">330</a>
+<a href="#331" id="331">331</a>
+<a href="#332" id="332">332</a>
+<a href="#333" id="333">333</a>
+<a href="#334" id="334">334</a>
+<a href="#335" id="335">335</a>
+<a href="#336" id="336">336</a>
+<a href="#337" id="337">337</a>
+<a href="#338" id="338">338</a>
+<a href="#339" id="339">339</a>
+<a href="#340" id="340">340</a>
+<a href="#341" id="341">341</a>
+<a href="#342" id="342">342</a>
+<a href="#343" id="343">343</a>
+<a href="#344" id="344">344</a>
+<a href="#345" id="345">345</a>
+<a href="#346" id="346">346</a>
+<a href="#347" id="347">347</a>
+<a href="#348" id="348">348</a>
+<a href="#349" id="349">349</a>
+<a href="#350" id="350">350</a>
+<a href="#351" id="351">351</a>
+<a href="#352" id="352">352</a>
+<a href="#353" id="353">353</a>
+<a href="#354" id="354">354</a>
+<a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
+<a href="#359" id="359">359</a>
+<a href="#360" id="360">360</a>
+<a href="#361" id="361">361</a>
+<a href="#362" id="362">362</a>
+<a href="#363" id="363">363</a>
+<a href="#364" id="364">364</a>
+<a href="#365" id="365">365</a>
+<a href="#366" id="366">366</a>
+<a href="#367" id="367">367</a>
+<a href="#368" id="368">368</a>
+<a href="#369" id="369">369</a>
+<a href="#370" id="370">370</a>
+<a href="#371" id="371">371</a>
+<a href="#372" id="372">372</a>
+<a href="#373" id="373">373</a>
+<a href="#374" id="374">374</a>
+<a href="#375" id="375">375</a>
+<a href="#376" id="376">376</a>
+<a href="#377" id="377">377</a>
+<a href="#378" id="378">378</a>
+<a href="#379" id="379">379</a>
+<a href="#380" id="380">380</a>
+<a href="#381" id="381">381</a>
+<a href="#382" id="382">382</a>
+<a href="#383" id="383">383</a>
+<a href="#384" id="384">384</a>
+<a href="#385" id="385">385</a>
+<a href="#386" id="386">386</a>
+<a href="#387" id="387">387</a>
+<a href="#388" id="388">388</a>
+<a href="#389" id="389">389</a>
+<a href="#390" id="390">390</a>
+<a href="#391" id="391">391</a>
+<a href="#392" id="392">392</a>
+<a href="#393" id="393">393</a>
+<a href="#394" id="394">394</a>
+<a href="#395" id="395">395</a>
+<a href="#396" id="396">396</a>
+<a href="#397" id="397">397</a>
+<a href="#398" id="398">398</a>
+<a href="#399" id="399">399</a>
+<a href="#400" id="400">400</a>
+<a href="#401" id="401">401</a>
+<a href="#402" id="402">402</a>
+<a href="#403" id="403">403</a>
+<a href="#404" id="404">404</a>
+<a href="#405" id="405">405</a>
+<a href="#406" id="406">406</a>
+<a href="#407" id="407">407</a>
+<a href="#408" id="408">408</a>
+<a href="#409" id="409">409</a>
+<a href="#410" id="410">410</a>
+<a href="#411" id="411">411</a>
+<a href="#412" id="412">412</a>
+<a href="#413" id="413">413</a>
+<a href="#414" id="414">414</a>
+<a href="#415" id="415">415</a>
+<a href="#416" id="416">416</a>
+<a href="#417" id="417">417</a>
+<a href="#418" id="418">418</a>
+<a href="#419" id="419">419</a>
+<a href="#420" id="420">420</a>
+<a href="#421" id="421">421</a>
+<a href="#422" id="422">422</a>
+<a href="#423" id="423">423</a>
+<a href="#424" id="424">424</a>
+<a href="#425" id="425">425</a>
+<a href="#426" id="426">426</a>
+<a href="#427" id="427">427</a>
+<a href="#428" id="428">428</a>
+<a href="#429" id="429">429</a>
+<a href="#430" id="430">430</a>
+<a href="#431" id="431">431</a>
+<a href="#432" id="432">432</a>
+<a href="#433" id="433">433</a>
+<a href="#434" id="434">434</a>
+<a href="#435" id="435">435</a>
+<a href="#436" id="436">436</a>
+<a href="#437" id="437">437</a>
+<a href="#438" id="438">438</a>
+<a href="#439" id="439">439</a>
+<a href="#440" id="440">440</a>
+<a href="#441" id="441">441</a>
+<a href="#442" id="442">442</a>
+<a href="#443" id="443">443</a>
+<a href="#444" id="444">444</a>
+<a href="#445" id="445">445</a>
+<a href="#446" id="446">446</a>
+<a href="#447" id="447">447</a>
+<a href="#448" id="448">448</a>
+<a href="#449" id="449">449</a>
+<a href="#450" id="450">450</a>
+<a href="#451" id="451">451</a>
+<a href="#452" id="452">452</a>
+<a href="#453" id="453">453</a>
+<a href="#454" id="454">454</a>
+<a href="#455" id="455">455</a>
+</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// &quot;License&quot;); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="kw">use </span>bytes::Bytes;
+<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>async_trait::async_trait;
+<span class="kw">use </span>http::header::CONTENT_DISPOSITION;
+<span class="kw">use </span>http::header::CONTENT_TYPE;
+<span class="kw">use </span>http::Request;
+<span class="kw">use </span>serde::Deserialize;
+<span class="kw">use </span>serde::Serialize;
+
+<span class="kw">use </span>atomic_lib::agents::Agent;
+<span class="kw">use </span>atomic_lib::client::get_authentication_headers;
+<span class="kw">use </span>atomic_lib::commit::sign_message;
+
+<span class="kw">use </span><span class="kw">crate</span>::raw::adapters::kv;
+<span class="kw">use </span><span class="kw">crate</span>::raw::new_json_deserialize_error;
+<span class="kw">use </span><span class="kw">crate</span>::raw::new_json_serialize_error;
+<span class="kw">use </span><span class="kw">crate</span>::raw::new_request_build_error;
+<span class="kw">use </span><span class="kw">crate</span>::raw::normalize_path;
+<span class="kw">use </span><span class="kw">crate</span>::raw::normalize_root;
+<span class="kw">use </span><span class="kw">crate</span>::raw::percent_encode_path;
+<span class="kw">use </span><span class="kw">crate</span>::raw::AsyncBody;
+<span class="kw">use </span><span class="kw">crate</span>::raw::FormDataPart;
+<span class="kw">use </span><span class="kw">crate</span>::raw::HttpClient;
+<span class="kw">use </span><span class="kw">crate</span>::raw::Multipart;
+<span class="kw">use </span><span class="kw">crate</span>::Builder;
+<span class="kw">use </span><span class="kw">crate</span>::Scheme;
+<span class="kw">use crate</span>::<span class="kw-2">*</span>;
+
+<span class="doccomment">/// Atomicserver service support.
+</span><span class="attr">#[doc = <span class="macro">include_str!</span>(<span class="string">&quot;docs.md&quot;</span>)]
+#[derive(Default)]
+</span><span class="kw">pub struct </span>AtomicserverBuilder {
+    root: <span class="prelude-ty">Option</span>&lt;String&gt;,
+    endpoint: <span class="prelude-ty">Option</span>&lt;String&gt;,
+    private_key: <span class="prelude-ty">Option</span>&lt;String&gt;,
+    public_key: <span class="prelude-ty">Option</span>&lt;String&gt;,
+    parent_resource_id: <span class="prelude-ty">Option</span>&lt;String&gt;,
+}
+
+<span class="kw">impl </span>AtomicserverBuilder {
+    <span class="doccomment">/// Set the root for Atomicserver.
+    </span><span class="kw">pub fn </span>root(<span class="kw-2">&amp;mut </span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.root = <span class="prelude-val">Some</span>(path.into());
+        <span class="self">self
+    </span>}
+
+    <span class="doccomment">/// Set the server address for Atomicserver.
+    </span><span class="kw">pub fn </span>endpoint(<span class="kw-2">&amp;mut </span><span class="self">self</span>, endpoint: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.endpoint = <span class="prelude-val">Some</span>(endpoint.into());
+        <span class="self">self
+    </span>}
+
+    <span class="doccomment">/// Set the private key for agent used for Atomicserver.
+    </span><span class="kw">pub fn </span>private_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>, private_key: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.private_key = <span class="prelude-val">Some</span>(private_key.into());
+        <span class="self">self
+    </span>}
+
+    <span class="doccomment">/// Set the public key for agent used for Atomicserver.
+    /// For example, if the subject URL for the agent being used
+    /// is ${endpoint}/agents/lTB+W3C/2YfDu9IAVleEy34uCmb56iXXuzWCKBVwdRI=
+    /// Then the required public key is `lTB+W3C/2YfDu9IAVleEy34uCmb56iXXuzWCKBVwdRI=`
+    </span><span class="kw">pub fn </span>public_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>, public_key: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.public_key = <span class="prelude-val">Some</span>(public_key.into());
+        <span class="self">self
+    </span>}
+
+    <span class="doccomment">/// Set the parent resource id (url) that Atomicserver uses to store resources under.
+    </span><span class="kw">pub fn </span>parent_resource_id(<span class="kw-2">&amp;mut </span><span class="self">self</span>, parent_resource_id: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
+        <span class="self">self</span>.parent_resource_id = <span class="prelude-val">Some</span>(parent_resource_id.into());
+        <span class="self">self
+    </span>}
+}
+
+<span class="kw">impl </span>Builder <span class="kw">for </span>AtomicserverBuilder {
+    <span class="kw">const </span>SCHEME: Scheme = Scheme::Atomicserver;
+    <span class="kw">type </span>Accessor = AtomicserverBackend;
+
+    <span class="kw">fn </span>from_map(map: HashMap&lt;String, String&gt;) -&gt; <span class="self">Self </span>{
+        <span class="kw">let </span><span class="kw-2">mut </span>builder = AtomicserverBuilder::default();
+
+        map.get(<span class="string">&quot;root&quot;</span>).map(|v| builder.root(v));
+        map.get(<span class="string">&quot;endpoint&quot;</span>).map(|v| builder.endpoint(v));
+        map.get(<span class="string">&quot;private_key&quot;</span>).map(|v| builder.private_key(v));
+        map.get(<span class="string">&quot;public_key&quot;</span>).map(|v| builder.public_key(v));
+        map.get(<span class="string">&quot;parent_resource_id&quot;</span>)
+            .map(|v| builder.parent_resource_id(v));
+
+        builder
+    }
+
+    <span class="kw">fn </span>build(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="self">Self</span>::Accessor&gt; {
+        <span class="kw">let </span>root = normalize_root(
+            <span class="self">self</span>.root
+                .clone()
+                .unwrap_or_else(|| <span class="string">&quot;/&quot;</span>.to_string())
+                .as_str(),
+        );
+
+        <span class="kw">let </span>endpoint = <span class="self">self</span>.endpoint.clone().unwrap();
+        <span class="kw">let </span>parent_resource_id = <span class="self">self</span>.parent_resource_id.clone().unwrap();
+
+        <span class="kw">let </span>agent = Agent {
+            private_key: <span class="self">self</span>.private_key.clone(),
+            public_key: <span class="self">self</span>.public_key.clone().unwrap(),
+            subject: <span class="macro">format!</span>(<span class="string">&quot;{}/agents/{}&quot;</span>, endpoint, <span class="self">self</span>.public_key.clone().unwrap()),
+            created_at: <span class="number">1</span>,
+            name: <span class="prelude-val">Some</span>(<span class="string">&quot;agent&quot;</span>.to_string()),
+        };
+
+        <span class="prelude-val">Ok</span>(AtomicserverBackend::new(Adapter {
+            parent_resource_id,
+            endpoint,
+            agent,
+            client: HttpClient::new().map_err(|err| {
+                err.with_operation(<span class="string">&quot;Builder::build&quot;</span>)
+                    .with_context(<span class="string">&quot;service&quot;</span>, Scheme::Atomicserver)
+            })<span class="question-mark">?</span>,
+        })
+        .with_root(<span class="kw-2">&amp;</span>root))
+    }
+}
+
+<span class="doccomment">/// Backend for Atomicserver services.
+</span><span class="kw">pub type </span>AtomicserverBackend = kv::Backend&lt;Adapter&gt;;
+
+<span class="kw">const </span>FILENAME_PROPERTY: <span class="kw-2">&amp;</span>str = <span class="string">&quot;https://atomicdata.dev/properties/filename&quot;</span>;
+
+<span class="attr">#[derive(Debug, Serialize)]
+</span><span class="kw">struct </span>CommitStruct {
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/createdAt&quot;</span>)]
+    </span>created_at: i64,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/destroy&quot;</span>)]
+    </span>destroy: bool,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/isA&quot;</span>)]
+    </span>is_a: Vec&lt;String&gt;,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/signer&quot;</span>)]
+    </span>signer: String,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/subject&quot;</span>)]
+    </span>subject: String,
+}
+
+<span class="attr">#[derive(Debug, Serialize)]
+</span><span class="kw">struct </span>CommitStructSigned {
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/createdAt&quot;</span>)]
+    </span>created_at: i64,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/destroy&quot;</span>)]
+    </span>destroy: bool,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/isA&quot;</span>)]
+    </span>is_a: Vec&lt;String&gt;,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/signature&quot;</span>)]
+    </span>signature: String,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/signer&quot;</span>)]
+    </span>signer: String,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/subject&quot;</span>)]
+    </span>subject: String,
+}
+
+<span class="attr">#[derive(Debug, Deserialize)]
+</span><span class="kw">struct </span>FileStruct {
+    <span class="attr">#[serde(rename = <span class="string">&quot;@id&quot;</span>)]
+    </span>id: String,
+    <span class="attr">#[serde(rename = <span class="string">&quot;https://atomicdata.dev/properties/downloadURL&quot;</span>)]
+    </span>download_url: String,
+}
+
+<span class="attr">#[derive(Debug, Deserialize)]
+</span><span class="kw">struct </span>QueryResultStruct {
+    <span class="attr">#[serde(
+        rename = <span class="string">&quot;https://atomicdata.dev/properties/endpoint/results&quot;</span>,
+        default = <span class="string">&quot;empty_vec&quot;
+    </span>)]
+    </span>results: Vec&lt;FileStruct&gt;,
+}
+
+<span class="kw">fn </span>empty_vec() -&gt; Vec&lt;FileStruct&gt; {
+    Vec::new()
+}
+
+<span class="attr">#[derive(Clone)]
+</span><span class="kw">pub struct </span>Adapter {
+    parent_resource_id: String,
+    endpoint: String,
+    agent: Agent,
+    client: HttpClient,
+}
+
+<span class="kw">impl </span>Debug <span class="kw">for </span>Adapter {
+    <span class="kw">fn </span>fmt(<span class="kw-2">&amp;</span><span class="self">self</span>, f: <span class="kw-2">&amp;mut </span>Formatter&lt;<span class="lifetime">&#39;_</span>&gt;) -&gt; std::fmt::Result {
+        <span class="kw">let </span><span class="kw-2">mut </span>ds = f.debug_struct(<span class="string">&quot;Adapter&quot;</span>);
+        ds.finish()
+    }
+}
+
+<span class="kw">impl </span>Adapter {
+    <span class="kw">fn </span>sign(<span class="kw-2">&amp;</span><span class="self">self</span>, url: <span class="kw-2">&amp;</span>str, <span class="kw-2">mut </span>req: http::request::Builder) -&gt; http::request::Builder {
+        <span class="kw">let </span>auth_headers = get_authentication_headers(url, <span class="kw-2">&amp;</span><span class="self">self</span>.agent)
+            .map_err(|err| {
+                Error::new(
+                    ErrorKind::Unexpected,
+                    <span class="string">&quot;Failed to get authentication headers&quot;</span>,
+                )
+                .with_context(<span class="string">&quot;service&quot;</span>, Scheme::Atomicserver)
+                .set_source(err)
+            })
+            .unwrap();
+
+        <span class="kw">for </span>(k, v) <span class="kw">in </span><span class="kw-2">&amp;</span>auth_headers {
+            req = req.header(k, v);
+        }
+
+        req
+    }
+}
+
+<span class="kw">impl </span>Adapter {
+    <span class="kw">pub fn </span>atomic_get_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
+        <span class="kw">let </span>path = normalize_path(path);
+        <span class="kw">let </span>path = path.as_str();
+
+        <span class="kw">let </span>filename_property_escaped = FILENAME_PROPERTY.replace(<span class="string">&#39;:&#39;</span>, <span class="string">&quot;\\:&quot;</span>).replace(<span class="string">&#39;.&#39;</span>, <span class="string">&quot;\\.&quot;</span>);
+        <span class="kw">let </span>url = <span class="macro">format!</span>(
+            <span class="string">&quot;{}/search?filters={}:%22{}%22&quot;</span>,
+            <span class="self">self</span>.endpoint,
+            percent_encode_path(<span class="kw-2">&amp;</span>filename_property_escaped),
+            percent_encode_path(path)
+        );
+
+        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url);
+        req = <span class="self">self</span>.sign(<span class="kw-2">&amp;</span>url, req);
+        req = req.header(http::header::ACCEPT, <span class="string">&quot;application/ad+json&quot;</span>);
+
+        <span class="kw">let </span>req = req
+            .body(AsyncBody::Empty)
+            .map_err(new_request_build_error)<span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(req)
+    }
+
+    <span class="kw">async fn </span>atomic_post_object_request(
+        <span class="kw-2">&amp;</span><span class="self">self</span>,
+        path: <span class="kw-2">&amp;</span>str,
+        value: <span class="kw-2">&amp;</span>[u8],
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
+        <span class="kw">let </span>path = normalize_path(path);
+        <span class="kw">let </span>path = path.as_str();
+
+        <span class="kw">let </span>url = <span class="macro">format!</span>(
+            <span class="string">&quot;{}/upload?parent={}&quot;</span>,
+            <span class="self">self</span>.endpoint,
+            percent_encode_path(<span class="kw-2">&amp;</span><span class="self">self</span>.parent_resource_id)
+        );
+
+        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::post(<span class="kw-2">&amp;</span>url);
+        req = <span class="self">self</span>.sign(<span class="kw-2">&amp;</span>url, req);
+
+        <span class="kw">let </span>datapart = FormDataPart::new(<span class="string">&quot;assets&quot;</span>)
+            .header(
+                CONTENT_DISPOSITION,
+                <span class="macro">format!</span>(<span class="string">&quot;form-data; name=\&quot;assets\&quot;; filename=\&quot;{}\&quot;&quot;</span>, path)
+                    .parse()
+                    .unwrap(),
+            )
+            .header(CONTENT_TYPE, <span class="string">&quot;text/plain&quot;</span>.parse().unwrap())
+            .content(value.to_vec());
+
+        <span class="kw">let </span>multipart = Multipart::new().part(datapart);
+        <span class="kw">let </span>req = multipart.apply(req)<span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(req)
+    }
+
+    <span class="kw">pub fn </span>atomic_delete_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, subject: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
+        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/commit&quot;</span>, <span class="self">self</span>.endpoint);
+
+        <span class="kw">let </span>timestamp = std::time::SystemTime::now()
+            .duration_since(std::time::UNIX_EPOCH)
+            .expect(<span class="string">&quot;You&#39;re a time traveler&quot;</span>)
+            .as_millis() <span class="kw">as </span>i64;
+
+        <span class="kw">let </span>commit_to_sign = CommitStruct {
+            created_at: timestamp,
+            destroy: <span class="bool-val">true</span>,
+            is_a: [<span class="string">&quot;https://atomicdata.dev/classes/Commit&quot;</span>.to_string()].to_vec(),
+            signer: <span class="self">self</span>.agent.subject.to_string(),
+            subject: subject.to_string().clone(),
+        };
+        <span class="kw">let </span>commit_sign_string =
+            serde_json::to_string(<span class="kw-2">&amp;</span>commit_to_sign).map_err(new_json_serialize_error)<span class="question-mark">?</span>;
+
+        <span class="kw">let </span>signature = sign_message(
+            <span class="kw-2">&amp;</span>commit_sign_string,
+            <span class="self">self</span>.agent.private_key.as_ref().unwrap(),
+            <span class="kw-2">&amp;</span><span class="self">self</span>.agent.public_key,
+        )
+        .unwrap();
+
+        <span class="kw">let </span>commit = CommitStructSigned {
+            created_at: timestamp,
+            destroy: <span class="bool-val">true</span>,
+            is_a: [<span class="string">&quot;https://atomicdata.dev/classes/Commit&quot;</span>.to_string()].to_vec(),
+            signature,
+            signer: <span class="self">self</span>.agent.subject.to_string(),
+            subject: subject.to_string().clone(),
+        };
+
+        <span class="kw">let </span>req = Request::post(<span class="kw-2">&amp;</span>url);
+        <span class="kw">let </span>body_string = serde_json::to_string(<span class="kw-2">&amp;</span>commit).map_err(new_json_serialize_error)<span class="question-mark">?</span>;
+
+        <span class="kw">let </span>body_bytes = body_string.as_bytes().to_owned();
+        <span class="kw">let </span>req = req
+            .body(AsyncBody::Bytes(body_bytes.into()))
+            .map_err(new_request_build_error)<span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(req)
+    }
+
+    <span class="kw">pub async fn </span>download_from_url(<span class="kw-2">&amp;</span><span class="self">self</span>, download_url: <span class="kw-2">&amp;</span>String) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
+        <span class="kw">let </span>req = Request::get(download_url);
+        <span class="kw">let </span>req = req
+            .body(AsyncBody::Empty)
+            .map_err(new_request_build_error)<span class="question-mark">?</span>;
+        <span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>bytes_file = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(bytes_file)
+    }
+}
+
+<span class="kw">impl </span>Adapter {
+    <span class="kw">async fn </span>wait_for_resource(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, expect_exist: bool) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="comment">// This is used to wait until insert/delete is actually effective
+        // This wait function is needed because atomicserver commits are not processed in real-time
+        // See https://docs.atomicdata.dev/commits/intro.html#motivation
+        </span><span class="kw">for </span>_i <span class="kw">in </span><span class="number">0</span>..<span class="number">1000 </span>{
+            <span class="kw">let </span>req = <span class="self">self</span>.atomic_get_object_request(path)<span class="question-mark">?</span>;
+            <span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+            <span class="kw">let </span>bytes = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+            <span class="kw">let </span>query_result: QueryResultStruct =
+                serde_json::from_str(std::str::from_utf8(<span class="kw-2">&amp;</span>bytes).unwrap())
+                    .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+            <span class="kw">if </span>!expect_exist &amp;&amp; query_result.results.is_empty() {
+                <span class="kw">break</span>;
+            }
+            <span class="kw">if </span>expect_exist &amp;&amp; !query_result.results.is_empty() {
+                <span class="kw">break</span>;
+            }
+            std::thread::sleep(std::time::Duration::from_millis(<span class="number">30</span>));
+        }
+
+        <span class="prelude-val">Ok</span>(())
+    }
+}
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl </span>kv::Adapter <span class="kw">for </span>Adapter {
+    <span class="kw">fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; kv::Metadata {
+        kv::Metadata::new(
+            Scheme::Atomicserver,
+            <span class="string">&quot;atomicserver&quot;</span>,
+            Capability {
+                read: <span class="bool-val">true</span>,
+                write: <span class="bool-val">true</span>,
+                delete: <span class="bool-val">true</span>,
+                create_dir: <span class="bool-val">true</span>,
+                ..Default::default()
+            },
+        )
+    }
+
+    <span class="kw">async fn </span>get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;u8&gt;&gt;&gt; {
+        <span class="kw">let </span>req = <span class="self">self</span>.atomic_get_object_request(path)<span class="question-mark">?</span>;
+        <span class="kw">let </span>resp = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>bytes = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>query_result: QueryResultStruct =
+            serde_json::from_str(std::str::from_utf8(<span class="kw-2">&amp;</span>bytes).unwrap())
+                .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+        <span class="kw">if </span>query_result.results.is_empty() {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::NotFound,
+                <span class="string">&quot;atomicserver: key not found&quot;</span>,
+            ));
+        }
+
+        <span class="kw">let </span>bytes_file = <span class="self">self
+            </span>.download_from_url(<span class="kw-2">&amp;</span>query_result.results[<span class="number">0</span>].download_url)
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(bytes_file.to_vec()))
+    }
+
+    <span class="kw">async fn </span>set(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, value: <span class="kw-2">&amp;</span>[u8]) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>req = <span class="self">self</span>.atomic_get_object_request(path)<span class="question-mark">?</span>;
+        <span class="kw">let </span>res = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>bytes = res.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>query_result: QueryResultStruct =
+            serde_json::from_str(std::str::from_utf8(<span class="kw-2">&amp;</span>bytes).unwrap())
+                .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+        <span class="kw">for </span>result <span class="kw">in </span>query_result.results {
+            <span class="kw">let </span>req = <span class="self">self</span>.atomic_delete_object_request(<span class="kw-2">&amp;</span>result.id)<span class="question-mark">?</span>;
+            <span class="kw">let </span>_res = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        }
+
+        <span class="kw">let _ </span>= <span class="self">self</span>.wait_for_resource(path, <span class="bool-val">false</span>).<span class="kw">await</span>;
+
+        <span class="kw">let </span>req = <span class="self">self</span>.atomic_post_object_request(path, value).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>_res = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let _ </span>= <span class="self">self</span>.wait_for_resource(path, <span class="bool-val">true</span>).<span class="kw">await</span>;
+
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="kw">async fn </span>delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>req = <span class="self">self</span>.atomic_get_object_request(path)<span class="question-mark">?</span>;
+        <span class="kw">let </span>res = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>bytes = res.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">let </span>query_result: QueryResultStruct =
+            serde_json::from_str(std::str::from_utf8(<span class="kw-2">&amp;</span>bytes).unwrap())
+                .map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+        <span class="kw">for </span>result <span class="kw">in </span>query_result.results {
+            <span class="kw">let </span>req = <span class="self">self</span>.atomic_delete_object_request(<span class="kw-2">&amp;</span>result.id)<span class="question-mark">?</span>;
+            <span class="kw">let </span>_res = <span class="self">self</span>.client.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
+        }
+
+        <span class="kw">let _ </span>= <span class="self">self</span>.wait_for_resource(path, <span class="bool-val">false</span>).<span class="kw">await</span>;
+
+        <span class="prelude-val">Ok</span>(())
+    }
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/atomicserver/mod.rs.html b/docs/rust/src/opendal/services/atomicserver/mod.rs.html
new file mode 100644
index 000000000..0d94e4dcb
--- /dev/null
+++ b/docs/rust/src/opendal/services/atomicserver/mod.rs.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/atomicserver/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cros [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// &quot;License&quot;); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="kw">mod </span>backend;
+
+<span class="kw">pub use </span>backend::AtomicserverBuilder <span class="kw">as </span>Atomicserver;
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/gcs/backend.rs.html b/docs/rust/src/opendal/services/gcs/backend.rs.html
index 690b52f67..142bd0f95 100644
--- a/docs/rust/src/opendal/services/gcs/backend.rs.html
+++ b/docs/rust/src/opendal/services/gcs/backend.rs.html
@@ -626,20 +626,6 @@
 <a href="#626" id="626">626</a>
 <a href="#627" id="627">627</a>
 <a href="#628" id="628">628</a>
-<a href="#629" id="629">629</a>
-<a href="#630" id="630">630</a>
-<a href="#631" id="631">631</a>
-<a href="#632" id="632">632</a>
-<a href="#633" id="633">633</a>
-<a href="#634" id="634">634</a>
-<a href="#635" id="635">635</a>
-<a href="#636" id="636">636</a>
-<a href="#637" id="637">637</a>
-<a href="#638" id="638">638</a>
-<a href="#639" id="639">639</a>
-<a href="#640" id="640">640</a>
-<a href="#641" id="641">641</a>
-<a href="#642" id="642">642</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
@@ -1027,10 +1013,7 @@
     }
 
     <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
-        <span class="kw">let </span>resp = <span class="self">self
-            </span>.core
-            .gcs_get_object(path, args.range(), args.if_match(), args.if_none_match())
-            .<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>resp = <span class="self">self</span>.core.gcs_get_object(path, <span class="kw-2">&amp;</span>args).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="kw">if </span>resp.status().is_success() {
             <span class="kw">let </span>meta = parse_into_metadata(path, resp.headers())<span class="question-mark">?</span>;
@@ -1064,10 +1047,7 @@
             <span class="kw">return </span><span class="prelude-val">Ok</span>(RpStat::new(Metadata::new(EntryMode::DIR)));
         }
 
-        <span class="kw">let </span>resp = <span class="self">self
-            </span>.core
-            .gcs_get_object_metadata(path, args.if_match(), args.if_none_match())
-            .<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>resp = <span class="self">self</span>.core.gcs_get_object_metadata(path, <span class="kw-2">&amp;</span>args).<span class="kw">await</span><span class="question-mark">?</span>;
 
         <span class="kw">if </span>resp.status().is_success() {
             <span class="comment">// read http response body
@@ -1191,19 +1171,11 @@
     <span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
         <span class="comment">// We will not send this request out, just for signing.
         </span><span class="kw">let </span><span class="kw-2">mut </span>req = <span class="kw">match </span>args.operation() {
-            PresignOperation::Stat(v) =&gt; {
+            PresignOperation::Stat(v) =&gt; <span class="self">self</span>.core.gcs_head_object_xml_request(path, v)<span class="question-mark">?</span>,
+            PresignOperation::Read(v) =&gt; <span class="self">self</span>.core.gcs_get_object_xml_request(path, v)<span class="question-mark">?</span>,
+            PresignOperation::Write(v) =&gt; {
                 <span class="self">self</span>.core
-                    .gcs_head_object_xml_request(path, v.if_match(), v.if_none_match())<span class="question-mark">?
-            </span>}
-            PresignOperation::Read(v) =&gt; <span class="self">self</span>.core.gcs_get_object_xml_request(
-                path,
-                v.range(),
-                v.if_match(),
-                v.if_none_match(),
-            )<span class="question-mark">?</span>,
-            PresignOperation::Write(<span class="kw">_</span>) =&gt; {
-                <span class="self">self</span>.core
-                    .gcs_insert_object_xml_request(path, <span class="prelude-val">None</span>, AsyncBody::Empty)<span class="question-mark">?
+                    .gcs_insert_object_xml_request(path, v, AsyncBody::Empty)<span class="question-mark">?
             </span>}
         };
 
diff --git a/docs/rust/src/opendal/services/gcs/core.rs.html b/docs/rust/src/opendal/services/gcs/core.rs.html
index 2694bce62..fdcec3d8f 100644
--- a/docs/rust/src/opendal/services/gcs/core.rs.html
+++ b/docs/rust/src/opendal/services/gcs/core.rs.html
@@ -597,23 +597,6 @@
 <a href="#597" id="597">597</a>
 <a href="#598" id="598">598</a>
 <a href="#599" id="599">599</a>
-<a href="#600" id="600">600</a>
-<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>
-<a href="#607" id="607">607</a>
-<a href="#608" id="608">608</a>
-<a href="#609" id="609">609</a>
-<a href="#610" id="610">610</a>
-<a href="#611" id="611">611</a>
-<a href="#612" id="612">612</a>
-<a href="#613" id="613">613</a>
-<a href="#614" id="614">614</a>
-<a href="#615" id="615">615</a>
-<a href="#616" id="616">616</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
@@ -762,13 +745,7 @@
 }
 
 <span class="kw">impl </span>GcsCore {
-    <span class="kw">pub fn </span>gcs_get_object_request(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        range: BytesRange,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
+    <span class="kw">pub fn </span>gcs_get_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: <span class="kw-2">&amp;</span>OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
         <span class="kw">let </span>url = <span class="macro">format!</span>(
@@ -780,14 +757,14 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url);
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = if_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = args.if_match() {
             req = req.header(IF_MATCH, if_match);
         }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = if_none_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = args.if_none_match() {
             req = req.header(IF_NONE_MATCH, if_none_match);
         }
-        <span class="kw">if </span>!range.is_full() {
-            req = req.header(http::header::RANGE, range.to_header());
+        <span class="kw">if </span>!args.range().is_full() {
+            req = req.header(http::header::RANGE, args.range().to_header());
         }
 
         <span class="kw">let </span>req = req
@@ -801,9 +778,7 @@
     </span><span class="kw">pub fn </span>gcs_get_object_xml_request(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        range: BytesRange,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+        args: <span class="kw-2">&amp;</span>OpRead,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
@@ -811,14 +786,14 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url);
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = if_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = args.if_match() {
             req = req.header(IF_MATCH, if_match);
         }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = if_none_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = args.if_none_match() {
             req = req.header(IF_NONE_MATCH, if_none_match);
         }
-        <span class="kw">if </span>!range.is_full() {
-            req = req.header(http::header::RANGE, range.to_header());
+        <span class="kw">if </span>!args.range().is_full() {
+            req = req.header(http::header::RANGE, args.range().to_header());
         }
 
         <span class="kw">let </span>req = req
@@ -831,11 +806,9 @@
     <span class="kw">pub async fn </span>gcs_get_object(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        range: BytesRange,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+        args: <span class="kw-2">&amp;</span>OpRead,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.gcs_get_object_request(path, range, if_match, if_none_match)<span class="question-mark">?</span>;
+        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.gcs_get_object_request(path, args)<span class="question-mark">?</span>;
 
         <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
         <span class="self">self</span>.send(req).<span class="kw">await
@@ -932,7 +905,7 @@
     </span><span class="kw">pub fn </span>gcs_insert_object_xml_request(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        content_type: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+        args: <span class="kw-2">&amp;</span>OpWrite,
         body: AsyncBody,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
@@ -941,7 +914,7 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>url);
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(content_type) = content_type {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(content_type) = args.content_type() {
             req = req.header(CONTENT_TYPE, content_type);
         }
 
@@ -958,12 +931,7 @@
         <span class="prelude-val">Ok</span>(req)
     }
 
-    <span class="kw">pub fn </span>gcs_head_object_request(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
+    <span class="kw">pub fn </span>gcs_head_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: <span class="kw-2">&amp;</span>OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
         <span class="kw">let </span>url = <span class="macro">format!</span>(
@@ -975,11 +943,11 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url);
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = if_none_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = args.if_none_match() {
             req = req.header(IF_NONE_MATCH, if_none_match);
         }
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = if_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = args.if_match() {
             req = req.header(IF_MATCH, if_match);
         }
 
@@ -994,8 +962,7 @@
     </span><span class="kw">pub fn </span>gcs_head_object_xml_request(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+        args: <span class="kw-2">&amp;</span>OpStat,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
         <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
 
@@ -1003,11 +970,11 @@
 
         <span class="kw">let </span><span class="kw-2">mut </span>req = Request::head(<span class="kw-2">&amp;</span>url);
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = if_none_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = args.if_none_match() {
             req = req.header(IF_NONE_MATCH, if_none_match);
         }
 
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = if_match {
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_match) = args.if_match() {
             req = req.header(IF_MATCH, if_match);
         }
 
@@ -1021,10 +988,9 @@
     <span class="kw">pub async fn </span>gcs_get_object_metadata(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
         path: <span class="kw-2">&amp;</span>str,
-        if_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-        if_none_match: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+        args: <span class="kw-2">&amp;</span>OpStat,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.gcs_head_object_request(path, if_match, if_none_match)<span class="question-mark">?</span>;
+        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.gcs_head_object_request(path, args)<span class="question-mark">?</span>;
 
         <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
 
diff --git a/docs/rust/src/opendal/services/mod.rs.html b/docs/rust/src/opendal/services/mod.rs.html
index 464e4f8be..eb49cba86 100644
--- a/docs/rust/src/opendal/services/mod.rs.html
+++ b/docs/rust/src/opendal/services/mod.rs.html
@@ -208,6 +208,11 @@
 <a href="#208" id="208">208</a>
 <a href="#209" id="209">209</a>
 <a href="#210" id="210">210</a>
+<a href="#211" id="211">211</a>
+<a href="#212" id="212">212</a>
+<a href="#213" id="213">213</a>
+<a href="#214" id="214">214</a>
+<a href="#215" id="215">215</a>
 </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
@@ -418,4 +423,9 @@
 </span><span class="kw">mod </span>postgresql;
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-postgresql&quot;</span>)]
 </span><span class="kw">pub use </span><span class="self">self</span>::postgresql::Postgresql;
+
+<span class="attr">#[cfg(feature = <span class="string">&quot;services-atomicserver&quot;</span>)]
+</span><span class="kw">mod </span>atomicserver;
+<span class="attr">#[cfg(feature = <span class="string">&quot;services-atomicserver&quot;</span>)]
+</span><span class="kw">pub use </span><span class="self">self</span>::atomicserver::Atomicserver;
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/operator/builder.rs.html b/docs/rust/src/opendal/types/operator/builder.rs.html
index 4a5946d17..6cba30b2d 100644
--- a/docs/rust/src/opendal/types/operator/builder.rs.html
+++ b/docs/rust/src/opendal/types/operator/builder.rs.html
@@ -373,6 +373,8 @@
 <a href="#373" id="373">373</a>
 <a href="#374" id="374">374</a>
 <a href="#375" id="375">375</a>
+<a href="#376" id="376">376</a>
+<a href="#377" id="377">377</a>
 </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
@@ -528,6 +530,8 @@
     /// ```
     </span><span class="kw">pub fn </span>via_map(scheme: Scheme, map: HashMap&lt;String, String&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Operator&gt; {
         <span class="kw">let </span>op = <span class="kw">match </span>scheme {
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-atomicserver&quot;</span>)]
+            </span>Scheme::Atomicserver =&gt; <span class="self">Self</span>::from_map::&lt;services::Atomicserver&gt;(map)<span class="question-mark">?</span>.finish(),
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-azblob&quot;</span>)]
             </span>Scheme::Azblob =&gt; <span class="self">Self</span>::from_map::&lt;services::Azblob&gt;(map)<span class="question-mark">?</span>.finish(),
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-Azdls&quot;</span>)]
diff --git a/docs/rust/src/opendal/types/scheme.rs.html b/docs/rust/src/opendal/types/scheme.rs.html
index 32a55c2e3..30ba4d6be 100644
--- a/docs/rust/src/opendal/types/scheme.rs.html
+++ b/docs/rust/src/opendal/types/scheme.rs.html
@@ -239,6 +239,10 @@
 <a href="#239" id="239">239</a>
 <a href="#240" id="240">240</a>
 <a href="#241" id="241">241</a>
+<a href="#242" id="242">242</a>
+<a href="#243" id="243">243</a>
+<a href="#244" id="244">244</a>
+<a href="#245" id="245">245</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
@@ -272,6 +276,8 @@
 </span><span class="attr">#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
 #[non_exhaustive]
 </span><span class="kw">pub enum </span>Scheme {
+    <span class="doccomment">/// [atomicserver][crate::services::Atomicserver]: Atomicserver services.
+    </span>Atomicserver,
     <span class="doccomment">/// [azblob][crate::services::Azblob]: Azure Storage Blob services.
     </span>Azblob,
     <span class="doccomment">/// [Azdls][crate::services::Azdls]: Azure Data Lake Storage Gen2.
@@ -383,6 +389,7 @@
     <span class="kw">fn </span>from_str(s: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="self">Self</span>, <span class="self">Self</span>::Err&gt; {
         <span class="kw">let </span>s = s.to_lowercase();
         <span class="kw">match </span>s.as_str() {
+            <span class="string">&quot;atomicserver&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Atomicserver),
             <span class="string">&quot;azblob&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Azblob),
             <span class="comment">// Notes:
             //
@@ -432,6 +439,7 @@
 <span class="kw">impl </span>From&lt;Scheme&gt; <span class="kw">for </span><span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str {
     <span class="kw">fn </span>from(v: Scheme) -&gt; <span class="self">Self </span>{
         <span class="kw">match </span>v {
+            Scheme::Atomicserver =&gt; <span class="string">&quot;atomicserver&quot;</span>,
             Scheme::Azblob =&gt; <span class="string">&quot;azblob&quot;</span>,
             Scheme::Azdls =&gt; <span class="string">&quot;Azdls&quot;</span>,
             Scheme::Cacache =&gt; <span class="string">&quot;cacache&quot;</span>,
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index a34ada88e..59b356f14 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azblob | 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/services/azblob"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azdls/index.html b/docs/services/azdls/index.html
index 7f7eaeec0..4e2c0e959 100644
--- a/docs/services/azdls/index.html
+++ b/docs/services/azdls/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azdls | 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/services/azdls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index c2c892d66..3bcf27dcd 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">COS | 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/services/cos"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 210512101..00b8c35af 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">DashMap | 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/services/dashmap"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dropbox/index.html b/docs/services/dropbox/index.html
index a8a6f234c..37406a43e 100644
--- a/docs/services/dropbox/index.html
+++ b/docs/services/dropbox/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Dropbox | 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/services/dropbox"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -15,8 +15,8 @@ Please notice its expiration.</li></ul><h4 class="anchor anchorWithStickyNavbar_
 please provide the following fields:</p><ul><li><code>refresh_token</code>: set the refresh_token for dropbox api</li><li><code>client_id</code>: set the client_id for dropbox api</li><li><code>client_secret</code>: set the client_secret for dropbox api</li></ul><p>OpenDAL is a library, it cannot do the first step of OAuth2 for you.
 You need to get authorization code from user by calling Dropbox&#x27;s authorize url
 and exchange it for refresh token.</p><p>Please refer to <a href="https://www.dropbox.com/developers/reference/oauth-guide" target="_blank" rel="noopener noreferrer">Dropbox OAuth2 Guide</a>
-for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/etcd/index.html b/docs/services/etcd/index.html
index f2c4491e7..42ee77d89 100644
--- a/docs/services/etcd/index.html
+++ b/docs/services/etcd/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Etcd | 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/services/etcd"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/foundationdb/index.html b/docs/services/foundationdb/index.html
index 8bfb8753a..788756f33 100644
--- a/docs/services/foundationdb/index.html
+++ b/docs/services/foundationdb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FoundationDB | 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/services/foundationdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index d8b0033c7..3d1d5d3c4 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Fs | 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/services/fs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index b5bb9ac86..8d8b5fca9 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FTP | 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/services/ftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gcs/index.html b/docs/services/gcs/index.html
index eb4466d79..c56af5ac0 100644
--- a/docs/services/gcs/index.html
+++ b/docs/services/gcs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gcs | 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/services/gcs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gdrive/index.html b/docs/services/gdrive/index.html
index 3b667753b..7d850b892 100644
--- a/docs/services/gdrive/index.html
+++ b/docs/services/gdrive/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gdrive | 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/services/gdrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -16,8 +16,8 @@ please provide the following fields:</p><ul><li><code>refresh_token</code>: set
 You need to get authorization code from user by calling GoogleDrive&#x27;s authorize url
 and exchange it for refresh token.</p><p>Make sure you have enabled Google Drive API in your Google Cloud Console.
 And your OAuth scope contains <code>https://www.googleapis.com/auth/drive</code>.</p><p>Please refer to <a href="https://developers.google.com/identity/protocols/oauth2/" target="_blank" rel="noopener noreferrer">GoogleDrive OAuth2 Flow</a>
-for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index e302f0f18..bd17ce095 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">HDFS | 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/services/hdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/http/index.html b/docs/services/http/index.html
index 139868351..4b4572db6 100644
--- a/docs/services/http/index.html
+++ b/docs/services/http/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Http | 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/services/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index 61bd29855..b9cee7fbd 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPFS | 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/services/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index 3e685e835..71161f22f 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPMFS | 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/services/ipmfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memcached/index.html b/docs/services/memcached/index.html
index 3d26777d8..41159b631 100644
--- a/docs/services/memcached/index.html
+++ b/docs/services/memcached/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memcached | 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/services/memcached"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index 3413db35a..74c704bc6 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memory | 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/services/memory"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/moka/index.html b/docs/services/moka/index.html
index e2e590994..18e913e13 100644
--- a/docs/services/moka/index.html
+++ b/docs/services/moka/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Moka | 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/services/moka"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/obs/index.html b/docs/services/obs/index.html
index 0a36f76e1..b4a2c3a68 100644
--- a/docs/services/obs/index.html
+++ b/docs/services/obs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Obs | 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/services/obs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/onedrive/index.html b/docs/services/onedrive/index.html
index 35ed32c34..dcf64610f 100644
--- a/docs/services/onedrive/index.html
+++ b/docs/services/onedrive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OneDrive | 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/services/onedrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index b09b7fa4d..fb6680d6a 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OSS | 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/services/oss"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index 8384cd81a..64d83d985 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Redis | 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/services/redis"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index dfbd2e6a2..53eb041bb 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">RocksDB | 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/services/rocksdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 issues. It is advisable to follow the steps provided in the <a href="https://github.com/facebook/rocksdb/blob/main/INSTALL.md" target="_blank" rel="noopener noreferrer"><code>INSTALL</code></a>
 file to build rocksdb, rather than relying on system libraries that
-may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index 6e31c2af3..0997a956a 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">S3 | 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/services/s3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index 0f796a454..bb98dc6dc 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">SFTP | 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/services/sftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index ebacc623d..fdf9d2f03 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Sled | 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/services/sled"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/supabase/index.html b/docs/services/supabase/index.html
index 0f508dbab..420f3b388 100644
--- a/docs/services/supabase/index.html
+++ b/docs/services/supabase/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Supabase | 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/services/supabase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 service_role_key(Secret key). The former one can only write public resources while the latter one
-can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/wasabi/index.html b/docs/services/wasabi/index.html
index 4015bd1ab..cc263960b 100644
--- a/docs/services/wasabi/index.html
+++ b/docs/services/wasabi/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Wasabi | 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/services/wasabi"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webdav/index.html b/docs/services/webdav/index.html
index 9d2c27554..d3a42f3c5 100644
--- a/docs/services/webdav/index.html
+++ b/docs/services/webdav/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebDAV | 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/services/webdav"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index 78b0dd92e..a20ddfb50 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebHDFS | 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/services/webhdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/vision/index.html b/docs/vision/index.html
index 949f6157d..d559fa296 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index 28d1a9a2e..331d4f8ac 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Download | 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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 8b6c72be4..83b21248d 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.dfa2fa25.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.03d8ed87.js" as="script">
 <link rel="preload" href="/assets/js/main.02721e34.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
-<script src="/assets/js/runtime~main.dfa2fa25.js"></script>
+<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
+<script src="/assets/js/runtime~main.03d8ed87.js"></script>
 <script src="/assets/js/main.02721e34.js"></script>
 </body>
 </html>
\ No newline at end of file