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/03/24 17:11:05 UTC

[incubator-opendal] branch gh-pages updated: deploy: d2d56b3735b1687a920977c7728b8f130b5aa5a0

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 06a9f543 deploy: d2d56b3735b1687a920977c7728b8f130b5aa5a0
06a9f543 is described below

commit 06a9f543e9c881dd70d37c47fed8624939c84b97
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Fri Mar 24 17:11:00 2023 +0000

    deploy: d2d56b3735b1687a920977c7728b8f130b5aa5a0
---
 404.html                                           |  4 +--
 .../{1db64337.6f5500b1.js => 1db64337.d31fcf0c.js} |  2 +-
 assets/js/runtime~main.50f03449.js                 |  1 -
 assets/js/runtime~main.fcb2a04f.js                 |  1 +
 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/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                  | 32 ++++++++---------
 docs/overview/index.html                           |  6 ++--
 docs/python/opendal.html                           | 30 ++++++++--------
 docs/python/search.js                              |  2 +-
 docs/rust/opendal/struct.BlockingOperator.html     | 24 ++++++-------
 docs/rust/opendal/struct.Operator.html             | 42 +++++++++++-----------
 .../types/operator/blocking_operator.rs.html       | 18 +++++-----
 .../src/opendal/types/operator/operator.rs.html    | 18 +++++-----
 index.html                                         |  4 +--
 22 files changed, 119 insertions(+), 115 deletions(-)

