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

[incubator-opendal] branch gh-pages updated: deploy: 9a77aa5b2d33c306d71ed7398481d2f9b7c007e7

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 13c780ea deploy: 9a77aa5b2d33c306d71ed7398481d2f9b7c007e7
13c780ea is described below

commit 13c780ea7bc7a66ccf06013f31f697075c18a7c4
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Mon May 22 10:07:15 2023 +0000

    deploy: 9a77aa5b2d33c306d71ed7398481d2f9b7c007e7
---
 404.html                                           |   4 +-
 .../{ae4554eb.c8bb356e.js => ae4554eb.ef7fc4ea.js} |   2 +-
 .../{c377a04b.eefdedc3.js => c377a04b.5b8d5afe.js} |   2 +-
 ...e~main.64f7176b.js => runtime~main.998715dd.js} |   2 +-
 blog/archive/index.html                            |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 docs/index.html                                    |   6 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  56 +++---
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/python/opendal.html                           |  40 ++--
 docs/python/search.js                              |   2 +-
 docs/rust/opendal/enum.Scheme.html                 |  10 +-
 .../opendal/layers/struct.ImmutableIndexLayer.html |  14 +-
 docs/rust/opendal/raw/trait.Layer.html             |   4 +-
 docs/rust/opendal/services/index.html              |   2 +-
 docs/rust/opendal/services/struct.Azblob.html      |   4 +-
 docs/rust/opendal/services/struct.Azdfs.html       |   4 +-
 docs/rust/opendal/services/struct.Cos.html         |   4 +-
 docs/rust/opendal/services/struct.Dashmap.html     |   4 +-
 docs/rust/opendal/services/struct.Fs.html          |   4 +-
 docs/rust/opendal/services/struct.Ftp.html         |   4 +-
 docs/rust/opendal/services/struct.Gcs.html         |   4 +-
 docs/rust/opendal/services/struct.Gdrive.html      |   4 +-
 docs/rust/opendal/services/struct.Ghac.html        |   4 +-
 docs/rust/opendal/services/struct.Hdfs.html        |   4 +-
 docs/rust/opendal/services/struct.Http.html        |   4 +-
 docs/rust/opendal/services/struct.Ipfs.html        |   4 +-
 docs/rust/opendal/services/struct.Ipmfs.html       |   4 +-
 docs/rust/opendal/services/struct.Memcached.html   |   4 +-
 docs/rust/opendal/services/struct.Memory.html      |   4 +-
 docs/rust/opendal/services/struct.Moka.html        |   4 +-
 docs/rust/opendal/services/struct.Obs.html         |   4 +-
 docs/rust/opendal/services/struct.Onedrive.html    |   4 +-
 docs/rust/opendal/services/struct.Oss.html         |   4 +-
 docs/rust/opendal/services/struct.Redis.html       |   4 +-
 docs/rust/opendal/services/struct.Rocksdb.html     |   4 +-
 docs/rust/opendal/services/struct.S3.html          |   4 +-
 docs/rust/opendal/services/struct.Sftp.html        |   4 +-
 docs/rust/opendal/services/struct.Sled.html        |   4 +-
 docs/rust/opendal/services/struct.Supabase.html    |   4 +-
 .../opendal/services/struct.VercelArtifacts.html   |   4 +-
 docs/rust/opendal/services/struct.Wasabi.html      |   4 +-
 docs/rust/opendal/services/struct.Webdav.html      |   4 +-
 docs/rust/opendal/services/struct.Webhdfs.html     |   4 +-
 docs/rust/opendal/struct.Operator.html             |  54 ++++--
 docs/rust/opendal/struct.OperatorBuilder.html      |   8 +-
 docs/rust/opendal/trait.Builder.html               |  24 +--
 docs/rust/search-index.js                          |   2 +-
 .../src/opendal/layers/immutable_index.rs.html     |  54 ++++--
 docs/rust/src/opendal/raw/layer.rs.html            |   2 +-
 .../src/opendal/services/gdrive/backend.rs.html    |  16 +-
 docs/rust/src/opendal/services/gdrive/core.rs.html |  16 +-
 .../src/opendal/services/ipmfs/backend.rs.html     |   2 -
 .../src/opendal/services/memcached/ascii.rs.html   |   8 +-
 docs/rust/src/opendal/services/mod.rs.html         |   2 -
 .../opendal/services/onedrive/graph_model.rs.html  |   6 +-
 .../src/opendal/services/onedrive/pager.rs.html    |  16 +-
 .../services/vercel_artifacts/backend.rs.html      |  10 +-
 docs/rust/src/opendal/types/builder.rs.html        |  52 -----
 .../src/opendal/types/operator/builder.rs.html     | 214 +++++++++++++++++++--
 docs/rust/src/opendal/types/scheme.rs.html         |   6 +-
 docs/vision/index.html                             |   6 +-
 index.html                                         |   4 +-
 70 files changed, 459 insertions(+), 361 deletions(-)

diff --git a/404.html b/404.html
index 6b3b9965..24ef8f89 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/ae4554eb.c8bb356e.js b/assets/js/ae4554eb.ef7fc4ea.js
similarity index 98%
rename from assets/js/ae4554eb.c8bb356e.js
rename to assets/js/ae4554eb.ef7fc4ea.js
index 21f57f2e..93ec0935 100644
--- a/assets/js/ae4554eb.c8bb356e.js
+++ b/assets/js/ae4554eb.ef7fc4ea.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/c377a04b.eefdedc3.js b/assets/js/c377a04b.5b8d5afe.js
similarity index 97%
rename from assets/js/c377a04b.eefdedc3.js
rename to assets/js/c377a04b.5b8d5afe.js
index 5d1114a8..857e0c76 100644
--- a/assets/js/c377a04b.eefdedc3.js
+++ b/assets/js/c377a04b.5b8d5afe.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.64f7176b.js b/assets/js/runtime~main.998715dd.js
similarity index 54%
rename from assets/js/runtime~main.64f7176b.js
rename to assets/js/runtime~main.998715dd.js
index b8a28c2a..681b74dd 100644
--- a/assets/js/runtime~main.64f7176b.js
+++ b/assets/js/runtime~main.998715dd.js
@@ -1 +1 @@
-(()=>{"use strict";var e,t,r,a,o,f={},n={};function c(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return f[e].call(r.exports,r,r.exports,c),r.exports}c.m=f,e=[],c.O=(t,r,a,o)=>{if(!r){var f=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var n=!0,i=0;i<r.length;i++)(!1&o||f>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(n=!1,o<f&&(f=o));if(n){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
+(()=>{"use strict";var e,t,r,a,o,n={},f={};function c(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={exports:{}};return n[e].call(r.exports,r,r.exports,c),r.exports}c.m=n,e=[],c.O=(t,r,a,o)=>{if(!r){var n=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var f=!0,i=0;i<r.length;i++)(!1&o||n>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(f=!1,o<n&&(n=o));if(f){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index c62a7536..dd1c230a 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index b03f3d01..7810d24e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index 3caf346b..d3685117 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 26471cc9..20789880 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">One post tagged with &quot;announcement&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 2d5713c5..4868d795 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index d4dff769..0335265a 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index b70ec56f..772b283d 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/e2f3a2a/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index d20c4e2f..bb5892c9 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/e2f3a2a/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index acf2a88d..4d90cec3 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/e2f3a2a/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -61,7 +61,7 @@ thing internally.</p>
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index f1bbaa25..3d6f8921 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/e2f3a2a/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -73,7 +73,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -83,7 +83,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -93,7 +93,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/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/9a77aa5/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -103,7 +103,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -114,7 +114,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -136,7 +136,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index bd77ecdd..b6303258 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/e2f3a2a/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/9a77aa5/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -75,7 +75,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> options: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type" data-tsd-kind="Class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="check" class="tsd-anchor"></a>
@@ -94,7 +94,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -117,7 +117,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -140,7 +140,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -161,7 +161,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -182,7 +182,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -208,7 +208,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -229,7 +229,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -250,7 +250,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L86">index.d.ts:86</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L86">index.d.ts:86</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -271,7 +271,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -294,7 +294,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -317,7 +317,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -341,7 +341,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -365,7 +365,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -389,7 +389,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -410,7 +410,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -431,7 +431,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Buffer</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -457,7 +457,7 @@
 <h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -483,7 +483,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -507,7 +507,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -531,7 +531,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -554,7 +554,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -577,7 +577,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -608,7 +608,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -629,7 +629,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -652,7 +652,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -675,7 +675,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/9a77aa5/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index e22d887d..1ea26adc 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/e2f3a2a/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/9a77aa5/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/e2f3a2a/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/9a77aa5/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">method<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/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/9a77aa5/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">url<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>URL of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e2f3a2a/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/9a77aa5/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 22397da4..0a6332b5 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -158,18 +158,18 @@
                         <li>
                                 <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
-                        <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
-                        </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
+                        <li>
+                                <a class="variable" href="#Metadata.etag">etag</a>
+                        </li>
                 </ul>
 
             </li>
@@ -865,54 +865,54 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>Content Type of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_type" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_type"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>Content Type of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.etag" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.etag"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.etag"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>ETag of this entry.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index 1b005db2..272b0511 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/opendal/enum.Scheme.html b/docs/rust/opendal/enum.Scheme.html
index ecf50ab5..508610df 100644
--- a/docs/rust/opendal/enum.Scheme.html
+++ b/docs/rust/opendal/enum.Scheme.html
@@ -1,15 +1,15 @@
-<!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 [...]
+<!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 [...]
 pub enum Scheme {
 <details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 30 variants</span></summary>    Azblob,
     Azdfs,
     Cos,
     Dashmap,
     Fs,
+    Ftp,
     Gcs,
     Ghac,
     Hdfs,
     Http,
-    Ftp,
     Ipfs,
     Ipmfs,
     Memcached,
@@ -42,11 +42,11 @@ pub enum Scheme {
 </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>
 </div><section id="variant.Dashmap" class="variant"><a href="#variant.Dashmap" class="anchor">§</a><h3 class="code-header">Dashmap</h3></section><div class="docblock"><p><a href="services/struct.Dashmap.html" title="struct opendal::services::Dashmap">dashmap</a>: dashmap backend support.</p>
 </div><section id="variant.Fs" class="variant"><a href="#variant.Fs" class="anchor">§</a><h3 class="code-header">Fs</h3></section><div class="docblock"><p><a href="services/struct.Fs.html" title="struct opendal::services::Fs">fs</a>: POSIX alike file system.</p>
+</div><section id="variant.Ftp" class="variant"><a href="#variant.Ftp" class="anchor">§</a><h3 class="code-header">Ftp</h3></section><div class="docblock"><p><a href="services/struct.Ftp.html" title="struct opendal::services::Ftp">ftp</a>: FTP backend.</p>
 </div><section id="variant.Gcs" class="variant"><a href="#variant.Gcs" class="anchor">§</a><h3 class="code-header">Gcs</h3></section><div class="docblock"><p><a href="services/struct.Gcs.html" title="struct opendal::services::Gcs">gcs</a>: Google Cloud Storage backend.</p>
 </div><section id="variant.Ghac" class="variant"><a href="#variant.Ghac" class="anchor">§</a><h3 class="code-header">Ghac</h3></section><div class="docblock"><p><a href="services/struct.Ghac.html" title="struct opendal::services::Ghac">ghac</a>: GitHub Action Cache services.</p>
 </div><section id="variant.Hdfs" class="variant"><a href="#variant.Hdfs" class="anchor">§</a><h3 class="code-header">Hdfs</h3></section><div class="docblock"><p><a href="services/struct.Hdfs.html" title="struct opendal::services::Hdfs">hdfs</a>: Hadoop Distributed File System.</p>
 </div><section id="variant.Http" class="variant"><a href="#variant.Http" class="anchor">§</a><h3 class="code-header">Http</h3></section><div class="docblock"><p><a href="services/struct.Http.html" title="struct opendal::services::Http">http</a>: HTTP backend.</p>
-</div><section id="variant.Ftp" class="variant"><a href="#variant.Ftp" class="anchor">§</a><h3 class="code-header">Ftp</h3></section><div class="docblock"><p><a href="services/struct.Ftp.html" title="struct opendal::services::Ftp">ftp</a>: FTP backend.</p>
 </div><section id="variant.Ipfs" class="variant"><a href="#variant.Ipfs" class="anchor">§</a><h3 class="code-header">Ipfs</h3></section><div class="docblock"><p><a href="services/struct.Ipfs.html" title="struct opendal::services::Ipfs">ipmfs</a>: IPFS HTTP Gateway</p>
 </div><section id="variant.Ipmfs" class="variant"><a href="#variant.Ipmfs" class="anchor">§</a><h3 class="code-header">Ipmfs</h3></section><div class="docblock"><p><a href="services/struct.Ipmfs.html" title="struct opendal::services::Ipmfs">ipmfs</a>: IPFS mutable file system</p>
 </div><section id="variant.Memcached" class="variant"><a href="#variant.Memcached" class="anchor">§</a><h3 class="code-header">Memcached</h3></section><div class="docblock"><p><a href="services/struct.Memcached.html" title="struct opendal::services::Memcached">memcached</a>: Memcached service support.</p>
@@ -72,8 +72,8 @@ pub enum Scheme {
 <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#101-106">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#102-107">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.69.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.69.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.69.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.69.0/src/core/cmp.rs.html#229">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.69.0/core/cmp/trait.PartialEq.html#method.ne" clas [...]
diff --git a/docs/rust/opendal/layers/struct.ImmutableIndexLayer.html b/docs/rust/opendal/layers/struct.ImmutableIndexLayer.html
index 2b5904fb..3c424ffd 100644
--- a/docs/rust/opendal/layers/struct.ImmutableIndexLayer.html
+++ b/docs/rust/opendal/layers/struct.ImmutableIndexLayer.html
@@ -1,7 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add an immutable in-memory index for underlying storage services."><title>ImmutableIndexLayer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add an immutable in-memory index for underlying storage services."><title>ImmutableIndexLayer in opendal::layers - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
 <p>Especially useful for services without list capability like HTTP.</p>
 <h2 id="examples"><a href="#examples">Examples</a></h2>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::layers::ImmutableIndexLayer;
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::collections::HashMap;
+
+<span class="kw">use </span>opendal::layers::ImmutableIndexLayer;
 <span class="kw">use </span>opendal::services;
 <span class="kw">use </span>opendal::Operator;
 
@@ -11,14 +13,14 @@
     iil.insert(i.to_string())
 }
 
-<span class="kw">let </span>op = Operator::from_env::&lt;services::Http&gt;()
+<span class="kw">let </span>op = Operator::from_map::&lt;services::Http&gt;(HashMap::default())
     .unwrap()
     .layer(iil)
     .finish();</code></pre></div>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ImmutableIndexLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#55-68">source</a><a href="#impl-ImmutableIndexLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="stru [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.extend_iter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#62-67">source</a><h4 class="code-header">pub fn <a href="#method.extend_iter" class="fn">extend_iter</a>&lt;I&gt;(&amp;mut self, iter: I)<span class="where fmt-newline">where
+</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-ImmutableIndexLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#57-70">source</a><a href="#impl-ImmutableIndexLayer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="stru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.extend_iter" class="method"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#64-69">source</a><h4 class="code-header">pub fn <a href="#method.extend_iter" class="fn">extend_iter</a>&lt;I&gt;(&amp;mut self, iter: I)<span class="where fmt-newline">where
     I: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,</span></h4></section></summary><div class="docblock"><p>Insert keys from iter.</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-ImmutableIndexLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#50">source</a><a href="#impl-Clone-for-ImmutableIndexLayer" class="anchor" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ImmutableIndexLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/immutable_index.rs.html#52">source</a><a href="#impl-Clone-for-ImmutableIndexLayer" class="anchor" [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/trait.Layer.html b/docs/rust/opendal/raw/trait.Layer.html
index 0edd32a5..73b776f0 100644
--- a/docs/rust/opendal/raw/trait.Layer.html
+++ b/docs/rust/opendal/raw/trait.Layer.html
@@ -66,7 +66,7 @@ requires <code>Send</code> and <code>Sync</code>.</p>
     }
 
     <span class="kw">async fn </span>append(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpAppend) -&gt; <span class="prelude-ty">Result</span>&lt;(RpAppend, <span class="self">Self</span>::Appender)&gt; {
-       <span class="self">self</span>.inner.append(path, args).<span class="kw">await
+        <span class="self">self</span>.inner.append(path, args).<span class="kw">await
     </span>}
 
     <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
@@ -92,4 +92,4 @@ requires <code>Send</code> and <code>Sync</code>.</p>
 }</code></pre></div>
 </div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.LayeredAccessor" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#126">source</a><h4 class="code-header">type <a href="#associatedtype.LayeredAccessor" class="associatedtype">LayeredAccessor</a>: <a cl [...]
 </div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.layer" class="method"><a class="srclink rightside" href="../../src/opendal/raw/layer.rs.html#129">source</a><h4 class="code-header">fn <a href="#tymethod.layer" class="fn">layer</a>(&amp;self, inner: A) -&gt; Self::<a class="associatedtype" href="trai [...]
-</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-ChaosLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/chaos.rs.html#83-93">source</a><a href="#impl-Layer%3CA%3E-for-ChaosLayer" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait" href="trai [...]
\ No newline at end of file
+</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-ChaosLayer" class="impl"><a class="srclink rightside" href="../../src/opendal/layers/chaos.rs.html#83-93">source</a><a href="#impl-Layer%3CA%3E-for-ChaosLayer" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait" href="trai [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/index.html b/docs/rust/opendal/services/index.html
index 5a4d3f50..9def05f7 100644
--- a/docs/rust/opendal/services/index.html
+++ b/docs/rust/opendal/services/index.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="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.Azdfs.html" title="struct opendal::services::Azdfs">Azdfs</a></div><div class="desc docblock-short">Azure  [...]
 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 [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.Azblob.html b/docs/rust/opendal/services/struct.Azblob.html
index cce15b30..3f22a412 100644
--- a/docs/rust/opendal/services/struct.Azblob.html
+++ b/docs/rust/opendal/services/struct.Azblob.html
@@ -122,9 +122,7 @@ EndpointSuffix=core.chinacloudapi.cn;
 <h5 id="note"><a href="#note">Note</a></h5>
 <p>connection string only configures the endpoint, account name and account key.
 User still needs to configure bucket names.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#335-414">source</a><a href="#impl-Builder-for-AzblobBuilder" class="anchor">§ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AzblobBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azblob/backend.rs.html#335-414">source</a><a href="#impl-Builder-for-AzblobBuilder" class="anchor">§ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Azdfs.html b/docs/rust/opendal/services/struct.Azdfs.html
index 1f0d06cf..1ff0f182 100644
--- a/docs/rust/opendal/services/struct.Azdfs.html
+++ b/docs/rust/opendal/services/struct.Azdfs.html
@@ -94,9 +94,7 @@ blocking</li>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AzdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azdfs/backend.rs.html#221-294">source</a><a href="#impl-Builder-for-AzdfsBuilder" class="anchor">§</a [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-AzdfsBuilder" class="impl"><a class="srclink rightside" href="../../sr [...]
+</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-AzdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/azdfs/backend.rs.html#221-294">source</a><a href="#impl-Builder-for-AzdfsBuilder" class="anchor">§</a [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Cos.html b/docs/rust/opendal/services/struct.Cos.html
index 32c92672..c7f1c9b5 100644
--- a/docs/rust/opendal/services/struct.Cos.html
+++ b/docs/rust/opendal/services/struct.Cos.html
@@ -90,9 +90,7 @@ environment.</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#203-291">source</a><a href="#impl-Builder-for-CosBuilder" class="anchor">§</a><h3 c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-CosBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/cos/backend.rs.html#203-291">source</a><a href="#impl-Builder-for-CosBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Dashmap.html b/docs/rust/opendal/services/struct.Dashmap.html
index be7435ce..a61937f6 100644
--- a/docs/rust/opendal/services/struct.Dashmap.html
+++ b/docs/rust/opendal/services/struct.Dashmap.html
@@ -26,9 +26,7 @@ presign</li>
 blocking</li>
 </ul>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#49-55">source</a><a href="#impl-DashmapBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Dashm [...]
-</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-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#57-75">source</a><a href="#impl-Builder-for-DashmapBuilder" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-DashmapBuilder" class="impl"><a class="srclink rightside" href="../. [...]
+</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-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#57-75">source</a><a href="#impl-Builder-for-DashmapBuilder" class="anchor"> [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Fs.html b/docs/rust/opendal/services/struct.Fs.html
index aa5cc581..e935b99c 100644
--- a/docs/rust/opendal/services/struct.Fs.html
+++ b/docs/rust/opendal/services/struct.Fs.html
@@ -58,9 +58,7 @@ behavior is consistent. By enable path check, we can make sure
 fs will behave the same as other services.</p>
 <p>Enabling this feature will lead to extra metadata call in all
 operations.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#130-219">source</a><a href="#impl-Builder-for-FsBuilder" class="anchor">§</a><h3 clas [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/o [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-FsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/fs/backend.rs.html#130-219">source</a><a href="#impl-Builder-for-FsBuilder" class="anchor">§</a><h3 clas [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Ftp.html b/docs/rust/opendal/services/struct.Ftp.html
index 4d3e8bb7..4bbf9523 100644
--- a/docs/rust/opendal/services/struct.Ftp.html
+++ b/docs/rust/opendal/services/struct.Ftp.html
@@ -54,9 +54,7 @@ blocking</li>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/services/ftp/backend.rs.html#127-135">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.reference [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.user" class="method"><a class="srclink rightside" href="../../src/opendal/services/ftp/backend.rs.html#138-146">source</a><h4 class="code-header">pub fn <a href="#method.user" class="fn">user</a>(&amp;mut self, user: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.reference [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.password" class="method"><a class="srclink rightside" href="../../src/opendal/services/ftp/backend.rs.html#149-157">source</a><h4 class="code-header">pub fn <a href="#method.password" class="fn">password</a>(&amp;mut self, password: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/pri [...]
-</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-FtpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ftp/backend.rs.html#160-234">source</a><a href="#impl-Builder-for-FtpBuilder" class="anchor">§</a><h3 c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-FtpBuilder" class="impl"><a class="srclink rightside" href="../../src/ [...]
+</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-FtpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ftp/backend.rs.html#160-234">source</a><a href="#impl-Builder-for-FtpBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Gcs.html b/docs/rust/opendal/services/struct.Gcs.html
index 10d46b57..cd91d214 100644
--- a/docs/rust/opendal/services/struct.Gcs.html
+++ b/docs/rust/opendal/services/struct.Gcs.html
@@ -107,9 +107,7 @@ during minor updates.</p>
 Larger chunk sizes typically make uploads faster, but note that there’s a tradeoff between speed and memory usage.
 It’s recommended that you use at least 8 MiB for the chunk size.
 Reference: <a href="https://cloud.google.com/storage/docs/performing-resumable-uploads">Perform resumable uploads</a></p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-GcsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/gcs/backend.rs.html#278-385">source</a><a href="#impl-Builder-for-GcsBuilder" class="anchor">§</a><h3 c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-GcsBuilder" class="impl"><a class="srclink rightside" href="../../src/ [...]
+</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-GcsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/gcs/backend.rs.html#278-385">source</a><a href="#impl-Builder-for-GcsBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Gdrive.html b/docs/rust/opendal/services/struct.Gdrive.html
index e3abd07b..3a3abc9e 100644
--- a/docs/rust/opendal/services/struct.Gdrive.html
+++ b/docs/rust/opendal/services/struct.Gdrive.html
@@ -50,9 +50,7 @@ rename</li>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-GdriveBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/gdrive/builder.rs.html#118-150">source</a><a href="#impl-Builder-for-GdriveBuilder" class="anchor">§ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-GdriveBuilder" class="impl"><a class="srclink rightside" href="../../s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-GdriveBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/gdrive/builder.rs.html#118-150">source</a><a href="#impl-Builder-for-GdriveBuilder" class="anchor">§ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Ghac.html b/docs/rust/opendal/services/struct.Ghac.html
index 01ce0acf..67067134 100644
--- a/docs/rust/opendal/services/struct.Ghac.html
+++ b/docs/rust/opendal/services/struct.Ghac.html
@@ -89,9 +89,7 @@ empty file.</p>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-GhacBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ghac/backend.rs.html#207-273">source</a><a href="#impl-Builder-for-GhacBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-GhacBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</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-GhacBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ghac/backend.rs.html#207-273">source</a><a href="#impl-Builder-for-GhacBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Hdfs.html b/docs/rust/opendal/services/struct.Hdfs.html
index 2664eda1..3fbb5208 100644
--- a/docs/rust/opendal/services/struct.Hdfs.html
+++ b/docs/rust/opendal/services/struct.Hdfs.html
@@ -95,9 +95,7 @@ blocking</li>
 <li><code>default</code>: using the default setting based on hadoop config.</li>
 <li><code>hdfs://127.0.0.1:9000</code>: connect to hdfs cluster.</li>
 </ul>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#175-219">source</a><a href="#impl-Builder-for-HdfsBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-HdfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/hdfs/backend.rs.html#175-219">source</a><a href="#impl-Builder-for-HdfsBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Http.html b/docs/rust/opendal/services/struct.Http.html
index d34e3918..a177d158 100644
--- a/docs/rust/opendal/services/struct.Http.html
+++ b/docs/rust/opendal/services/struct.Http.html
@@ -62,9 +62,7 @@ HTTP Server like nginx, caddy.</p>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-HttpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/http/backend.rs.html#173-231">source</a><a href="#impl-Builder-for-HttpBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-HttpBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</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-HttpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/http/backend.rs.html#173-231">source</a><a href="#impl-Builder-for-HttpBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Ipfs.html b/docs/rust/opendal/services/struct.Ipfs.html
index 6bdc5be1..a38391d6 100644
--- a/docs/rust/opendal/services/struct.Ipfs.html
+++ b/docs/rust/opendal/services/struct.Ipfs.html
@@ -75,9 +75,7 @@ blocking</li>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-IpfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ipfs/backend.rs.html#144-194">source</a><a href="#impl-Builder-for-IpfsBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-IpfsBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</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-IpfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ipfs/backend.rs.html#144-194">source</a><a href="#impl-Builder-for-IpfsBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Ipmfs.html b/docs/rust/opendal/services/struct.Ipmfs.html
index 2288acc3..0feb4284 100644
--- a/docs/rust/opendal/services/struct.Ipmfs.html
+++ b/docs/rust/opendal/services/struct.Ipmfs.html
@@ -45,9 +45,7 @@ blocking</li>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-IpmfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ipmfs/builder.rs.html#111-145">source</a><a href="#impl-Builder-for-IpmfsBuilder" class="anchor">§</a [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-IpmfsBuilder" class="impl"><a class="srclink rightside" href="../../sr [...]
+</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-IpmfsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/ipmfs/builder.rs.html#111-145">source</a><a href="#impl-Builder-for-IpmfsBuilder" class="anchor">§</a [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Memcached.html b/docs/rust/opendal/services/struct.Memcached.html
index 5497514f..828df073 100644
--- a/docs/rust/opendal/services/struct.Memcached.html
+++ b/docs/rust/opendal/services/struct.Memcached.html
@@ -53,9 +53,7 @@ blocking</li>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/services/memcached/backend.rs.html#106-111">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.ref [...]
 <p>default: “/”</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.default_ttl" class="method"><a class="srclink rightside" href="../../src/opendal/services/memcached/backend.rs.html#114-117">source</a><h4 class="code-header">pub fn <a href="#method.default_ttl" class="fn">default_ttl</a>(&amp;mut self, ttl: <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>) -&gt; <a class="primit [...]
-</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-MemcachedBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/memcached/backend.rs.html#120-197">source</a><a href="#impl-Builder-for-MemcachedBuilder" class=" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-MemcachedBuilder" class="impl"><a class="srclink rightside" href="../. [...]
+</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-MemcachedBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/memcached/backend.rs.html#120-197">source</a><a href="#impl-Builder-for-MemcachedBuilder" class=" [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Memory.html b/docs/rust/opendal/services/struct.Memory.html
index 3c2d190b..4ea7fad8 100644
--- a/docs/rust/opendal/services/struct.Memory.html
+++ b/docs/rust/opendal/services/struct.Memory.html
@@ -26,9 +26,7 @@ presign</li>
 blocking</li>
 </ul>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MemoryBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/memory/backend.rs.html#50-56">source</a><a href="#impl-MemoryBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Memory.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-Builder-for-MemoryBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/memory/backend.rs.html#58-77">source</a><a href="#impl-Builder-for-MemoryBuilder" class="anchor">§</ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-MemoryBuilder" class="impl"><a class="srclink rightside" href="../.. [...]
+</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-MemoryBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/memory/backend.rs.html#58-77">source</a><a href="#impl-Builder-for-MemoryBuilder" class="anchor">§</ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Moka.html b/docs/rust/opendal/services/struct.Moka.html
index 5f87098f..bd5ba7a9 100644
--- a/docs/rust/opendal/services/struct.Moka.html
+++ b/docs/rust/opendal/services/struct.Moka.html
@@ -36,9 +36,7 @@ blocking</li>
 <p>Refer to <a href="https://docs.rs/moka/latest/moka/sync/struct.CacheBuilder.html#method.segments"><code>moka::sync::CacheBuilder::segments</code></a></p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.thread_pool_enabled" class="method"><a class="srclink rightside" href="../../src/opendal/services/moka/backend.rs.html#124-127">source</a><h4 class="code-header">pub fn <a href="#method.thread_pool_enabled" class="fn">thread_pool_enabled</a>(&amp;mut self, v: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>) -&gt; <a class="primitive" href="https://doc.rust [...]
 <p>Refer to <a href="https://docs.rs/moka/latest/moka/sync/struct.CacheBuilder.html#method.thread_pool_enabled"><code>moka::sync::CacheBuilder::thread_pool_enabled</code></a></p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-MokaBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/moka/backend.rs.html#130-182">source</a><a href="#impl-Builder-for-MokaBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-MokaBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</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-MokaBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/moka/backend.rs.html#130-182">source</a><a href="#impl-Builder-for-MokaBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Obs.html b/docs/rust/opendal/services/struct.Obs.html
index 83cbe056..40d84039 100644
--- a/docs/rust/opendal/services/struct.Obs.html
+++ b/docs/rust/opendal/services/struct.Obs.html
@@ -84,9 +84,7 @@ The param is required.</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#189-290">source</a><a href="#impl-Builder-for-ObsBuilder" class="anchor">§</a><h3 c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-ObsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/obs/backend.rs.html#189-290">source</a><a href="#impl-Builder-for-ObsBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Onedrive.html b/docs/rust/opendal/services/struct.Onedrive.html
index 3c275f86..b1c880c7 100644
--- a/docs/rust/opendal/services/struct.Onedrive.html
+++ b/docs/rust/opendal/services/struct.Onedrive.html
@@ -49,9 +49,7 @@ blocking</li>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-OnedriveBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/onedrive/builder.rs.html#116-148">source</a><a href="#impl-Builder-for-OnedriveBuilder" class="anc [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-OnedriveBuilder" class="impl"><a class="srclink rightside" href="../.. [...]
+</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-OnedriveBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/onedrive/builder.rs.html#116-148">source</a><a href="#impl-Builder-for-OnedriveBuilder" class="anc [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Oss.html b/docs/rust/opendal/services/struct.Oss.html
index f590acfc..15b3334c 100644
--- a/docs/rust/opendal/services/struct.Oss.html
+++ b/docs/rust/opendal/services/struct.Oss.html
@@ -118,9 +118,7 @@ or not specify the specific CMK ID for OSS-managed KMS key.
 <p>This option only takes effect when server_side_encryption equals to KMS.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#305-309">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust- [...]
 Reference: <a href="https://www.alibabacloud.com/help/en/object-storage-service/latest/multipart-upload-6">OSS Multipart upload</a></p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#312-430">source</a><a href="#impl-Builder-for-OssBuilder" class="anchor">§</a><h3 c [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-OssBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/oss/backend.rs.html#312-430">source</a><a href="#impl-Builder-for-OssBuilder" class="anchor">§</a><h3 c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Redis.html b/docs/rust/opendal/services/struct.Redis.html
index c2834c17..a5740a27 100644
--- a/docs/rust/opendal/services/struct.Redis.html
+++ b/docs/rust/opendal/services/struct.Redis.html
@@ -66,9 +66,7 @@ blocking</li>
 <p>If set, we will specify <code>EX</code> for write operations.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/services/redis/backend.rs.html#187-192">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.referen [...]
 <p>default: “/”</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-RedisBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/redis/backend.rs.html#195-282">source</a><a href="#impl-Builder-for-RedisBuilder" class="anchor">§</a [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RedisBuilder" class="impl"><a class="srclink rightside" href="../../sr [...]
+</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-RedisBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/redis/backend.rs.html#195-282">source</a><a href="#impl-Builder-for-RedisBuilder" class="anchor">§</a [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Rocksdb.html b/docs/rust/opendal/services/struct.Rocksdb.html
index c0ad3317..627f6eca 100644
--- a/docs/rust/opendal/services/struct.Rocksdb.html
+++ b/docs/rust/opendal/services/struct.Rocksdb.html
@@ -60,9 +60,7 @@ may be outdated and incompatible.</p>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-RocksdbBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/rocksdb/backend.rs.html#99-115">source</a><a href="#impl-RocksdbBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Rock [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/services/rocksdb/backend.rs.html#109-114">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;mut self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.refer [...]
 <p>default: “/”</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-RocksdbBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/rocksdb/backend.rs.html#117-143">source</a><a href="#impl-Builder-for-RocksdbBuilder" class="anchor [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-RocksdbBuilder" class="impl"><a class="srclink rightside" href="../../ [...]
+</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-RocksdbBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/rocksdb/backend.rs.html#117-143">source</a><a href="#impl-Builder-for-RocksdbBuilder" class="anchor [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.S3.html b/docs/rust/opendal/services/struct.S3.html
index 03169ced..f5fa7d90 100644
--- a/docs/rust/opendal/services/struct.S3.html
+++ b/docs/rust/opendal/services/struct.S3.html
@@ -428,9 +428,7 @@ in virtual host style instead of path style.</p>
 during minor updates.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.write_min_size" class="method"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#730-734">source</a><h4 class="code-header">pub fn <a href="#method.write_min_size" class="fn">write_min_size</a>(&amp;mut self, write_min_size: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust-l [...]
 Reference: <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html">Amazon S3 multipart upload limits</a></p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#737-942">source</a><a href="#impl-Builder-for-S3Builder" class="anchor">§</a><h3 clas [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-S3Builder" class="impl"><a class="srclink rightside" href="../../src/o [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-S3Builder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/s3/backend.rs.html#737-942">source</a><a href="#impl-Builder-for-S3Builder" class="anchor">§</a><h3 clas [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Sftp.html b/docs/rust/opendal/services/struct.Sftp.html
index 48a1a875..8f99c9ee 100644
--- a/docs/rust/opendal/services/struct.Sftp.html
+++ b/docs/rust/opendal/services/struct.Sftp.html
@@ -69,9 +69,7 @@ available values:</p>
 </ul>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.enable_copy" class="method"><a class="srclink rightside" href="../../src/opendal/services/sftp/backend.rs.html#182-186">source</a><h4 class="code-header">pub fn <a href="#method.enable_copy" class="fn">enable_copy</a>(&amp;mut self, enable_copy: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69 [...]
 It requires the server supports copy-file extension.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-SftpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/sftp/backend.rs.html#189-255">source</a><a href="#impl-Builder-for-SftpBuilder" class="anchor">§</a><h [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-SftpBuilder" class="impl"><a class="srclink rightside" href="../../src [...]
+</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-SftpBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/sftp/backend.rs.html#189-255">source</a><a href="#impl-Builder-for-SftpBuilder" class="anchor">§</a><h [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Sled.html b/docs/rust/opendal/services/struct.Sled.html
index cf5681ec..9e32de74 100644
--- a/docs/rust/opendal/services/struct.Sled.html
+++ b/docs/rust/opendal/services/struct.Sled.html
@@ -45,9 +45,7 @@ blocking</li>
 }</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-SledBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/sled/backend.rs.html#80-92">source</a><a href="#impl-SledBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Sled.html" tit [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><a class="srclink rightside" href="../../src/opendal/services/sled/backend.rs.html#88-91">source</a><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(&amp;mut self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.reference. [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-SledBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/sled/backend.rs.html#94-126">source</a><a href="#impl-Builder-for-SledBuilder" class="anchor">§</a><h3 [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-SledBuilder" class="impl"><a class="srclink rightside" href="../../s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-SledBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/sled/backend.rs.html#94-126">source</a><a href="#impl-Builder-for-SledBuilder" class="anchor">§</a><h3 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Supabase.html b/docs/rust/opendal/services/struct.Supabase.html
index eeb4e033..d5525844 100644
--- a/docs/rust/opendal/services/struct.Supabase.html
+++ b/docs/rust/opendal/services/struct.Supabase.html
@@ -64,9 +64,7 @@ Do not set this key if you want to read public bucket</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-SupabaseBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/supabase/backend.rs.html#159-199">source</a><a href="#impl-Builder-for-SupabaseBuilder" class="anc [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-SupabaseBuilder" class="impl"><a class="srclink rightside" href="../.. [...]
+</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-SupabaseBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/supabase/backend.rs.html#159-199">source</a><a href="#impl-Builder-for-SupabaseBuilder" class="anc [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.VercelArtifacts.html b/docs/rust/opendal/services/struct.VercelArtifacts.html
index 50406e9b..490ea694 100644
--- a/docs/rust/opendal/services/struct.VercelArtifacts.html
+++ b/docs/rust/opendal/services/struct.VercelArtifacts.html
@@ -51,9 +51,7 @@ blocking</li>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-VercelArtifactsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/vercel_artifacts/builder.rs.html#97-126">source</a><a href="#impl-Builder-for-VercelArtifac [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-VercelArtifactsBuilder" class="impl"><a class="srclink rightside" hr [...]
+</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-VercelArtifactsBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/vercel_artifacts/builder.rs.html#97-126">source</a><a href="#impl-Builder-for-VercelArtifac [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Wasabi.html b/docs/rust/opendal/services/struct.Wasabi.html
index 68e3405a..8d44001a 100644
--- a/docs/rust/opendal/services/struct.Wasabi.html
+++ b/docs/rust/opendal/services/struct.Wasabi.html
@@ -335,9 +335,7 @@ in virtual host style instead of path style.</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-WasabiBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/wasabi/backend.rs.html#701-885">source</a><a href="#impl-Builder-for-WasabiBuilder" class="anchor">§ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-WasabiBuilder" class="impl"><a class="srclink rightside" href="../../s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-WasabiBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/wasabi/backend.rs.html#701-885">source</a><a href="#impl-Builder-for-WasabiBuilder" class="anchor">§ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Webdav.html b/docs/rust/opendal/services/struct.Webdav.html
index 36d33dca..021b9ae2 100644
--- a/docs/rust/opendal/services/struct.Webdav.html
+++ b/docs/rust/opendal/services/struct.Webdav.html
@@ -65,9 +65,7 @@ Users can use <code>webdav</code> to connect those services.</p>
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
 during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-WebdavBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/webdav/backend.rs.html#179-237">source</a><a href="#impl-Builder-for-WebdavBuilder" class="anchor">§ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-WebdavBuilder" class="impl"><a class="srclink rightside" href="../../s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-WebdavBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/webdav/backend.rs.html#179-237">source</a><a href="#impl-Builder-for-WebdavBuilder" class="anchor">§ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/services/struct.Webhdfs.html b/docs/rust/opendal/services/struct.Webhdfs.html
index 2e6aea53..cdabc6fb 100644
--- a/docs/rust/opendal/services/struct.Webhdfs.html
+++ b/docs/rust/opendal/services/struct.Webhdfs.html
@@ -90,9 +90,7 @@ If both are set, delegation token will be used.</p>
 <p>when building backend, the built backend will check if the root directory
 exits.
 if the directory does not exits, the directory will be automatically created</p>
-</div></details><details class="toggle" open><summary><section id="associatedconstant.SCHEME" class="associatedconstant trait-impl"><a class="srclink rightside" href="../../src/opendal/services/webhdfs/backend.rs.html#176">source</a><a href="#associatedconstant.SCHEME" class="anchor">§</a><h4 class="code-header">const <a href="../trait.Builder.html#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> =  [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-WebhdfsBuilder" class="impl"><a class="srclink rightside" href="../../ [...]
+</div></details><details class="toggle" open><summary><section id="associatedconstant.SCHEME" class="associatedconstant trait-impl"><a class="srclink rightside" href="../../src/opendal/services/webhdfs/backend.rs.html#176">source</a><a href="#associatedconstant.SCHEME" class="anchor">§</a><h4 class="code-header">const <a href="../trait.Builder.html#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> =  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index e46828c0..683b05fd 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Operator is the entry for all public async APIs. Developer should manipulate the data from storage service through Operator only by right."><title>Operator in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f9 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Operator is the entry for all public async APIs. Developer should manipulate the data from storage service through Operator only by right."><title>Operator in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f9 [...]
 Developer should manipulate the data from storage service through Operator only by right.</p>
 <p>We will usually do some general checks and data transformations in this layer,
 like normalizing path from input, checking whether the path refers to one file or one directory, and so on.
@@ -502,7 +502,7 @@ delete instead.</p>
         .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-173">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-261">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;
@@ -543,10 +543,15 @@ to import <code>opendal::Builder</code> trait.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#106-111">source</a><h4 class="code-header">pub fn <a href="#method.from_map" class="fn">from_map</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.from_map" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#115-120">source</a><h4 class="code-header">pub fn <a href="#method.from_map" class="fn">from_map</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;(
     map: <a class="struct" href="https://doc.rust-lang.org/1.69.0/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;
 ) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.OperatorBuilder.html" title="struct opendal::OperatorBuilder">OperatorBuilder</a>&lt;impl <a class="trait" href="raw/trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;&gt;</h4></section></summary><div class="docblock"><p>Create a new operator from given map.</p>
-
+<h5 id="notes-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
+extra vtable lookup and unable to inline. But from_map requires generic
+type parameter which is not always easy to be used.</p>
+<h5 id="examples-27"><a href="#examples-27">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::collections::HashMap;
 
 <span class="kw">use </span>opendal::services::Fs;
@@ -565,24 +570,39 @@ to import <code>opendal::Builder</code> trait.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.from_iter" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#120-125">source</a><h4 class="code-header">pub fn <a href="#method.from_iter" class="fn">from_iter</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;(
-    iter: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)&gt;
-) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.OperatorBuilder.html" title="struct opendal::OperatorBuilder">OperatorBuilder</a>&lt;impl <a class="trait" href="raw/trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>&gt;&gt;</h4></section></summary><div class="docblock"><p>Create a new operator from iter.</p>
-<h5 id="warning"><a href="#warning">WARNING</a></h5>
-<p>It’s better to use <code>from_map</code>. We may remove this API in the
-future.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method"><a class="srclink rightside" href="../src/opendal/types/operator/builder.rs.html#133-136">source</a><h4 class="code-header">pub fn <a href="#method.from_env" class="fn">from_env</a>&lt;B: <a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a>&gt;() -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class=" [...]
-<h5 id="warning-1"><a href="#warning-1">WARNING</a></h5>
-<p>It’s better to use <code>from_map</code>. We may remove this API in the
-future.</p>
-</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#168-172">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-16"><a href="#notes-16">Notes</a></h5>
+</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-224">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.69.0/std/collections/hash/map/struct.HashMap.html" tit [...]
+<h5 id="notes-17"><a href="#notes-17">Notes</a></h5>
+<p>from_map is using static dispatch layers which is zero cost. via_map is
+using dynamic dispatch layers which has a bit runtime overhead with an
+extra vtable lookup and unable to inline. But from_map requires generic
+type parameter which is not always easy to be used.</p>
+<h5 id="examples-28"><a href="#examples-28">Examples</a></h5>
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::collections::HashMap;
+
+<span class="kw">use </span>opendal::Operator;
+<span class="kw">use </span>opendal::Scheme;
+<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>map = HashMap::from([
+        <span class="comment">// Set the root for fs, all operations will happen under this root.
+        //
+        // NOTE: the root must be absolute path.
+        </span>(<span class="string">&quot;root&quot;</span>.to_string(), <span class="string">&quot;/tmp&quot;</span>.to_string()),
+    ]);
+
+    <span class="comment">// Build an `Operator` to start operating the storage.
+    </span><span class="kw">let </span>op: Operator = Operator::via_map(Scheme::Fs, map)<span class="question-mark">?</span>;
+
+    <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#256-260">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-18"><a href="#notes-18">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
 bit runtime overhead with an extra vtable lookup and unable to
 inline.</p>
 <p>It’s always recommended to use <code>OperatorBuilder::layer()</code> instead.</p>
-<h5 id="examples-27"><a href="#examples-27">Examples</a></h5>
+<h5 id="examples-29"><a href="#examples-29">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::layers::LoggingLayer;
 <span class="kw">use </span>opendal::services::Fs;
 <span class="kw">use </span>opendal::Operator;
diff --git a/docs/rust/opendal/struct.OperatorBuilder.html b/docs/rust/opendal/struct.OperatorBuilder.html
index 0afae201..5f892e35 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#223-276">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#264-268">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#311-364">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#352-356">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#271-275">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#359-363">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.69.0/core/panic/unwind [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-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.69.0/core/marker/trait.Send.html" title="trait core::marker::Send [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</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/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 52b8e9ce..90099979 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.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="Builder is used to set up a real underlying service, i.e. storage accessor."><title>Builder 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 [...]
+<!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="Builder is used to set up a real underlying service, i.e. storage accessor."><title>Builder 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 [...]
     type <a href="#associatedtype.Accessor" class="associatedtype">Accessor</a>: <a class="trait" href="raw/trait.Accessor.html" title="trait opendal::raw::Accessor">Accessor</a>;
 
     const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>;
@@ -6,12 +6,6 @@
     // Required methods
     fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/1.69.0/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string: [...]
 <span class="item-spacer"></span>    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::Accessor">Accessor</a>&gt;;
-
-    // Provided methods
-    fn <a href="#method.from_iter" class="fn">from_iter</a>(iter: impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = (<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struc [...]
-       <span class="where">where Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a></span> { ... }
-<span class="item-spacer"></span>    fn <a href="#method.from_env" class="fn">from_env</a>() -&gt; Self
-       <span class="where">where Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a></span> { ... }
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Builder is used to set up a real underlying service, i.e. storage accessor.</p>
 <p>One builder is usually used by <a href="struct.Operator.html" title="struct opendal::Operator"><code>Operator</code></a> during its initialization.
 It can be created by accepting several k-v pairs from one HashMap, one iterator and specific environment variables.</p>
@@ -23,13 +17,9 @@ Because the latter way is obscure and hard to remember how many parameters it wi
 <p>So it is recommended that developer should read related doc of builder carefully when you are working with one service.
 We also promise that every public API will provide detailed documentation.</p>
 <p>It’s recommended to use <a href="struct.Operator.html#method.new" title="associated function opendal::Operator::new"><code>Operator::new</code></a> to avoid use <code>Builder</code> trait directly.</p>
-</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.Accessor" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#43">source</a><h4 class="code-header">type <a href="#associatedtype.Accessor" class="associatedtype">Accessor</a>: <a class="trait" href="raw [...]
-</div></details></div><h2 id="required-associated-consts" class="small-section-header">Required Associated Constants<a href="#required-associated-consts" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedconstant.SCHEME" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#41">source</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" h [...]
-</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#46">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.69. [...]
-</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#74">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="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.from_iter" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#49-54">source</a><h4 class="code-header">fn <a href="#method.from_iter" class="fn">from_iter</a>(iter: impl <a class="trait" href="https://doc.rust-lang.or [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class="docblock"><p>Construct a builder from given iterator.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#57-71">source</a><h4 class="code-header">fn <a href="#method.from_env" class="fn">from_env</a>() -&gt; Self<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class="docblock"><p>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</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-Builder-for-()" class="impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#78-88">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#79">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></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.Accessor" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#42">source</a><h4 class="code-header">type <a href="#associatedtype.Accessor" class="associatedtype">Accessor</a>: <a class="trait" href="raw [...]
+</div></details></div><h2 id="required-associated-consts" class="small-section-header">Required Associated Constants<a href="#required-associated-consts" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedconstant.SCHEME" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#40">source</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" h [...]
+</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.69. [...]
+</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
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index ac766309..6b992532 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":"QNNNDDDDINDNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINDNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/src/opendal/layers/immutable_index.rs.html b/docs/rust/src/opendal/layers/immutable_index.rs.html
index 90a2afa3..04ce1a25 100644
--- a/docs/rust/src/opendal/layers/immutable_index.rs.html
+++ b/docs/rust/src/opendal/layers/immutable_index.rs.html
@@ -463,6 +463,20 @@
 <a href="#463" id="463">463</a>
 <a href="#464" id="464">464</a>
 <a href="#465" id="465">465</a>
+<a href="#466" id="466">466</a>
+<a href="#467" id="467">467</a>
+<a href="#468" id="468">468</a>
+<a href="#469" id="469">469</a>
+<a href="#470" id="470">470</a>
+<a href="#471" id="471">471</a>
+<a href="#472" id="472">472</a>
+<a href="#473" id="473">473</a>
+<a href="#474" id="474">474</a>
+<a href="#475" id="475">475</a>
+<a href="#476" id="476">476</a>
+<a href="#477" id="477">477</a>
+<a href="#478" id="478">478</a>
+<a href="#479" id="479">479</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -497,6 +511,8 @@
 /// # Examples
 ///
 /// ```rust, no_run
+/// use std::collections::HashMap;
+///
 /// use opendal::layers::ImmutableIndexLayer;
 /// use opendal::services;
 /// use opendal::Operator;
@@ -507,7 +523,7 @@
 ///     iil.insert(i.to_string())
 /// }
 ///
-/// let op = Operator::from_env::&lt;services::Http&gt;()
+/// let op = Operator::from_map::&lt;services::Http&gt;(HashMap::default())
 ///     .unwrap()
 ///     .layer(iil)
 ///     .finish();
@@ -754,9 +770,12 @@
             iil.insert(i.to_string())
         }
 
-        <span class="kw">let </span>op = Operator::new(Http::from_iter(
-            <span class="macro">vec!</span>[(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string())].into_iter(),
-        ))<span class="question-mark">?
+        <span class="kw">let </span>op = Operator::new(Http::from_map({
+            <span class="kw">let </span><span class="kw-2">mut </span>map = HashMap::new();
+            map.insert(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string());
+
+            map
+        }))<span class="question-mark">?
         </span>.layer(LoggingLayer::default())
         .layer(iil)
         .finish();
@@ -792,9 +811,12 @@
             iil.insert(i.to_string())
         }
 
-        <span class="kw">let </span>op = Operator::new(Http::from_iter(
-            <span class="macro">vec!</span>[(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string())].into_iter(),
-        ))<span class="question-mark">?
+        <span class="kw">let </span>op = Operator::new(Http::from_map({
+            <span class="kw">let </span><span class="kw-2">mut </span>map = HashMap::new();
+            map.insert(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string());
+
+            map
+        }))<span class="question-mark">?
         </span>.layer(LoggingLayer::default())
         .layer(iil)
         .finish();
@@ -836,9 +858,12 @@
             iil.insert(i.to_string())
         }
 
-        <span class="kw">let </span>op = Operator::new(Http::from_iter(
-            <span class="macro">vec!</span>[(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string())].into_iter(),
-        ))<span class="question-mark">?
+        <span class="kw">let </span>op = Operator::new(Http::from_map({
+            <span class="kw">let </span><span class="kw-2">mut </span>map = HashMap::new();
+            map.insert(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string());
+
+            map
+        }))<span class="question-mark">?
         </span>.layer(LoggingLayer::default())
         .layer(iil)
         .finish();
@@ -897,9 +922,12 @@
             iil.insert(i.to_string())
         }
 
-        <span class="kw">let </span>op = Operator::new(Http::from_iter(
-            <span class="macro">vec!</span>[(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string())].into_iter(),
-        ))<span class="question-mark">?
+        <span class="kw">let </span>op = Operator::new(Http::from_map({
+            <span class="kw">let </span><span class="kw-2">mut </span>map = HashMap::new();
+            map.insert(<span class="string">&quot;endpoint&quot;</span>.to_string(), <span class="string">&quot;https://xuanwo.io&quot;</span>.to_string());
+
+            map
+        }))<span class="question-mark">?
         </span>.layer(LoggingLayer::default())
         .layer(iil)
         .finish();
diff --git a/docs/rust/src/opendal/raw/layer.rs.html b/docs/rust/src/opendal/raw/layer.rs.html
index 06fac89a..a247ea73 100644
--- a/docs/rust/src/opendal/raw/layer.rs.html
+++ b/docs/rust/src/opendal/raw/layer.rs.html
@@ -472,7 +472,7 @@
 ///     }
 ///
 ///     async fn append(&amp;self, path: &amp;str, args: OpAppend) -&gt; Result&lt;(RpAppend, Self::Appender)&gt; {
-///        self.inner.append(path, args).await
+///         self.inner.append(path, args).await
 ///     }
 ///
 ///     async fn list(&amp;self, path: &amp;str, args: OpList) -&gt; Result&lt;(RpList, Self::Pager)&gt; {
diff --git a/docs/rust/src/opendal/services/gdrive/backend.rs.html b/docs/rust/src/opendal/services/gdrive/backend.rs.html
index 721b9183..f4df933f 100644
--- a/docs/rust/src/opendal/services/gdrive/backend.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/backend.rs.html
@@ -121,7 +121,6 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -139,12 +138,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>http::StatusCode;
-
-<span class="kw">use </span>std::fmt::Debug;
+</span><span class="kw">use </span>std::fmt::Debug;
 <span class="kw">use </span>std::sync::Arc;
 
+<span class="kw">use </span>async_trait::async_trait;
+<span class="kw">use </span>http::StatusCode;
+
+<span class="kw">use </span><span class="kw">super</span>::core::GdriveCore;
+<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
+<span class="kw">use </span><span class="kw">super</span>::writer::GdriveWriter;
 <span class="kw">use </span><span class="kw">crate</span>::ops::OpDelete;
 <span class="kw">use </span><span class="kw">crate</span>::ops::OpRead;
 <span class="kw">use </span><span class="kw">crate</span>::ops::OpWrite;
@@ -161,10 +163,6 @@
 <span class="kw">use </span><span class="kw">crate</span>::Error;
 <span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
 
-<span class="kw">use </span><span class="kw">super</span>::core::GdriveCore;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">super</span>::writer::GdriveWriter;
-
 <span class="attr">#[derive(Clone, Debug)]
 </span><span class="kw">pub struct </span>GdriveBackend {
     core: Arc&lt;GdriveCore&gt;,
diff --git a/docs/rust/src/opendal/services/gdrive/core.rs.html b/docs/rust/src/opendal/services/gdrive/core.rs.html
index 1de9b242..cb3fcf3c 100644
--- a/docs/rust/src/opendal/services/gdrive/core.rs.html
+++ b/docs/rust/src/opendal/services/gdrive/core.rs.html
@@ -216,8 +216,6 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -240,12 +238,6 @@
 <span class="kw">use </span>std::fmt::Formatter;
 <span class="kw">use </span>std::sync::Arc;
 
-<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::percent_encode_path;
-<span class="kw">use </span><span class="kw">crate</span>::raw::HttpClient;
-<span class="kw">use </span><span class="kw">crate</span>::Error;
-<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
-
 <span class="kw">use </span>http::header;
 <span class="kw">use </span>http::request::Builder;
 <span class="kw">use </span>http::Request;
@@ -254,13 +246,17 @@
 <span class="kw">use </span>serde::Deserialize;
 <span class="kw">use </span>tokio::sync::Mutex;
 
+<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
 <span class="kw">use </span><span class="kw">crate</span>::raw::build_rooted_abs_path;
+<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_request_build_error;
+<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::HttpClient;
 <span class="kw">use </span><span class="kw">crate</span>::raw::IncomingAsyncBody;
 <span class="kw">use </span><span class="kw">crate</span>::types::Result;
-
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
+<span class="kw">use </span><span class="kw">crate</span>::Error;
+<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
 
 <span class="kw">pub struct </span>GdriveCore {
     <span class="kw">pub </span>root: String,
diff --git a/docs/rust/src/opendal/services/ipmfs/backend.rs.html b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
index 4065853d..c286d0df 100644
--- a/docs/rust/src/opendal/services/ipmfs/backend.rs.html
+++ b/docs/rust/src/opendal/services/ipmfs/backend.rs.html
@@ -334,7 +334,6 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -388,7 +387,6 @@
 /// - [ ] scan
 /// - [ ] presign
 /// - [ ] blocking
-///
 </span><span class="attr">#[derive(Clone)]
 </span><span class="kw">pub struct </span>IpmfsBackend {
     root: String,
diff --git a/docs/rust/src/opendal/services/memcached/ascii.rs.html b/docs/rust/src/opendal/services/memcached/ascii.rs.html
index ccc8b3fe..94c7d72a 100644
--- a/docs/rust/src/opendal/services/memcached/ascii.rs.html
+++ b/docs/rust/src/opendal/services/memcached/ascii.rs.html
@@ -187,15 +187,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">use </span><span class="kw">super</span>::backend::parse_io_error;
-<span class="kw">use </span>tokio::io::AsyncBufReadExt;
+</span><span class="kw">use </span>tokio::io::AsyncBufReadExt;
 <span class="kw">use </span>tokio::io::AsyncReadExt;
 <span class="kw">use </span>tokio::io::AsyncWriteExt;
 <span class="kw">use </span>tokio::io::BufReader;
 <span class="kw">use </span>tokio::net::TcpStream;
 
+<span class="kw">use </span><span class="kw">super</span>::backend::parse_io_error;
+<span class="kw">use crate</span>::<span class="kw-2">*</span>;
+
 <span class="kw">pub struct </span>Connection {
     io: BufReader&lt;TcpStream&gt;,
     buf: Vec&lt;u8&gt;,
diff --git a/docs/rust/src/opendal/services/mod.rs.html b/docs/rust/src/opendal/services/mod.rs.html
index 96d6fc65..82053b83 100644
--- a/docs/rust/src/opendal/services/mod.rs.html
+++ b/docs/rust/src/opendal/services/mod.rs.html
@@ -163,7 +163,6 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -322,7 +321,6 @@
 </span><span class="kw">mod </span>gdrive;
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-gdrive&quot;</span>)]
 </span><span class="kw">pub use </span>gdrive::Gdrive;
-
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-webhdfs&quot;</span>)]
 </span><span class="kw">pub use </span>webhdfs::Webhdfs;
 
diff --git a/docs/rust/src/opendal/services/onedrive/graph_model.rs.html b/docs/rust/src/opendal/services/onedrive/graph_model.rs.html
index 97cb9512..a535c2be 100644
--- a/docs/rust/src/opendal/services/onedrive/graph_model.rs.html
+++ b/docs/rust/src/opendal/services/onedrive/graph_model.rs.html
@@ -314,10 +314,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>serde::Deserialize;
-<span class="kw">use </span>serde::Serialize;
+</span><span class="kw">use </span>std::collections::HashMap;
 
-<span class="kw">use </span>std::collections::HashMap;
+<span class="kw">use </span>serde::Deserialize;
+<span class="kw">use </span>serde::Serialize;
 
 <span class="attr">#[derive(Debug, Serialize, Deserialize)]
 </span><span class="kw">pub struct </span>GraphApiOnedriveListResponse {
diff --git a/docs/rust/src/opendal/services/onedrive/pager.rs.html b/docs/rust/src/opendal/services/onedrive/pager.rs.html
index e24dc355..ecd74845 100644
--- a/docs/rust/src/opendal/services/onedrive/pager.rs.html
+++ b/docs/rust/src/opendal/services/onedrive/pager.rs.html
@@ -154,7 +154,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span><span class="kw">crate</span>::raw::build_rel_path;
+</span><span class="kw">use </span>async_trait::async_trait;
+<span class="kw">use </span>http::Response;
+
+<span class="kw">use </span><span class="kw">super</span>::backend::OnedriveBackend;
+<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
+<span class="kw">use </span><span class="kw">super</span>::graph_model::GraphApiOnedriveListResponse;
+<span class="kw">use </span><span class="kw">super</span>::graph_model::ItemType;
+<span class="kw">use </span><span class="kw">crate</span>::raw::build_rel_path;
 <span class="kw">use </span><span class="kw">crate</span>::raw::build_rooted_abs_path;
 <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::oio::{<span class="self">self</span>};
@@ -162,14 +169,7 @@
 <span class="kw">use </span><span class="kw">crate</span>::raw::IncomingAsyncBody;
 <span class="kw">use </span><span class="kw">crate</span>::EntryMode;
 <span class="kw">use </span><span class="kw">crate</span>::Metadata;
-
-<span class="kw">use </span><span class="kw">super</span>::backend::OnedriveBackend;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">super</span>::graph_model::GraphApiOnedriveListResponse;
-<span class="kw">use </span><span class="kw">super</span>::graph_model::ItemType;
 <span class="kw">use </span><span class="kw">crate</span>::Result;
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>http::Response;
 
 <span class="kw">pub struct </span>OnedrivePager {
     root: String,
diff --git a/docs/rust/src/opendal/services/vercel_artifacts/backend.rs.html b/docs/rust/src/opendal/services/vercel_artifacts/backend.rs.html
index cfc2db13..b8352d9f 100644
--- a/docs/rust/src/opendal/services/vercel_artifacts/backend.rs.html
+++ b/docs/rust/src/opendal/services/vercel_artifacts/backend.rs.html
@@ -172,13 +172,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>async_trait::async_trait;
+</span><span class="kw">use </span>std::fmt::Debug;
+
+<span class="kw">use </span>async_trait::async_trait;
 <span class="kw">use </span>http::header;
 <span class="kw">use </span>http::Request;
 <span class="kw">use </span>http::Response;
 <span class="kw">use </span>http::StatusCode;
-<span class="kw">use </span>std::fmt::Debug;
 
+<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
+<span class="kw">use </span><span class="kw">super</span>::writer::VercelArtifactsWriter;
 <span class="kw">use </span><span class="kw">crate</span>::ops::OpRead;
 <span class="kw">use </span><span class="kw">crate</span>::ops::OpWrite;
 <span class="kw">use </span><span class="kw">crate</span>::raw::new_request_build_error;
@@ -195,9 +198,6 @@
 <span class="kw">use </span><span class="kw">crate</span>::Error;
 <span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
 
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">super</span>::writer::VercelArtifactsWriter;
-
 <span class="attr">#[derive(Clone)]
 </span><span class="kw">pub struct </span>VercelArtifactsBackend {
     <span class="kw">pub</span>(<span class="kw">crate</span>) access_token: String,
diff --git a/docs/rust/src/opendal/types/builder.rs.html b/docs/rust/src/opendal/types/builder.rs.html
index 96d31157..3dc125ea 100644
--- a/docs/rust/src/opendal/types/builder.rs.html
+++ b/docs/rust/src/opendal/types/builder.rs.html
@@ -60,32 +60,6 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -104,7 +78,6 @@
 // under the License.
 
 </span><span class="kw">use </span>std::collections::HashMap;
-<span class="kw">use </span>std::env;
 
 <span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
 <span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -133,31 +106,6 @@
     <span class="doccomment">/// Construct a builder from given map which contains several parameters needed by underlying service.
     </span><span class="kw">fn </span>from_map(map: HashMap&lt;String, String&gt;) -&gt; <span class="self">Self</span>;
 
-    <span class="doccomment">/// Construct a builder from given iterator.
-    </span><span class="kw">fn </span>from_iter(iter: <span class="kw">impl </span>Iterator&lt;Item = (String, String)&gt;) -&gt; <span class="self">Self
-    </span><span class="kw">where
-        </span><span class="self">Self</span>: Sized,
-    {
-        <span class="self">Self</span>::from_map(iter.collect())
-    }
-
-    <span class="doccomment">/// Construct a builder from envs. Please note that the env should begin with `opendal_{schema_name}_`.
-    </span><span class="kw">fn </span>from_env() -&gt; <span class="self">Self
-    </span><span class="kw">where
-        </span><span class="self">Self</span>: Sized,
-    {
-        <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">&quot;opendal_{}_&quot;</span>, <span class="self">Self</span>::SCHEME);
-        <span class="kw">let </span>envs = env::vars()
-            .filter_map(<span class="kw">move </span>|(k, v)| {
-                k.to_lowercase()
-                    .strip_prefix(<span class="kw-2">&amp;</span>prefix)
-                    .map(|k| (k.to_string(), v))
-            })
-            .collect();
-
-        <span class="self">Self</span>::from_map(envs)
-    }
-
     <span class="doccomment">/// Consume the accessor builder to build a service.
     </span><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;;
 }
diff --git a/docs/rust/src/opendal/types/operator/builder.rs.html b/docs/rust/src/opendal/types/operator/builder.rs.html
index d929b3f7..92754ae4 100644
--- a/docs/rust/src/opendal/types/operator/builder.rs.html
+++ b/docs/rust/src/opendal/types/operator/builder.rs.html
@@ -274,6 +274,94 @@
 <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>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -358,6 +446,15 @@
 
     <span class="doccomment">/// Create a new operator from given map.
     ///
+    /// # Notes
+    ///
+    /// from_map is using static dispatch layers which is zero cost. via_map is
+    /// using dynamic dispatch layers which has a bit runtime overhead with an
+    /// extra vtable lookup and unable to inline. But from_map requires generic
+    /// type parameter which is not always easy to be used.
+    ///
+    /// # Examples
+    ///
     /// ```
     /// # use anyhow::Result;
     /// use std::collections::HashMap;
@@ -386,29 +483,108 @@
         <span class="prelude-val">Ok</span>(OperatorBuilder::new(acc))
     }
 
-    <span class="doccomment">/// Create a new operator from iter.
+    <span class="doccomment">/// Create a new operator from given shceme and map.
     ///
-    /// # WARNING
+    /// # Notes
     ///
-    /// It&#39;s better to use `from_map`. We may remove this API in the
-    /// future.
-    </span><span class="attr">#[allow(clippy::should_implement_trait)]
-    </span><span class="kw">pub fn </span>from_iter&lt;B: Builder&gt;(
-        iter: <span class="kw">impl </span>Iterator&lt;Item = (String, String)&gt;,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;OperatorBuilder&lt;<span class="kw">impl </span>Accessor&gt;&gt; {
-        <span class="kw">let </span>acc = B::from_iter(iter).build()<span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(OperatorBuilder::new(acc))
-    }
-
-    <span class="doccomment">/// Create a new operator from env.
+    /// from_map is using static dispatch layers which is zero cost. via_map is
+    /// using dynamic dispatch layers which has a bit runtime overhead with an
+    /// extra vtable lookup and unable to inline. But from_map requires generic
+    /// type parameter which is not always easy to be used.
     ///
-    /// # WARNING
+    /// # Examples
     ///
-    /// It&#39;s better to use `from_map`. We may remove this API in the
-    /// future.
-    </span><span class="kw">pub fn </span>from_env&lt;B: Builder&gt;() -&gt; <span class="prelude-ty">Result</span>&lt;OperatorBuilder&lt;<span class="kw">impl </span>Accessor&gt;&gt; {
-        <span class="kw">let </span>acc = B::from_env().build()<span class="question-mark">?</span>;
-        <span class="prelude-val">Ok</span>(OperatorBuilder::new(acc))
+    /// ```
+    /// # use anyhow::Result;
+    /// use std::collections::HashMap;
+    ///
+    /// use opendal::Operator;
+    /// use opendal::Scheme;
+    /// #[tokio::main]
+    /// async fn main() -&gt; Result&lt;()&gt; {
+    ///     let map = HashMap::from([
+    ///         // Set the root for fs, all operations will happen under this root.
+    ///         //
+    ///         // NOTE: the root must be absolute path.
+    ///         (&quot;root&quot;.to_string(), &quot;/tmp&quot;.to_string()),
+    ///     ]);
+    ///
+    ///     // Build an `Operator` to start operating the storage.
+    ///     let op: Operator = Operator::via_map(Scheme::Fs, map)?;
+    ///
+    ///     Ok(())
+    /// }
+    /// ```
+    </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-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-azdfs&quot;</span>)]
+            </span>Scheme::Azdfs =&gt; <span class="self">Self</span>::from_map::&lt;services::Azdfs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-cos&quot;</span>)]
+            </span>Scheme::Cos =&gt; <span class="self">Self</span>::from_map::&lt;services::Cos&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-dashmap&quot;</span>)]
+            </span>Scheme::Dashmap =&gt; <span class="self">Self</span>::from_map::&lt;services::Dashmap&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-fs&quot;</span>)]
+            </span>Scheme::Fs =&gt; <span class="self">Self</span>::from_map::&lt;services::Fs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-ftp&quot;</span>)]
+            </span>Scheme::Ftp =&gt; <span class="self">Self</span>::from_map::&lt;services::Ftp&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-gcs&quot;</span>)]
+            </span>Scheme::Gcs =&gt; <span class="self">Self</span>::from_map::&lt;services::Gcs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-ghac&quot;</span>)]
+            </span>Scheme::Ghac =&gt; <span class="self">Self</span>::from_map::&lt;services::Ghac&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-hdfs&quot;</span>)]
+            </span>Scheme::Hdfs =&gt; <span class="self">Self</span>::from_map::&lt;services::Hdfs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-http&quot;</span>)]
+            </span>Scheme::Http =&gt; <span class="self">Self</span>::from_map::&lt;services::Http&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-ipfs&quot;</span>)]
+            </span>Scheme::Ipfs =&gt; <span class="self">Self</span>::from_map::&lt;services::Ipfs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-ipmfs&quot;</span>)]
+            </span>Scheme::Ipmfs =&gt; <span class="self">Self</span>::from_map::&lt;services::Ipmfs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-memcached&quot;</span>)]
+            </span>Scheme::Memcached =&gt; <span class="self">Self</span>::from_map::&lt;services::Memcached&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-memory&quot;</span>)]
+            </span>Scheme::Memory =&gt; <span class="self">Self</span>::from_map::&lt;services::Memory&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-moka&quot;</span>)]
+            </span>Scheme::Moka =&gt; <span class="self">Self</span>::from_map::&lt;services::Moka&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-obs&quot;</span>)]
+            </span>Scheme::Obs =&gt; <span class="self">Self</span>::from_map::&lt;services::Obs&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-onedrive&quot;</span>)]
+            </span>Scheme::Onedrive =&gt; <span class="self">Self</span>::from_map::&lt;services::Onedrive&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-gdrive&quot;</span>)]
+            </span>Scheme::Gdrive =&gt; <span class="self">Self</span>::from_map::&lt;services::Gdrive&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-oss&quot;</span>)]
+            </span>Scheme::Oss =&gt; <span class="self">Self</span>::from_map::&lt;services::Oss&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-redis&quot;</span>)]
+            </span>Scheme::Redis =&gt; <span class="self">Self</span>::from_map::&lt;services::Redis&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-rocksdb&quot;</span>)]
+            </span>Scheme::Rocksdb =&gt; <span class="self">Self</span>::from_map::&lt;services::Rocksdb&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-s3&quot;</span>)]
+            </span>Scheme::S3 =&gt; <span class="self">Self</span>::from_map::&lt;services::S3&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-sftp&quot;</span>)]
+            </span>Scheme::Sftp =&gt; <span class="self">Self</span>::from_map::&lt;services::Sftp&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-sled&quot;</span>)]
+            </span>Scheme::Sled =&gt; <span class="self">Self</span>::from_map::&lt;services::Sled&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-supabase&quot;</span>)]
+            </span>Scheme::Supabase =&gt; <span class="self">Self</span>::from_map::&lt;services::Supabase&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-vercel-artifacts&quot;</span>)]
+            </span>Scheme::VercelArtifacts =&gt; <span class="self">Self</span>::from_map::&lt;services::VercelArtifacts&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-wasabi&quot;</span>)]
+            </span>Scheme::Wasabi =&gt; <span class="self">Self</span>::from_map::&lt;services::Wasabi&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-webdav&quot;</span>)]
+            </span>Scheme::Webdav =&gt; <span class="self">Self</span>::from_map::&lt;services::Webdav&gt;(map)<span class="question-mark">?</span>.finish(),
+            <span class="attr">#[cfg(feature = <span class="string">&quot;services-webhdfs&quot;</span>)]
+            </span>Scheme::Webhdfs =&gt; <span class="self">Self</span>::from_map::&lt;services::Webhdfs&gt;(map)<span class="question-mark">?</span>.finish(),
+            v =&gt; {
+                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                    ErrorKind::Unsupported,
+                    <span class="string">&quot;scheme is not enabled or supported&quot;</span>,
+                )
+                .with_context(<span class="string">&quot;scheme&quot;</span>, v))
+            }
+        };
+
+        <span class="prelude-val">Ok</span>(op)
     }
 
     <span class="doccomment">/// Create a new layer with dynamic dispatch.