diff --git a/404.html b/404.html
index 3d18c088..9a4aa8f5 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/1db64337.6f5500b1.js b/assets/js/1db64337.d31fcf0c.js
similarity index 61%
rename from assets/js/1db64337.6f5500b1.js
rename to assets/js/1db64337.d31fcf0c.js
index 2d10ec99..1223b57b 100644
--- a/assets/js/1db64337.6f5500b1.js
+++ b/assets/js/1db64337.d31fcf0c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[372],{6777:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>n,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>d,toc:()=>v});var o=i(7462),r=(i(7294),i(3905));const a={sidebar_position:1,title:"Overview"},s=void 0,d={unversionedId:"overview",id:"overview",title:"Overview",description:"",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/docs/overview",draft:!1,editUrl: [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[372],{6777:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>n,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>d,toc:()=>v});var o=i(7462),r=(i(7294),i(3905));const a={sidebar_position:1,title:"Overview"},s=void 0,d={unversionedId:"overview",id:"overview",title:"Overview",description:"",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/docs/overview",draft:!1,editUrl: [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.50f03449.js b/assets/js/runtime~main.50f03449.js
deleted file mode 100644
index 4291fa2d..00000000
--- a/assets/js/runtime~main.50f03449.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,t,r,o,a,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={exports:{}};return n[e].call(r.exports,r,r.exports,f),r.exports}f.m=n,e=[],f.O=(t,r,o,a)=>{if(!r){var n=1/0;for(b=0;b<e.length;b++){r=e[b][0],o=e[b][1],a=e[b][2];for(var c=!0,d=0;d<r.length;d++)(!1&a||n>=a)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(c=!1,a<n&&(n=a));if(c){e.splice(b--,1);var i=o();void 0!==i&&(t=i)}}return t}a=a||0;for(var b=e.length;b>0&&e[b-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.fcb2a04f.js b/assets/js/runtime~main.fcb2a04f.js
new file mode 100644
index 00000000..94a920f2
--- /dev/null
+++ b/assets/js/runtime~main.fcb2a04f.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,t,r,o,a,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,o,a)=>{if(!r){var n=1/0;for(b=0;b<e.length;b++){r=e[b][0],o=e[b][1],a=e[b][2];for(var f=!0,i=0;i<r.length;i++)(!1&a||n>=a)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(f=!1,a<n&&(n=a));if(f){e.splice(b--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var b=e.length;b>0&&e[b-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 77afa281..947d0627 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 4b6f69d0..d9509674 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.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 6cf0d3b4..7fc16cf8 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.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 0f35d980..b56b05a1 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 49cebe33..ca88f0bb 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.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 837eb561..e3563c89 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/a04a724/bindings/nodejs/index.d.ts#L101">index.d.ts:101</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L101">index.d.ts:101</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/a04a724/bindings/nodejs/index.d.ts#L102">index.d.ts:102</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L102">index.d.ts:102</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 ee5f066b..daa76c12 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/a04a724/bindings/nodejs/index.d.ts#L68">index.d.ts:68</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L68">index.d.ts:68</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/a04a724/bindings/nodejs/index.d.ts#L70">index.d.ts:70</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L70">index.d.ts:70</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 e0f00de9..8f64080e 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/a04a724/bindings/nodejs/index.d.ts#L90">index.d.ts:90</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L90">index.d.ts:90</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/a04a724/bindings/nodejs/index.d.ts#L99">index.d.ts:99</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L99">index.d.ts:99</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 24db5672..455953ac 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/a04a724/bindings/nodejs/index.d.ts#L72">index.d.ts:72</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L72">index.d.ts:72</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/a04a724/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L78">index.d.ts:78</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/a04a724/bindings/nodejs/index.d.ts#L80">index.d.ts:80</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L80">index.d.ts:80</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/a04a724/bindings/nodejs/index.d.ts#L82">index.d.ts:82</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L82">index.d.ts:82</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/a04a724/bindings/nodejs/index.d.ts#L84">index.d.ts:84</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L84">index.d.ts:84</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/a04a724/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/d2d56b3/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-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">
@@ -113,7 +113,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/a04a724/bindings/nodejs/index.d.ts#L88">index.d.ts:88</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L88">index.d.ts:88</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>
@@ -125,7 +125,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/a04a724/bindings/nodejs/index.d.ts#L74">index.d.ts:74</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L74">index.d.ts:74</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">
@@ -135,7 +135,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/a04a724/bindings/nodejs/index.d.ts#L76">index.d.ts:76</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L76">index.d.ts:76</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 25aa126c..69629bd4 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/a04a724/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/d2d56b3/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">
@@ -63,7 +63,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/a04a724/bindings/nodejs/index.d.ts#L26">index.d.ts:26</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L26">index.d.ts:26</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="createDir" class="tsd-anchor"></a>
@@ -80,7 +80,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/a04a724/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L32">index.d.ts:32</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">
@@ -95,7 +95,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/a04a724/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L34">index.d.ts:34</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">
@@ -110,7 +110,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/a04a724/bindings/nodejs/index.d.ts#L48">index.d.ts:48</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L48">index.d.ts:48</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">
@@ -125,7 +125,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/a04a724/bindings/nodejs/index.d.ts#L50">index.d.ts:50</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L50">index.d.ts:50</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">
@@ -142,7 +142,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/a04a724/bindings/nodejs/index.d.ts#L58">index.d.ts:58</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L58">index.d.ts:58</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">
@@ -159,7 +159,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/a04a724/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/d2d56b3/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="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">
@@ -174,7 +174,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/a04a724/bindings/nodejs/index.d.ts#L40">index.d.ts:40</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L40">index.d.ts:40</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">
@@ -189,7 +189,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/a04a724/bindings/nodejs/index.d.ts#L42">index.d.ts:42</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L42">index.d.ts:42</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">
@@ -204,7 +204,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/a04a724/bindings/nodejs/index.d.ts#L44">index.d.ts:44</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L44">index.d.ts:44</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">
@@ -219,7 +219,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/a04a724/bindings/nodejs/index.d.ts#L46">index.d.ts:46</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L46">index.d.ts:46</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">
@@ -234,7 +234,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/a04a724/bindings/nodejs/index.d.ts#L28">index.d.ts:28</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L28">index.d.ts:28</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">
@@ -249,7 +249,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/a04a724/bindings/nodejs/index.d.ts#L30">index.d.ts:30</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L30">index.d.ts:30</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">
@@ -266,7 +266,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/a04a724/bindings/nodejs/index.d.ts#L36">index.d.ts:36</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L36">index.d.ts:36</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">
@@ -283,7 +283,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/a04a724/bindings/nodejs/index.d.ts#L38">index.d.ts:38</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d2d56b3/bindings/nodejs/index.d.ts#L38">index.d.ts:38</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/overview/index.html b/docs/overview/index.html
index f40aa276..c4d77634 100644
--- a/docs/overview/index.html
+++ b/docs/overview/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/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.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.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 7a07c62b..9dbdf391 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -156,10 +156,10 @@
                     <a class="class" href="#Metadata">Metadata</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
@@ -168,7 +168,7 @@
                                 <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                 </ul>
 
@@ -852,28 +852,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="Metadata.content_length" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_length</span><span class="annotation">: int</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_length"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>Content length of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
@@ -904,15 +904,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.content_length" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+            <span class="name">content_length</span><span class="annotation">: int</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.content_length"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>Content length of this entry.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index 1b005db2..45ea7ccd 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/struct.BlockingOperator.html b/docs/rust/opendal/struct.BlockingOperator.html
index cac01e2b..3c0b9c5b 100644
--- a/docs/rust/opendal/struct.BlockingOperator.html
+++ b/docs/rust/opendal/struct.BlockingOperator.html
@@ -28,7 +28,7 @@
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
 
 <span class="kw">let </span>info = op.info();</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#112-652">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div  [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#112-653">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div  [...]
 <h5 id="notes"><a href="#notes">Notes</a></h5>
 <p>Use <code>stat</code> if you:</p>
 <ul>
@@ -100,7 +100,7 @@ cache. In this way, we can make sure that no API call will send.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#293-309">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="t [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#293-310">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="t [...]
 <h5 id="notes-2"><a href="#notes-2">Notes</a></h5>
 <p>To indicate that a path is a directory, it is compulsory to include
 a trailing / in the path. Failure to do so may result in
@@ -112,23 +112,23 @@ a trailing / in the path. Failure to do so may result in
 </ul>
 <h5 id="examples-4"><a href="#examples-4">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.create_dir(<span class="string">&quot;path/to/dir/&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#327-329">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#328-330">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
 <p>This function will allocate a new bytes internally. For more precise memory control or
 reading data lazily, please use <a href="struct.BlockingOperator.html#method.reader" title="BlockingOperator::reader"><code>BlockingOperator::reader</code></a></p>
 <h5 id="examples-5"><a href="#examples-5">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.read(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#348-376">source</a><h4 class="code-header">pub fn <a href="#method.range_read" class="fn">range_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#349-377">source</a><h4 class="code-header">pub fn <a href="#method.range_read" class="fn">range_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, [...]
 <p>This function will allocate a new bytes internally. For more precise memory control or
 reading data lazily, please use <a href="struct.BlockingOperator.html#method.range_reader" title="BlockingOperator::range_reader"><code>BlockingOperator::range_reader</code></a></p>
 <h5 id="examples-6"><a href="#examples-6">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.range_read(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#391-393">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#392-394">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
 <h5 id="examples-7"><a href="#examples-7">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.reader(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#408-423">source</a><h4 class="code-header">pub fn <a href="#method.range_reader" class="fn">range_reader</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">st [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#409-424">source</a><h4 class="code-header">pub fn <a href="#method.range_reader" class="fn">range_reader</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">st [...]
 <h5 id="examples-8"><a href="#examples-8">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.range_reader(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#445-447">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.68.1/core [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#446-448">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.68.1/core [...]
 <h5 id="notes-3"><a href="#notes-3">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -137,7 +137,7 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.ran
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
 
 op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#470-487">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#471-488">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, [...]
 <h5 id="notes-4"><a href="#notes-4">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -149,7 +149,7 @@ op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macr
 <span class="kw">let </span>bs = <span class="string">b&quot;hello, world!&quot;</span>.to_vec();
 <span class="kw">let </span>ow = OpWrite::new().with_content_type(<span class="string">&quot;text/plain&quot;</span>);
 <span class="kw">let _ </span>= op.write_with(<span class="string">&quot;hello.txt&quot;</span>, ow, bs)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#512-526">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#513-527">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
 <h5 id="notes-5"><a href="#notes-5">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -161,14 +161,14 @@ op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macr
 w.append(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
 w.append(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
 w.close()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#545-551">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#546-552">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal: [...]
 <h5 id="notes-6"><a href="#notes-6">Notes</a></h5>
 <ul>
 <li>Delete not existing error won’t return errors.</li>
 </ul>
 <h5 id="examples-12"><a href="#examples-12">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">&quot;path/to/file&quot;</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#586-601">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#587-602">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if path doesn’t end with <code>/</code>.</p>
 <h5 id="examples-13"><a href="#examples-13">Examples</a></h5>
@@ -188,7 +188,7 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#636-651">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#637-652">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Resul [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
 <h5 id="examples-14"><a href="#examples-14">Examples</a></h5>
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index f3091b5e..29f56d8b 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -29,7 +29,7 @@
 <span class="kw">let </span>info = op.info();</code></pre></div>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.blocking" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#120-122">source</a><h4 class="code-header">pub fn <a href="#method.blocking" class="fn">blocking</a>(&amp;self) -&gt; <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h4></section></summary><div class="docblock"><p>Cr [...]
 <p>This operation is nearly no cost.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#126-884">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator async API.</p>
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#126-885">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator async API.</p>
 </div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.check" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#142-149">source</a><h4 class="code-header">pub async fn <a href="#method.check" class="fn">check</a>(&amp;self) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive [...]
 <p>We will send a <code>list</code> request to path and return any errors we met.</p>
 
@@ -112,7 +112,7 @@ cache. In this way, we can make sure that no API call will send.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#344-361">source</a><h4 class="code-header">pub async fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#344-362">source</a><h4 class="code-header">pub async fn <a href="#method.create_dir" class="fn">create_dir</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type [...]
 <h5 id="notes-2"><a href="#notes-2">Notes</a></h5>
 <p>To indicate that a path is a directory, it is compulsory to include
 a trailing / in the path. Failure to do so may result in
@@ -124,12 +124,12 @@ a trailing / in the path. Failure to do so may result in
 </ul>
 <h5 id="examples-4"><a href="#examples-4">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.create_dir(<span class="string">&quot;path/to/dir/&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#380-382">source</a><h4 class="code-header">pub async fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#381-383">source</a><h4 class="code-header">pub async fn <a href="#method.read" class="fn">read</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
 <p>This function will allocate a new bytes internally. For more precise memory control or
 reading data lazily, please use <a href="struct.Operator.html#method.reader" title="Operator::reader"><code>Operator::reader</code></a></p>
 <h5 id="examples-5"><a href="#examples-5">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.read(<span class="string">&quot;path/to/file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#405-446">source</a><h4 class="code-header">pub async fn <a href="#method.range_read" class="fn">range_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#406-447">source</a><h4 class="code-header">pub async fn <a href="#method.range_read" class="fn">range_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
 <p>This function will allocate a new bytes internally. For more precise memory control or
 reading data lazily, please use <a href="struct.Operator.html#method.range_reader" title="Operator::range_reader"><code>Operator::range_reader</code></a></p>
 <h5 id="notes-3"><a href="#notes-3">Notes</a></h5>
@@ -138,17 +138,17 @@ reading data lazily, please use <a href="struct.Operator.html#method.range_reade
 </ul>
 <h5 id="examples-6"><a href="#examples-6">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.range_read(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#463-465">source</a><h4 class="code-header">pub async fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#464-466">source</a><h4 class="code-header">pub async fn <a href="#method.reader" class="fn">reader</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
 <h5 id="examples-7"><a href="#examples-7">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.reader(<span class="string">&quot;path/to/file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#485-500">source</a><h4 class="code-header">pub async fn <a href="#method.range_reader" class="fn">range_reader</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.range_reader" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#486-501">source</a><h4 class="code-header">pub async fn <a href="#method.range_reader" class="fn">range_reader</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</ [...]
 <h5 id="notes-4"><a href="#notes-4">Notes</a></h5>
 <ul>
 <li>The returning content’s length may be smaller than the range specified.</li>
 </ul>
 <h5 id="examples-8"><a href="#examples-8">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.range_reader(<span class="string">&quot;path/to/file&quot;</span>, <span class="number">1024</span>..<span class="number">2048</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#523-525">source</a><h4 class="code-header">pub async fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.68.1/core/co [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#524-526">source</a><h4 class="code-header">pub async fn <a href="#method.write" class="fn">write</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/1.68.1/core/co [...]
 <h5 id="notes-5"><a href="#notes-5">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -157,7 +157,7 @@ reading data lazily, please use <a href="struct.Operator.html#method.range_reade
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
 
 op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#551-565">source</a><h4 class="code-header">pub async fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#552-566">source</a><h4 class="code-header">pub async fn <a href="#method.writer" class="fn">writer</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
 <h5 id="notes-6"><a href="#notes-6">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -169,7 +169,7 @@ op.write(<span class="string">&quot;path/to/file&quot;</span>, <span class="macr
 w.append(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
 w.append(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
 w.close().<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#589-606">source</a><h4 class="code-header">pub async fn <a href="#method.write_with" class="fn">write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#590-607">source</a><h4 class="code-header">pub async fn <a href="#method.write_with" class="fn">write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
 <h5 id="notes-7"><a href="#notes-7">Notes</a></h5>
 <ul>
 <li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -181,20 +181,20 @@ w.close().<span class="kw">await</span><span class="question-mark">?</span>;</co
 <span class="kw">let </span>bs = <span class="string">b&quot;hello, world!&quot;</span>.to_vec();
 <span class="kw">let </span>args = OpWrite::new().with_content_type(<span class="string">&quot;text/plain&quot;</span>);
 <span class="kw">let _ </span>= op.write_with(<span class="string">&quot;path/to/file&quot;</span>, args, bs).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#626-632">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#627-633">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Re [...]
 <h5 id="notes-8"><a href="#notes-8">Notes</a></h5>
 <ul>
 <li>Delete not existing error won’t return errors.</li>
 </ul>
 <h5 id="examples-12"><a href="#examples-12">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">&quot;test&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#654-656">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&amp;self, paths: <a class="struct" href="https://doc.rust-lang.org/1.68.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#655-657">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&amp;self, paths: <a class="struct" href="https://doc.rust-lang.org/1.68.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust [...]
 <p>If underlying services support delete in batch, we will use batch
 delete instead.</p>
 <h5 id="examples-13"><a href="#examples-13">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove(<span class="macro">vec!</span>[<span class="string">&quot;abc&quot;</span>.to_string(), <span class="string">&quot;def&quot;</span>.to_string()])
     .<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#684-712">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;input: impl Stream&lt;Item = <a class="struct" href="https://doc.rust-lang.org/1.68.1/alloc/string/struct. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#685-713">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;input: impl Stream&lt;Item = <a class="struct" href="https://doc.rust-lang.org/1.68.1/alloc/string/struct. [...]
 remove_via will remove files via given stream.</p>
 <p>We will delete by chunks with given batch limit on the stream.</p>
 <h5 id="notes-10"><a href="#notes-10">Notes</a></h5>
@@ -204,13 +204,13 @@ delete instead.</p>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::stream;
 <span class="kw">let </span>stream = stream::iter(<span class="macro">vec!</span>[<span class="string">&quot;abc&quot;</span>.to_string(), <span class="string">&quot;def&quot;</span>.to_string()]);
 op.remove_via(stream).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#734-780">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#735-781">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type [...]
 <h5 id="notes-11"><a href="#notes-11">Notes</a></h5>
 <p>If underlying services support delete in batch, we will use batch
 delete instead.</p>
 <h5 id="examples-15"><a href="#examples-15">Examples</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove_all(<span class="string">&quot;path/to/dir&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#815-831">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#816-832">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
 <h5 id="examples-16"><a href="#examples-16">Examples</a></h5>
@@ -231,7 +231,7 @@ delete instead.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#867-883">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#868-884">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
 <p>This function will create a new handle to list entries.</p>
 <p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
 <h5 id="examples-17"><a href="#examples-17">Examples</a></h5>
@@ -252,8 +252,8 @@ delete instead.</p>
         EntryMode::Unknown =&gt; <span class="kw">continue</span>,
     }
 }</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#887-1056">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
-</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#909-916">source</a><h4 class="code-header">pub fn <a href="#method.presign_stat" class="fn">presign_stat</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.htm [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#888-1057">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
+</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#910-917">source</a><h4 class="code-header">pub fn <a href="#method.presign_stat" class="fn">presign_stat</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.htm [...]
 <h5 id="example-1"><a href="#example-1">Example</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
 <span class="kw">use </span>futures::io;
@@ -268,7 +268,7 @@ delete instead.</p>
         .uri(signed_req.uri())
         .body(())<span class="question-mark">?</span>;
 </code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#944-951">source</a><h4 class="code-header">pub fn <a href="#method.presign_read" class="fn">presign_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#945-952">source</a><h4 class="code-header">pub fn <a href="#method.presign_read" class="fn">presign_read</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a>,<br [...]
 <h5 id="example-2"><a href="#example-2">Example</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
 <span class="kw">use </span>futures::io;
@@ -285,7 +285,7 @@ delete instead.</p>
 </ul>
 <p>We can download this file via <code>curl</code> or other tools without credentials:</p>
 <div class="example-wrap"><pre class="language-shell"><code>curl &quot;https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&amp;X-Amz-Date=20130721T201207Z&amp;X-Amz-Expires=86400&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=&lt;signature-value&gt;&quot; -O /tmp/test.txt
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#974-986">source</a><h4 class="code-header">pub fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/s [...]
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#975-987">source</a><h4 class="code-header">pub fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/s [...]
 <p>You can pass <code>OpRead</code> to this method to specify the content disposition.</p>
 <h5 id="example-3"><a href="#example-3">Example</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
@@ -299,7 +299,7 @@ delete instead.</p>
     <span class="kw">let </span>args = OpRead::new()
         .with_override_content_disposition(<span class="string">&quot;attachment; filename=\&quot;othertext.txt\&quot;&quot;</span>);
     <span class="kw">let </span>signed_req = op.presign_read_with(<span class="string">&quot;test.txt&quot;</span>, args, Duration::hours(<span class="number">1</span>))<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1014-1016">source</a><h4 class="code-header">pub fn <a href="#method.presign_write" class="fn">presign_write</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1015-1017">source</a><h4 class="code-header">pub fn <a href="#method.presign_write" class="fn">presign_write</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.68.1/std/primitive.str.html">str</a [...]
 <h5 id="example-4"><a href="#example-4">Example</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
 <span class="kw">use </span>futures::io;
@@ -316,7 +316,7 @@ delete instead.</p>
 </ul>
 <p>We can upload file as this file via <code>curl</code> or other tools without credential:</p>
 <div class="example-wrap"><pre class="language-shell"><code>curl -X PUT &quot;https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&amp;X-Amz-Date=20130721T201207Z&amp;X-Amz-Expires=86400&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=&lt;signature-value&gt;&quot; -d &quot;Hello, World!&quot;
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1043-1055">source</a><h4 class="code-header">pub fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.6 [...]
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method has-srclink"><a class="srclink rightside" href="../src/opendal/types/operator/operator.rs.html#1044-1056">source</a><h4 class="code-header">pub fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.6 [...]
 <p>You can pass <code>OpWrite</code> to this method to specify the content length and content type.</p>
 <h5 id="example-5"><a href="#example-5">Example</a></h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
diff --git a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
index 11c5b399..73c66cac 100644
--- a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
@@ -650,6 +650,7 @@
 <a href="#650" id="650">650</a>
 <a href="#651" id="651">651</a>
 <a href="#652" id="652">652</a>
+<a href="#653" id="653">653</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
@@ -946,12 +947,13 @@
         <span class="kw">let </span>path = normalize_path(path);
 
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
-            <span class="kw">return </span><span class="prelude-val">Err</span>(
-                Error::new(ErrorKind::NotADirectory, <span class="string">&quot;read path is not a directory&quot;</span>)
-                    .with_operation(<span class="string">&quot;create_dir&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.inner().info().scheme())
-                    .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path),
-            );
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::NotADirectory,
+                <span class="string">&quot;the path trying to create should end with `/`&quot;</span>,
+            )
+            .with_operation(<span class="string">&quot;create_dir&quot;</span>)
+            .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.inner().info().scheme())
+            .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path));
         }
 
         <span class="self">self</span>.inner()
@@ -1241,7 +1243,7 @@
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
             <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
                 ErrorKind::NotADirectory,
-                <span class="string">&quot;the path trying to list is not a directory&quot;</span>,
+                <span class="string">&quot;the path trying to list should end with `/`&quot;</span>,
             )
             .with_operation(<span class="string">&quot;BlockingOperator::list&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
@@ -1291,7 +1293,7 @@
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
             <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
                 ErrorKind::NotADirectory,
-                <span class="string">&quot;the path trying to list is not a directory&quot;</span>,
+                <span class="string">&quot;the path trying to scan should end with `/`&quot;</span>,
             )
             .with_operation(<span class="string">&quot;BlockingOperator::scan&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
diff --git a/docs/rust/src/opendal/types/operator/operator.rs.html b/docs/rust/src/opendal/types/operator/operator.rs.html
index 6b709399..a7147bdf 100644
--- a/docs/rust/src/opendal/types/operator/operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator.rs.html
@@ -1054,6 +1054,7 @@
 <a href="#1054" id="1054">1054</a>
 <a href="#1055" id="1055">1055</a>
 <a href="#1056" id="1056">1056</a>
+<a href="#1057" id="1057">1057</a>
 </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
@@ -1401,12 +1402,13 @@
         <span class="kw">let </span>path = normalize_path(path);
 
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
-            <span class="kw">return </span><span class="prelude-val">Err</span>(
-                Error::new(ErrorKind::NotADirectory, <span class="string">&quot;read path is not a directory&quot;</span>)
-                    .with_operation(<span class="string">&quot;create_dir&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.inner().info().scheme())
-                    .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path),
-            );
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::NotADirectory,
+                <span class="string">&quot;the path trying to create should end with `/`&quot;</span>,
+            )
+            .with_operation(<span class="string">&quot;create_dir&quot;</span>)
+            .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.inner().info().scheme())
+            .with_context(<span class="string">&quot;path&quot;</span>, <span class="kw-2">&amp;</span>path));
         }
 
         <span class="self">self</span>.inner()
@@ -1874,7 +1876,7 @@
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
             <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
                 ErrorKind::NotADirectory,
-                <span class="string">&quot;the path trying to list is not a directory&quot;</span>,
+                <span class="string">&quot;the path trying to list should end with `/`&quot;</span>,
             )
             .with_operation(<span class="string">&quot;Operator::list&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
@@ -1926,7 +1928,7 @@
         <span class="kw">if </span>!validate_path(<span class="kw-2">&amp;</span>path, EntryMode::DIR) {
             <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
                 ErrorKind::NotADirectory,
-                <span class="string">&quot;the path trying to list is not a directory&quot;</span>,
+                <span class="string">&quot;the path trying to scan should end with `/`&quot;</span>,
             )
             .with_operation(<span class="string">&quot;scan&quot;</span>)
             .with_context(<span class="string">&quot;service&quot;</span>, <span class="self">self</span>.info().scheme().into_static())
diff --git a/index.html b/index.html
index 58988d9e..5628f7bb 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.50f03449.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.fcb2a04f.js" as="script">
 <link rel="preload" href="/assets/js/main.d23512d8.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.50f03449.js"></script>
+<script src="/assets/js/runtime~main.fcb2a04f.js"></script>
 <script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file