diff --git a/docs/rust/src/opendal/types/scheme.rs.html b/docs/rust/src/opendal/types/scheme.rs.html
index bb1405a1..7048f3cf 100644
--- a/docs/rust/src/opendal/types/scheme.rs.html
+++ b/docs/rust/src/opendal/types/scheme.rs.html
@@ -195,6 +195,7 @@
 <a href="#195" id="195">195</a>
 <a href="#196" id="196">196</a>
 <a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
 </pre><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -238,6 +239,8 @@
     </span>Dashmap,
     <span class="doccomment">/// [fs][crate::services::Fs]: POSIX alike file system.
     </span>Fs,
+    <span class="doccomment">/// [ftp][crate::services::Ftp]: FTP backend.
+    </span>Ftp,
     <span class="doccomment">/// [gcs][crate::services::Gcs]: Google Cloud Storage backend.
     </span>Gcs,
     <span class="doccomment">/// [ghac][crate::services::Ghac]: GitHub Action Cache services.
@@ -246,8 +249,7 @@
     </span>Hdfs,
     <span class="doccomment">/// [http][crate::services::Http]: HTTP backend.
     </span>Http,
-    <span class="doccomment">/// [ftp][crate::services::Ftp]: FTP backend.
-    </span>Ftp,
+
     <span class="doccomment">/// [ipmfs][crate::services::Ipfs]: IPFS HTTP Gateway
     </span>Ipfs,
     <span class="doccomment">/// [ipmfs][crate::services::Ipmfs]: IPFS mutable file system
diff --git a/docs/vision/index.html b/docs/vision/index.html
index e11d2455..65a842ac 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 48d29710..66a9ca3d 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.64f7176b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.998715dd.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hid [...]
-<script src="/assets/js/runtime~main.64f7176b.js"></script>
+<script src="/assets/js/runtime~main.998715dd.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file