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

[incubator-opendal] branch gh-pages updated: deploy: 18c9e03a2b61f12572043804b37ef1838341e035

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 86f944d1 deploy: 18c9e03a2b61f12572043804b37ef1838341e035
86f944d1 is described below

commit 86f944d10c63860c50ff0eb3b7f87ec1a23a53c2
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Mon May 8 03:37:13 2023 +0000

    deploy: 18c9e03a2b61f12572043804b37ef1838341e035
---
 404.html                                           |   4 +-
 assets/js/ae4554eb.c61b8d18.js                     |   1 +
 assets/js/ae4554eb.ce0f3c43.js                     |   1 -
 assets/js/c377a04b.2a7867cc.js                     |   1 +
 assets/js/c377a04b.66c3cfdd.js                     |   1 -
 ...e~main.3708b2d1.js => runtime~main.2f2c1b80.js} |   2 +-
 blog/archive/index.html                            |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 docs/index.html                                    |   6 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  56 +++---
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 docs/python/opendal.html                           |  40 ++---
 docs/python/search.js                              |   2 +-
 docs/rust/implementors/core/clone/trait.Clone.js   |   2 +-
 .../implementors/core/default/trait.Default.js     |   2 +-
 docs/rust/implementors/core/fmt/trait.Debug.js     |   2 +-
 docs/rust/implementors/core/marker/trait.Copy.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Freeze.js |   2 +-
 docs/rust/implementors/core/marker/trait.Send.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Sync.js   |   2 +-
 docs/rust/implementors/core/marker/trait.Unpin.js  |   2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |   2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |   2 +-
 docs/rust/opendal/all.html                         |   2 +-
 .../adapters/typed_kv/api/struct.Capability.html   |  11 ++
 .../raw/adapters/typed_kv/api/struct.Info.html     |  11 ++
 docs/rust/opendal/raw/adapters/typed_kv/index.html |   5 +-
 .../opendal/raw/adapters/typed_kv/sidebar-items.js |   2 +-
 .../raw/adapters/typed_kv/struct.Backend.html      |  46 ++---
 .../raw/adapters/typed_kv/struct.Capability.html   |  31 ++++
 .../opendal/raw/adapters/typed_kv/struct.Info.html |  24 +++
 .../raw/adapters/typed_kv/struct.Value.html        |   8 +-
 .../raw/adapters/typed_kv/trait.Adapter.html       |  37 +++-
 docs/rust/opendal/raw/trait.Accessor.html          |   2 +-
 docs/rust/opendal/services/struct.Dashmap.html     |   2 +-
 docs/rust/opendal/trait.Builder.html               |   2 +-
 docs/rust/search-index.js                          |   2 +-
 .../src/opendal/raw/adapters/typed_kv/api.rs.html  | 196 ++++++++++++++++++++-
 .../opendal/raw/adapters/typed_kv/backend.rs.html  | 178 ++++++++++++++++---
 .../src/opendal/raw/adapters/typed_kv/mod.rs.html  |   4 +
 .../src/opendal/services/dashmap/backend.rs.html   |  32 ++--
 .../rust/src/opendal/services/moka/backend.rs.html |  18 +-
 docs/vision/index.html                             |   6 +-
 index.html                                         |   4 +-
 51 files changed, 628 insertions(+), 187 deletions(-)

diff --git a/404.html b/404.html
index 91235236..e9a76734 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/ae4554eb.c61b8d18.js b/assets/js/ae4554eb.c61b8d18.js
new file mode 100644
index 00000000..4e1d3e97
--- /dev/null
+++ b/assets/js/ae4554eb.c61b8d18.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/ae4554eb.ce0f3c43.js b/assets/js/ae4554eb.ce0f3c43.js
deleted file mode 100644
index 3875635f..00000000
--- a/assets/js/ae4554eb.ce0f3c43.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[983],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/c377a04b.2a7867cc.js b/assets/js/c377a04b.2a7867cc.js
new file mode 100644
index 00000000..a7e1edf8
--- /dev/null
+++ b/assets/js/c377a04b.2a7867cc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
diff --git a/assets/js/c377a04b.66c3cfdd.js b/assets/js/c377a04b.66c3cfdd.js
deleted file mode 100644
index 8fd76dd7..00000000
--- a/assets/js/c377a04b.66c3cfdd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[971],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}retur [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.3708b2d1.js b/assets/js/runtime~main.2f2c1b80.js
similarity index 95%
rename from assets/js/runtime~main.3708b2d1.js
rename to assets/js/runtime~main.2f2c1b80.js
index 6ebd9660..2242753d 100644
--- a/assets/js/runtime~main.3708b2d1.js
+++ b/assets/js/runtime~main.2f2c1b80.js
@@ -1 +1 @@
-(()=>{"use strict";var e,t,r,a,o,n={},f={};function c(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={exports:{}};return n[e].call(r.exports,r,r.exports,c),r.exports}c.m=n,e=[],c.O=(t,r,a,o)=>{if(!r){var n=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var f=!0,i=0;i<r.length;i++)(!1&o||n>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(f=!1,o<n&&(n=o));if(f){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
+(()=>{"use strict";var e,t,r,a,o,n={},f={};function c(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={exports:{}};return n[e].call(r.exports,r,r.exports,c),r.exports}c.m=n,e=[],c.O=(t,r,a,o)=>{if(!r){var n=1/0;for(d=0;d<e.length;d++){r=e[d][0],a=e[d][1],o=e[d][2];for(var f=!0,i=0;i<r.length;i++)(!1&o||n>=o)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(f=!1,o<n&&(n=o));if(f){e.splice(d--,1);var b=a();void 0!==b&&(t=b)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 027bfaa7..d887eb84 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index b270c22f..6a9851e5 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index a0da7cd9..12b1ff96 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 95875d5d..3227d719 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index d59923c6..34ebfb6a 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 7c9535e5..4c7c09fd 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Overview | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.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.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index e235acdf..50ae3df5 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/e4d453b/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L417">index.d.ts:417</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L418">index.d.ts:418</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index d71edee7..0cf927a7 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/e4d453b/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L382">index.d.ts:382</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 97b22a9e..c544c2e2 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/e4d453b/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -61,7 +61,7 @@ thing internally.</p>
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L415">index.d.ts:415</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index 790e798a..a990a16e 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/e4d453b/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L384">index.d.ts:384</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L390">index.d.ts:390</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -73,7 +73,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L392">index.d.ts:392</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -83,7 +83,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L394">index.d.ts:394</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -93,7 +93,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -103,7 +103,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -114,7 +114,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L386">index.d.ts:386</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -136,7 +136,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L388">index.d.ts:388</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index 2c9ff235..036cc780 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/e4d453b/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -75,7 +75,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> options: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type" data-tsd-kind="Class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="check" class="tsd-anchor"></a>
@@ -94,7 +94,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -117,7 +117,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L162">index.d.ts:162</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -140,7 +140,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L171">index.d.ts:171</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -161,7 +161,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L104">index.d.ts:104</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -182,7 +182,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L113">index.d.ts:113</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -208,7 +208,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L251">index.d.ts:251</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -229,7 +229,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L260">index.d.ts:260</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -250,7 +250,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/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/18c9e03/bindings/nodejs/index.d.ts#L86">index.d.ts:86</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -271,7 +271,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L95">index.d.ts:95</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -294,7 +294,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L307">index.d.ts:307</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -317,7 +317,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L330">index.d.ts:330</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -341,7 +341,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L346">index.d.ts:346</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -365,7 +365,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L378">index.d.ts:378</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -389,7 +389,7 @@
 <h5>expires: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type" data-tsd-kind="Interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L362">index.d.ts:362</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -410,7 +410,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L122">index.d.ts:122</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -431,7 +431,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Buffer</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L131">index.d.ts:131</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -457,7 +457,7 @@
 <h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L272">index.d.ts:272</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -483,7 +483,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L284">index.d.ts:284</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -507,7 +507,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L182">index.d.ts:182</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -531,7 +531,7 @@
 <h5>to: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L193">index.d.ts:193</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -554,7 +554,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L216">index.d.ts:216</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -577,7 +577,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L239">index.d.ts:239</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -608,7 +608,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L54">index.d.ts:54</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -629,7 +629,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type" data-tsd-kind="Class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/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/18c9e03/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -652,7 +652,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L142">index.d.ts:142</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -675,7 +675,7 @@
 <h5>content: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L153">index.d.ts:153</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index b4d6e6fb..90438702 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/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/18c9e03/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -40,21 +40,21 @@
 <div class="tsd-comment tsd-typography"><p>HTTP headers of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">method<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature">url<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>URL of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e4d453b/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/18c9e03/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index d358d300..3627c014 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -159,16 +159,16 @@
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                 </ul>
 
@@ -865,54 +865,54 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.etag"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>ETag of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_length" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_length</span><span class="annotation">: int</span>
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_length"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>Content length of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.etag" class="classattr">
+                            <div id="Metadata.content_length" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_length</span><span class="annotation">: int</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.etag"></a>
+    <a class="headerlink" href="#Metadata.content_length"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>Content length of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index edcbd60a..7f845d28 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/rust/implementors/core/clone/trait.Clone.js b/docs/rust/implementors/core/clone/trait.Clone.js
index 1dfabfae..c74ad354 100644
--- a/docs/rust/implementors/core/clone/trait.Clone.js
+++ b/docs/rust/implementors/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpCopy.html\" title=\"struct opendal::raw::RpCopy\">RpCopy</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct o [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpCopy.html\" title=\"struct opendal::raw::RpCopy\">RpCopy</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"opendal/services/struct.Azdfs.html\" title=\"struct o [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/default/trait.Default.js b/docs/rust/implementors/core/default/trait.Default.js
index 81531664..f7da36dd 100644
--- a/docs/rust/implementors/core/default/trait.Default.js
+++ b/docs/rust/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpCreate.html\" title=\"struct opendal::raw::RpCreate\">RpCreate</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Web [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/raw/struct.RpCreate.html\" title=\"struct opendal::raw::RpCreate\">RpCreate</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Web [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/fmt/trait.Debug.js b/docs/rust/implementors/core/fmt/trait.Debug.js
index a9fd10a0..035f8a3b 100644
--- a/docs/rust/implementors/core/fmt/trait.Debug.js
+++ b/docs/rust/implementors/core/fmt/trait.Debug.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/ops/struct.OpBatch.html\" title=\"struct opendal::ops::OpBatch\">OpBatch</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/services/struct.Obs.html\" title=\"struct opendal: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/ops/struct.OpBatch.html\" title=\"struct opendal::ops::OpBatch\">OpBatch</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/adapters/typed_kv/struct.Value.html\" title=\" [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Copy.js b/docs/rust/implementors/core/marker/trait.Copy.js
index 83f0e3a5..76a9d7fe 100644
--- a/docs/rust/implementors/core/marker/trait.Copy.js
+++ b/docs/rust/implementors/core/marker/trait.Copy.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"opendal/layers/struct.MetricsLa [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"opendal/raw/oio/enum.PageOperation.html\" title=\"enum opendal::raw::oio::PageOperation\">PageOperation</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"opendal/raw/adapters/typed_kv/s [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Freeze.js b/docs/rust/implementors/core/marker/trait.Freeze.js
index 18fbb369..f54186ca 100644
--- a/docs/rust/implementors/core/marker/trait.Freeze.js
+++ b/docs/rust/implementors/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Send.js b/docs/rust/implementors/core/marker/trait.Send.js
index ef799e00..b3cbe004 100644
--- a/docs/rust/implementors/core/marker/trait.Send.js
+++ b/docs/rust/implementors/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Sync.js b/docs/rust/implementors/core/marker/trait.Sync.js
index d968ada4..0da68c0c 100644
--- a/docs/rust/implementors/core/marker/trait.Sync.js
+++ b/docs/rust/implementors/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Unpin.js b/docs/rust/implementors/core/marker/trait.Unpin.js
index e42c3d2a..3d0b05be 100644
--- a/docs/rust/implementors/core/marker/trait.Unpin.js
+++ b/docs/rust/implementors/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 70f99149..1c97356d 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 2389015d..7399c0f1 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 48efa52b..552001ca 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Capability.html b/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Capability.html
new file mode 100644
index 00000000..46bde872
--- /dev/null
+++ b/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Capability.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/adapters/typed_kv/struct.Capability.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../../../opendal/raw/adapters/typed_kv/struct.Capability.html">../../../../../opendal/raw/adapters/typed_kv/struct.Capability.html</a>...</p>
+    <script>location.replace("../../../../../opendal/raw/adapters/typed_kv/struct.Capability.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Info.html b/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Info.html
new file mode 100644
index 00000000..bbd3523f
--- /dev/null
+++ b/docs/rust/opendal/raw/adapters/typed_kv/api/struct.Info.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/adapters/typed_kv/struct.Info.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../../../opendal/raw/adapters/typed_kv/struct.Info.html">../../../../../opendal/raw/adapters/typed_kv/struct.Info.html</a>...</p>
+    <script>location.replace("../../../../../opendal/raw/adapters/typed_kv/struct.Info.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/index.html b/docs/rust/opendal/raw/adapters/typed_kv/index.html
index 3f02be6c..e277fb59 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/index.html
+++ b/docs/rust/opendal/raw/adapters/typed_kv/index.html
@@ -1,3 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Providing Typed Key Value Adapter for OpenDAL."><title>opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Providing Typed Key Value Adapter for OpenDAL."><title>opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2 [...]
 <p>Any services that implement <code>Adapter</code> can be used an OpenDAL Service.</p>
-</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Backend.html" title="struct opendal::raw::adapters::typed_kv::Backend">Backend</a></div><div class="desc docblock-short">The typed kv backend which implements Accessor for for typed kv adapter.</div></li><li><div class="item-name"><a class="struct" href="struct.Value.html" title="struct opendal::raw::adapters::ty [...]
\ No newline at end of file
+</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Backend.html" title="struct opendal::raw::adapters::typed_kv::Backend">Backend</a></div><div class="desc docblock-short">The typed kv backend which implements Accessor for for typed kv adapter.</div></li><li><div class="item-name"><a class="struct" href="struct.Capability.html" title="struct opendal::raw::adapter [...]
+by Typed KV Operator.</div></li><li><div class="item-name"><a class="struct" href="struct.Info.html" title="struct opendal::raw::adapters::typed_kv::Info">Info</a></div><div class="desc docblock-short">Info for this key value accessor.</div></li><li><div class="item-name"><a class="struct" href="struct.Value.html" title="struct opendal::raw::adapters::typed_kv::Value">Value</a></div><div class="desc docblock-short">Value is the typed value stored in adapter.</div></li></ul><h2 id="traits [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/sidebar-items.js b/docs/rust/opendal/raw/adapters/typed_kv/sidebar-items.js
index ae904f30..61225a59 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/sidebar-items.js
+++ b/docs/rust/opendal/raw/adapters/typed_kv/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"struct":["Backend","Value"],"trait":["Adapter"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"struct":["Backend","Capability","Info","Value"],"trait":["Adapter"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html b/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
index d37b964e..975d61af 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
+++ b/docs/rust/opendal/raw/adapters/typed_kv/struct.Backend.html
@@ -2,17 +2,17 @@
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#37-54">source</a><a href="#impl-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="struct [...]
     S: <a class="trait" href="trait.Adapter.html" title="trait opendal::raw::adapters::typed_kv::Adapter">Adapter</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#42-47">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(kv: S) -&gt; Self</h4></section></summar [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.with_root" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#50-53">source</a><h4 class="code-header">pub fn <a href="#method.with_root" class="fn">with_root</a>(self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Configure  [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#57-185">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" c [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Accessor-for-Backend%3CS%3E" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#57-207">source</a><a href="#impl-Accessor-for-Backend%3CS%3E" c [...]
 <code>blocking_read</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Writer" class="associatedtype trait-impl"><a href="#associatedtype.Writer" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Writer" class="associatedtype">Writer</a> = KvWriter&lt;S&gt;</h4></section></summary><div class='docblock'>Writer is the associated writer the could return in <code>write</code> operation.</div></de [...]
-<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.unit.html">()</a></h4></section></summary><div class='docblock'>Pager is the associa [...]
-<code>blocking_list</code> or <code>scan</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#65-89">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.Access [...]
+<code>blocking_write</code> operation.</div></details><details class="toggle" open><summary><section id="associatedtype.Pager" class="associatedtype trait-impl"><a href="#associatedtype.Pager" class="anchor">§</a><h4 class="code-header">type <a href="../../trait.Accessor.html#associatedtype.Pager" class="associatedtype">Pager</a> = KvPager</h4></section></summary><div class='docblock'>Pager is the associated page that return in <code>list</code> or <code>scan</code> operation.</div></det [...]
+<code>blocking_list</code> or <code>scan</code> operation.</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#65-95">source</a><a href="#method.info" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="../../struct.Access [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpCreate.html" title="struct opendal::ops::OpCreate">OpCreate</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#97-102">source</a><a href="#method.blocking_create_ [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>create</code> operation on the specified path <a href="../../trait.Accessor.html#method.create_dir">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_create_dir" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#103-108">source</a><a href="#method.blocking_create [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
@@ -20,11 +20,11 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>read</code> operation on the specified path, returns a
-<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#119-130">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-he [...]
+<a href="../../../struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> if operate successful. <a href="../../trait.Accessor.html#method.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_read" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#125-136">source</a><a href="#method.blocking_read" class="anchor">§</a><h4 class="code-he [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpRead.html" title="struct opendal::ops::OpRead">OpRead</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpRead.html" title="struct opendal::raw::RpRead">RpRead</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingReader" title="type opendal::raw::Accessor::BlockingReader">BlockingReader</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_read</code> operation on the specified path. <a hr [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
@@ -32,25 +32,36 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>write</code> operation on the specified path, returns a
-written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#138-142">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn" [...]
+written size if operate successful. <a href="../../trait.Accessor.html#method.write">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_write" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#144-148">source</a><a href="#method.blocking_write" class="anchor">§</a><h4 class="code-header">fn <a href="../../trait.Accessor.html#method.blocking_write" class="fn" [...]
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpWrite.html" title="struct opendal::ops::OpWrite">OpWrite</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpWrite.html" title="struct opendal::raw::RpWrite">RpWrite</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingWriter" title="type opendal::raw::Accessor::BlockingWriter">BlockingWriter</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_write</code> operation on the specified path. < [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpStat.html" title="struct opendal::ops::OpStat">OpStat</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#158-170">source</a><a href="#method.blocking_stat" class="anchor [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>stat</code> operation on the specified path. <a href="../../trait.Accessor.html#method.stat">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_stat" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#164-176">source</a><a href="#method.blocking_stat" class="anchor [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     __arg2: <a class="struct" href="../../../ops/struct.OpDelete.html" title="struct opendal::ops::OpDelete">OpDelete</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#179-184">source</a><a href="#method.blocking_delete" class [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>delete</code> operation on the specified path. <a href="../../trait.Accessor.html#method.delete">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_delete" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#185-190">source</a><a href="#method.blocking_delete" class [...]
+    &amp;'life0 self,
+    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+    __arg2: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    Self: 'async_trait,
+    'life0: 'async_trait,
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>scan</code> operation on the specified path. <a href="../../trait.Accessor.html#method.scan">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_scan" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/backend.rs.html#200-206">source</a><a href="#method.blocking_scan" class="anchor [...]
+    &amp;self,
+    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
+    _: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_scan</code> operation on the specified path. <a href= [...]
     &amp;'life0 self,
     from: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     to: &amp;'life2 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
@@ -75,14 +86,7 @@ written size if operate successful. <a href="../../trait.Accessor.html#method.wr
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#225-236">source</a><a href="#method.scan" class="anchor">§</a><h4 class="code-header">fn < [...]
-    &amp;'life0 self,
-    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
-    Self: 'async_trait,
-    'life0: 'async_trait,
-    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>scan</code> operation on the specified path. <a href="../../trait.Accessor.html#method.scan">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#245-252">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header [...]
+    'life1: 'async_trait,</span></h4></section></summary><div class='docblock'>Invoke the <code>list</code> operation on the specified path. <a href="../../trait.Accessor.html#method.list">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.presign" class="method trait-impl"><a class="srclink rightside" href="../../../../src/opendal/raw/accessor.rs.html#245-252">source</a><a href="#method.presign" class="anchor">§</a><h4 class="code-header [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpPresign.html" title="struct opendal::ops::OpPresign">OpPresign</a>
@@ -98,11 +102,7 @@ written size if operate successful. <a href="../../trait.Accessor.html#method.wr
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../../../ops/struct.OpList.html" title="struct opendal::ops::OpList">OpList</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
-    &amp;self,
-    path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
-    args: <a class="struct" href="../../../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_scan</code> operation on the specified path. <a href= [...]
+) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="../../struct.RpList.html" title="struct opendal::raw::RpList">RpList</a>, Self::<a class="associatedtype" href="../../trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></summary><div class='docblock'>Invoke the <code>blocking_list</code> operation on the specified path. <a href= [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-Backend%3CS%3E" class="impl"><a href="#impl-Send-for-Backend%3CS%3E" class="anchor">§</a><h3 class="code-header">impl&lt;S&gt; <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for < [...]
     S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-Backend%3CS%3E" c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/struct.Capability.html b/docs/rust/opendal/raw/adapters/typed_kv/struct.Capability.html
new file mode 100644
index 00000000..7f9ea754
--- /dev/null
+++ b/docs/rust/opendal/raw/adapters/typed_kv/struct.Capability.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Capability is used to describe what operations are supported by Typed KV Operator."><title>Capability in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.wof [...]
+    pub get: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
+    pub set: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
+    pub delete: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
+    pub scan: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a>,
+}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Capability is used to describe what operations are supported
+by Typed KV Operator.</p>
+</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.get" class="structfield small-section-header"><a href="#structfield.get" class="anchor field">§</a><code>get: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If typed_kv operator supports get natively, it will be true.</p>
+</div><span id="structfield.set" class="structfield small-section-header"><a href="#structfield.set" class="anchor field">§</a><code>set: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If typed_kv operator supports set natively, it will be true.</p>
+</div><span id="structfield.delete" class="structfield small-section-header"><a href="#structfield.delete" class="anchor field">§</a><code>delete: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If typed_kv operator supports delete natively, it will be true.</p>
+</div><span id="structfield.scan" class="structfield small-section-header"><a href="#structfield.scan" class="anchor field">§</a><code>scan: <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>If typed_kv operator supports scan natively, it will be true.</p>
+</div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Capability" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#121">source</a><a href="#impl-Clone-for-Capability" class="anchor">§</a><h3 class="code-header">impl <a cl [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-Capability" class="impl"><a href="#impl-FutureExt-for-Capability" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header"> [...]
+wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-Capability" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-Capability" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tra [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-Capability" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-Capability" class="anchor">§</a><h3 class="code-head [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-Capability" class="impl"><a href="#impl-Pointable-for-Capability" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code- [...]
+    T: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associated [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-Capability" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">sour [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-Capability" class="impl"><a href="#impl-Erased-for-Capability" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased  [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/struct.Info.html b/docs/rust/opendal/raw/adapters/typed_kv/struct.Info.html
new file mode 100644
index 00000000..063de2f4
--- /dev/null
+++ b/docs/rust/opendal/raw/adapters/typed_kv/struct.Info.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Info for this key value accessor."><title>Info in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cro [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Info" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#161-185">source</a><a href="#impl-Info" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Info.html" title [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scheme" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#172-174">source</a><h4 class="code-header">pub fn <a href="#method.scheme" class="fn">scheme</a>(&amp;self) -&gt; <a class="enum" href="../../../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a></h4></section></summary><div class="docblock"><p>Get the scheme.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.name" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#177-179">source</a><h4 class="code-header">pub fn <a href="#method.name" class="fn">name</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Get the name.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.capabilities" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#182-184">source</a><h4 class="code-header">pub fn <a href="#method.capabilities" class="fn">capabilities</a>(&amp;self) -&gt; <a class="struct" href="struct.Capability.html" title="struct opendal::raw::adapters::typed_kv::Capability">Capability</a></h4></section></summary><div clas [...]
+</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-Info" class="impl"><a href="#impl-RefUnwindSafe-for-Info" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait  [...]
+    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-Info" class="impl"><a href="#impl-FutureExt-for-Info" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn <a class= [...]
+wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
+wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-Info" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-Info" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html" title="trait tracing::instru [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc [...]
+<code>Instrumented</code> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-Info" class="impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-Info" class="anchor">§</a><h3 class="code-header">impl&lt; [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></s [...]
+<p>That is, this conversion is whatever the implementation of
+<code><a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
+</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-Info" class="impl"><a href="#impl-Pointable-for-Info" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-header">cons [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
+    U: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.69.0/core/convert/trait.TryInto.html#associatedtype.E [...]
+    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-Info" class="impl"><a class="srclink rightside" href="https://docs.rs/tracing/0.1.37/src/tracing/instrument.rs.html#334">source</a> [...]
+    S: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://docs.rs/tracing-core/0.1.22/tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="https://docs.rs/tracing-core/0.1.22/tracing_core/subscriber/trait.Subscriber.html" title="trait [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a class="srclink rightside" href="https://docs.rs/tracing [...]
+<a href="https://docs.rs/tracing/0.1.37/tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="https://docs.rs/tracing/0.1.37/tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details><section id="impl-Erased-for-Info" class="impl"><a href="#impl-Erased-for-Info" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Erased for T</h3></ [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/struct.Value.html b/docs/rust/opendal/raw/adapters/typed_kv/struct.Value.html
index ae9936af..3fa63fef 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/struct.Value.html
+++ b/docs/rust/opendal/raw/adapters/typed_kv/struct.Value.html
@@ -1,13 +1,13 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Value is the typed value stored in adapter."><title>Value in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Value is the typed value stored in adapter."><title>Value in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font [...]
     pub metadata: <a class="struct" href="../../../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a>,
     pub value: Bytes,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Value is the typed value stored in adapter.</p>
 <p>It’s cheap to clone so that users can read data without extra copy.</p>
 </div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.metadata" class="structfield small-section-header"><a href="#structfield.metadata" class="anchor field">§</a><code>metadata: <a class="struct" href="../../../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></code></span><div class="docblock"><p>Metadata of this value.</p>
 </div><span id="structfield.value" class="structfield small-section-header"><a href="#structfield.value" class="anchor field">§</a><code>value: Bytes</code></span><div class="docblock"><p>The correbonding content of this value.</p>
-</div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Value" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#74-89">source</a><a href="#impl-Value" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Value.html" title="struct  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.size" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#86-88">source</a><h4 class="code-header">pub fn <a href="#method.size" class="fn">size</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Size returns the in-memory size of Va [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Value" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#66">source</a><a href="#impl-Clone-for-Value" class="anchor">§</a><h3 class="co [...]
+</div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Value" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#102-117">source</a><a href="#impl-Value" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Value.html" title="struc [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.size" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#114-116">source</a><h4 class="code-header">pub fn <a href="#method.size" class="fn">size</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Size returns the in-memory size of  [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Value" class="impl"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#94">source</a><a href="#impl-Clone-for-Value" class="anchor">§</a><h3 class="co [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></spa [...]
diff --git a/docs/rust/opendal/raw/adapters/typed_kv/trait.Adapter.html b/docs/rust/opendal/raw/adapters/typed_kv/trait.Adapter.html
index d7002213..81de032f 100644
--- a/docs/rust/opendal/raw/adapters/typed_kv/trait.Adapter.html
+++ b/docs/rust/opendal/raw/adapters/typed_kv/trait.Adapter.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Adapter is the typed adapter to underlying kv services."><title>Adapter in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fo [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Adapter is the typed adapter to underlying kv services."><title>Adapter in opendal::raw::adapters::typed_kv - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fo [...]
     // Required methods
-    fn <a href="#tymethod.metadata" class="fn">metadata</a>(&amp;self) -&gt; (<a class="enum" href="../../../enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, <a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>);
+    fn <a href="#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="struct.Info.html" title="struct opendal::raw::adapters::typed_kv::Info">Info</a>;
 <span class="item-spacer"></span>    fn <a href="#tymethod.get" class="fn">get</a>&lt;'life0, 'life1, 'async_trait&gt;(
         &amp;'life0 self,
         path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>
@@ -26,6 +26,16 @@
              'life0: 'async_trait,
              'life1: 'async_trait</span>;
 <span class="item-spacer"></span>    fn <a href="#tymethod.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.unit.html">()</a>&gt;;
+
+    // Provided methods
+    fn <a href="#method.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
+        &amp;'life0 self,
+        path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>
+    ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type o [...]
+       <span class="where">where Self: 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait</span> { ... }
+<span class="item-spacer"></span>    fn <a href="#method.blocking_scan" class="fn">blocking_scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../../../type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1. [...]
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Adapter is the typed adapter to underlying kv services.</p>
 <p>By implement this trait, any kv service can work as an OpenDAL Service.</p>
 <h2 id="notes"><a href="#notes">Notes</a></h2>
@@ -35,16 +45,16 @@ example, we can store <code>Bytes</code> along with it’s metadata so that we d
 need to serialize/deserialize it when we get it from the service.</p>
 <p>Ideally, we should use <code>typed_kv::Adapter</code> instead of <code>kv::Adapter</code> for
 in-memory rust libs like moka and dashmap.</p>
-</div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.metadata" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#42">source</a><h4 class="code-header">fn <a href="#tymethod.metadata" class="fn">metadata</a>(&amp;self) -&gt; (<a class="enum" href="../.. [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.get" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.get" class="fn">get</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.info" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#47">source</a><h4 class="code-header">fn <a href="#tymethod.info" class="fn">info</a>(&amp;self) -&gt; <a class="struct" href="struct.Info.html [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.get" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#50">source</a><h4 class="code-header">fn <a href="#tymethod.get" class="fn">get</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Get a value from adapter.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_get" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_get" class="fn">blocking_get</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/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="tymethod.set" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#51">source</a><h4 class="code-header">fn <a href="#tymethod.set" class="fn">set</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_get" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#53">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_get" class="fn">blocking_get</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/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="tymethod.set" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#56">source</a><h4 class="code-header">fn <a href="#tymethod.set" class="fn">set</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     value: <a class="struct" href="struct.Value.html" title="struct opendal::raw::adapters::typed_kv::Value">Value</a>
@@ -52,13 +62,22 @@ in-memory rust libs like moka and dashmap.</p>
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Set a value into adapter.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_set" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#54">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_set" class="fn">blocking_set</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, value: <a class="struct" href="struct.Value.html" title="struct [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.delete" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#57">source</a><h4 class="code-header">fn <a href="#tymethod.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_set" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#59">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_set" class="fn">blocking_set</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>, value: <a class="struct" href="struct.Value.html" title="struct [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.delete" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#62">source</a><h4 class="code-header">fn <a href="#tymethod.delete" class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Delete a value from adapter.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_delete" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#60">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../../../type.Result.html" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.blocking_delete" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#65">source</a><h4 class="code-header">fn <a href="#tymethod.blocking_delete" class="fn">blocking_delete</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../../../type.Result.html" [...]
+</div></details></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#68-76">source</a><h4 class="code-header">fn <a href="#method.scan" class="fn">scan</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    &amp;'life0 self,
+    path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.69.0/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.69.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../../type.Result.html" title="type opend [...]
+    Self: 'async_trait,
+    'life0: 'async_trait,
+    'life1: 'async_trait,</span></h4></section></summary><div class="docblock"><p>Scan a key prefix to get all keys that start with this key.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking_scan" class="method"><a class="srclink rightside" href="../../../../src/opendal/raw/adapters/typed_kv/api.rs.html#80-88">source</a><h4 class="code-header">fn <a href="#method.blocking_scan" class="fn">blocking_scan</a>(&amp;self, path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>) -&gt; <a class="type" href="../../../type.Result.html" title= [...]
+in blocking way.</p>
 </div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../../implementors/opendal/raw/adapters/typed_kv/api/trait.Adapter.js" async></script></section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="opendal" data-themes="" data-resource-suffix="" data-rustdoc-version="1.6 [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/trait.Accessor.html b/docs/rust/opendal/raw/trait.Accessor.html
index b49356f7..954e352f 100644
--- a/docs/rust/opendal/raw/trait.Accessor.html
+++ b/docs/rust/opendal/raw/trait.Accessor.html
@@ -469,4 +469,4 @@ written size if operate successful.</p>
     &amp;self,
     path: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.69.0/std/primitive.str.html">str</a>,
     args: <a class="struct" href="../ops/struct.OpScan.html" title="struct opendal::ops::OpScan">OpScan</a>
-) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2>< [...]
\ No newline at end of file
+) -&gt; <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a>&lt;(<a class="struct" href="struct.RpScan.html" title="struct opendal::raw::RpScan">RpScan</a>, Self::<a class="associatedtype" href="trait.Accessor.html#associatedtype.BlockingPager" title="type opendal::raw::Accessor::BlockingPager">BlockingPager</a>)&gt;</h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2>< [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.Dashmap.html b/docs/rust/opendal/services/struct.Dashmap.html
index 397896a8..08bffd13 100644
--- a/docs/rust/opendal/services/struct.Dashmap.html
+++ b/docs/rust/opendal/services/struct.Dashmap.html
@@ -16,7 +16,7 @@ scan</li>
 blocking</li>
 </ul>
 </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#44-50">source</a><a href="#impl-DashmapBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Dashm [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#52-70">source</a><a href="#impl-Builder-for-DashmapBuilder" class="anchor"> [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-DashmapBuilder" class="impl"><a class="srclink rightside" href="../../src/opendal/services/dashmap/backend.rs.html#52-70">source</a><a href="#impl-Builder-for-DashmapBuilder" class="anchor"> [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from given iterator.</div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method trait-impl"><a class="srclink rightside" href="../../src/opendal/types/builder.rs.html#57-71">source</a><a href="#method.from_env" class="anchor"> [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-DashmapBuilder" class="impl"><a class="srclink rightside" href="../. [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="srclink rightside" href="https://doc.rust-lang.org/1.69.0/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a h [...]
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 84aacc41..102265b2 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -32,4 +32,4 @@ We also promise that every public API will provide detailed documentation.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.from_env" class="method"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#57-71">source</a><h4 class="code-header">fn <a href="#method.from_env" class="fn">from_env</a>() -&gt; Self<span class="where fmt-newline">where
     Self: <a class="trait" href="https://doc.rust-lang.org/1.69.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class="docblock"><p>Construct a builder from envs. Please note that the env should begin with <code>opendal_{schema_name}_</code>.</p>
 </div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Builder-for-()" class="impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#78-88">source</a><a href="#impl-Builder-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Builder.html" title="trait opendal::Bu [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#79">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="srclink rightside" href="../src/opendal/types/builder.rs.html#79">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" cla [...]
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index 0974bd1a..ad452915 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = JSON.parse('{\
-"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINDNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNDDDDINDNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNDNNDENNNNNNDDDNNNDNGNNSENNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/src/opendal/raw/adapters/typed_kv/api.rs.html b/docs/rust/src/opendal/raw/adapters/typed_kv/api.rs.html
index 4cffeffa..a930de15 100644
--- a/docs/rust/src/opendal/raw/adapters/typed_kv/api.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/typed_kv/api.rs.html
@@ -87,6 +87,102 @@
 <a href="#87" id="87">87</a>
 <a href="#88" id="88">88</a>
 <a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</a>
+<a href="#93" id="93">93</a>
+<a href="#94" id="94">94</a>
+<a href="#95" id="95">95</a>
+<a href="#96" id="96">96</a>
+<a href="#97" id="97">97</a>
+<a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<a href="#104" id="104">104</a>
+<a href="#105" id="105">105</a>
+<a href="#106" id="106">106</a>
+<a href="#107" id="107">107</a>
+<a href="#108" id="108">108</a>
+<a href="#109" id="109">109</a>
+<a href="#110" id="110">110</a>
+<a href="#111" id="111">111</a>
+<a href="#112" id="112">112</a>
+<a href="#113" id="113">113</a>
+<a href="#114" id="114">114</a>
+<a href="#115" id="115">115</a>
+<a href="#116" id="116">116</a>
+<a href="#117" id="117">117</a>
+<a href="#118" id="118">118</a>
+<a href="#119" id="119">119</a>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<a href="#170" id="170">170</a>
+<a href="#171" id="171">171</a>
+<a href="#172" id="172">172</a>
+<a href="#173" id="173">173</a>
+<a href="#174" id="174">174</a>
+<a href="#175" id="175">175</a>
+<a href="#176" id="176">176</a>
+<a href="#177" id="177">177</a>
+<a href="#178" id="178">178</a>
+<a href="#179" id="179">179</a>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
 </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
@@ -110,7 +206,12 @@
 <span class="kw">use </span>bytes::Bytes;
 <span class="kw">use </span>chrono::Utc;
 
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
+<span class="kw">use </span><span class="kw">crate</span>::EntryMode;
+<span class="kw">use </span><span class="kw">crate</span>::Error;
+<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
+<span class="kw">use </span><span class="kw">crate</span>::Metadata;
+<span class="kw">use </span><span class="kw">crate</span>::Result;
+<span class="kw">use </span><span class="kw">crate</span>::Scheme;
 
 <span class="doccomment">/// Adapter is the typed adapter to underlying kv services.
 ///
@@ -128,7 +229,7 @@
 </span><span class="attr">#[async_trait]
 </span><span class="kw">pub trait </span>Adapter: Send + Sync + Debug + Unpin + <span class="lifetime">&#39;static </span>{
     <span class="doccomment">/// Get the scheme and name of current adapter.
-    </span><span class="kw">fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; (Scheme, String);
+    </span><span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Info;
 
     <span class="doccomment">/// Get a value from adapter.
     </span><span class="kw">async fn </span>get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Value&gt;&gt;;
@@ -147,6 +248,29 @@
 
     <span class="doccomment">/// Delete a value from adapter.
     </span><span class="kw">fn </span>blocking_delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt;;
+
+    <span class="doccomment">/// Scan a key prefix to get all keys that start with this key.
+    </span><span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Vec&lt;String&gt;&gt; {
+        <span class="kw">let _ </span>= path;
+
+        <span class="prelude-val">Err</span>(Error::new(
+            ErrorKind::Unsupported,
+            <span class="string">&quot;typed_kv adapter doesn&#39;t support this operation&quot;</span>,
+        )
+        .with_operation(<span class="string">&quot;typed_kv::Adapter::scan&quot;</span>))
+    }
+
+    <span class="doccomment">/// Scan a key prefix to get all keys that start with this key
+    /// in blocking way.
+    </span><span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Vec&lt;String&gt;&gt; {
+        <span class="kw">let _ </span>= path;
+
+        <span class="prelude-val">Err</span>(Error::new(
+            ErrorKind::Unsupported,
+            <span class="string">&quot;typed_kv adapter doesn&#39;t support this operation&quot;</span>,
+        )
+        .with_operation(<span class="string">&quot;typed_kv::Adapter::blocking_scan&quot;</span>))
+    }
 }
 
 <span class="doccomment">/// Value is the typed value stored in adapter.
@@ -176,5 +300,73 @@
         size_of::&lt;Metadata&gt;() + <span class="self">self</span>.value.len()
     }
 }
+
+<span class="doccomment">/// Capability is used to describe what operations are supported
+/// by Typed KV Operator.
+</span><span class="attr">#[derive(Copy, Clone, Default)]
+</span><span class="kw">pub struct </span>Capability {
+    <span class="doccomment">/// If typed_kv operator supports get natively, it will be true.
+    </span><span class="kw">pub </span>get: bool,
+    <span class="doccomment">/// If typed_kv operator supports set natively, it will be true.
+    </span><span class="kw">pub </span>set: bool,
+    <span class="doccomment">/// If typed_kv operator supports delete natively, it will be true.
+    </span><span class="kw">pub </span>delete: bool,
+    <span class="doccomment">/// If typed_kv operator supports scan natively, it will be true.
+    </span><span class="kw">pub </span>scan: bool,
+}
+
+<span class="kw">impl </span>Debug <span class="kw">for </span>Capability {
+    <span class="kw">fn </span>fmt(<span class="kw-2">&amp;</span><span class="self">self</span>, f: <span class="kw-2">&amp;mut </span>std::fmt::Formatter&lt;<span class="lifetime">&#39;_</span>&gt;) -&gt; std::fmt::Result {
+        <span class="kw">let </span><span class="kw-2">mut </span>s = <span class="macro">vec!</span>[];
+
+        <span class="kw">if </span><span class="self">self</span>.get {
+            s.push(<span class="string">&quot;Get&quot;</span>)
+        }
+        <span class="kw">if </span><span class="self">self</span>.set {
+            s.push(<span class="string">&quot;Set&quot;</span>);
+        }
+        <span class="kw">if </span><span class="self">self</span>.delete {
+            s.push(<span class="string">&quot;Delete&quot;</span>);
+        }
+        <span class="kw">if </span><span class="self">self</span>.scan {
+            s.push(<span class="string">&quot;Scan&quot;</span>);
+        }
+
+        <span class="macro">write!</span>(f, <span class="string">&quot;{{ {} }}&quot;</span>, s.join(<span class="string">&quot; | &quot;</span>))
+    }
+}
+
+<span class="doccomment">/// Info for this key value accessor.
+</span><span class="kw">pub struct </span>Info {
+    scheme: Scheme,
+    name: String,
+    capabilities: Capability,
+}
+
+<span class="kw">impl </span>Info {
+    <span class="doccomment">/// Create a new KeyValueAccessorInfo.
+    </span><span class="kw">pub fn </span>new(scheme: Scheme, name: <span class="kw-2">&amp;</span>str, capabilities: Capability) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            scheme,
+            name: name.to_string(),
+            capabilities,
+        }
+    }
+
+    <span class="doccomment">/// Get the scheme.
+    </span><span class="kw">pub fn </span>scheme(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Scheme {
+        <span class="self">self</span>.scheme
+    }
+
+    <span class="doccomment">/// Get the name.
+    </span><span class="kw">pub fn </span>name(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;</span>str {
+        <span class="kw-2">&amp;</span><span class="self">self</span>.name
+    }
+
+    <span class="doccomment">/// Get the capabilities.
+    </span><span class="kw">pub fn </span>capabilities(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Capability {
+        <span class="self">self</span>.capabilities
+    }
+}
 </code></pre></div>
 </section></main><div id="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="opendal" data-themes="" data-resource-suffix="" data-rustdoc-version="1.69.0 (84c898d65 2023-04-16)" data-search-js="search-8a59a8356673ec1f.js" data-settings-js="settings-f0c5c39777a9a2f6.js" data-settings-css="settings-0bcba95ff279c1db.css" ></div></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html b/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
index e7522a19..3b759795 100644
--- a/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/typed_kv/backend.rs.html
@@ -280,6 +280,74 @@
 <a href="#280" id="280">280</a>
 <a href="#281" id="281">281</a>
 <a href="#282" id="282">282</a>
+<a href="#283" id="283">283</a>
+<a href="#284" id="284">284</a>
+<a href="#285" id="285">285</a>
+<a href="#286" id="286">286</a>
+<a href="#287" id="287">287</a>
+<a href="#288" id="288">288</a>
+<a href="#289" id="289">289</a>
+<a href="#290" id="290">290</a>
+<a href="#291" id="291">291</a>
+<a href="#292" id="292">292</a>
+<a href="#293" id="293">293</a>
+<a href="#294" id="294">294</a>
+<a href="#295" id="295">295</a>
+<a href="#296" id="296">296</a>
+<a href="#297" id="297">297</a>
+<a href="#298" id="298">298</a>
+<a href="#299" id="299">299</a>
+<a href="#300" id="300">300</a>
+<a href="#301" id="301">301</a>
+<a href="#302" id="302">302</a>
+<a href="#303" id="303">303</a>
+<a href="#304" id="304">304</a>
+<a href="#305" id="305">305</a>
+<a href="#306" id="306">306</a>
+<a href="#307" id="307">307</a>
+<a href="#308" id="308">308</a>
+<a href="#309" id="309">309</a>
+<a href="#310" id="310">310</a>
+<a href="#311" id="311">311</a>
+<a href="#312" id="312">312</a>
+<a href="#313" id="313">313</a>
+<a href="#314" id="314">314</a>
+<a href="#315" id="315">315</a>
+<a href="#316" id="316">316</a>
+<a href="#317" id="317">317</a>
+<a href="#318" id="318">318</a>
+<a href="#319" id="319">319</a>
+<a href="#320" id="320">320</a>
+<a href="#321" id="321">321</a>
+<a href="#322" id="322">322</a>
+<a href="#323" id="323">323</a>
+<a href="#324" id="324">324</a>
+<a href="#325" id="325">325</a>
+<a href="#326" id="326">326</a>
+<a href="#327" id="327">327</a>
+<a href="#328" id="328">328</a>
+<a href="#329" id="329">329</a>
+<a href="#330" id="330">330</a>
+<a href="#331" id="331">331</a>
+<a href="#332" id="332">332</a>
+<a href="#333" id="333">333</a>
+<a href="#334" id="334">334</a>
+<a href="#335" id="335">335</a>
+<a href="#336" id="336">336</a>
+<a href="#337" id="337">337</a>
+<a href="#338" id="338">338</a>
+<a href="#339" id="339">339</a>
+<a href="#340" id="340">340</a>
+<a href="#341" id="341">341</a>
+<a href="#342" id="342">342</a>
+<a href="#343" id="343">343</a>
+<a href="#344" id="344">344</a>
+<a href="#345" id="345">345</a>
+<a href="#346" id="346">346</a>
+<a href="#347" id="347">347</a>
+<a href="#348" id="348">348</a>
+<a href="#349" id="349">349</a>
+<a href="#350" id="350">350</a>
 </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
@@ -341,31 +409,37 @@
     <span class="kw">type </span>BlockingReader = oio::Cursor;
     <span class="kw">type </span>Writer = KvWriter&lt;S&gt;;
     <span class="kw">type </span>BlockingWriter = KvWriter&lt;S&gt;;
-    <span class="kw">type </span>Pager = ();
-    <span class="kw">type </span>BlockingPager = ();
+    <span class="kw">type </span>Pager = KvPager;
+    <span class="kw">type </span>BlockingPager = KvPager;
 
     <span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; AccessorInfo {
-        <span class="kw">let </span>(scheme, name) = <span class="self">self</span>.kv.metadata();
-
-        <span class="kw">let </span><span class="kw-2">mut </span>am = AccessorInfo::default();
-        am.set_scheme(scheme);
-        am.set_name(<span class="kw-2">&amp;</span>name);
+        <span class="kw">let </span>kv_info = <span class="self">self</span>.kv.info();
+        <span class="kw">let </span><span class="kw-2">mut </span>am: AccessorInfo = AccessorInfo::default();
         am.set_root(<span class="kw-2">&amp;</span><span class="self">self</span>.root);
-
+        am.set_scheme(kv_info.scheme());
+        am.set_name(kv_info.name());
+        <span class="kw">let </span>kv_cap = kv_info.capabilities();
         <span class="kw">let </span>cap = am.capability_mut();
-        cap.read = <span class="bool-val">true</span>;
-        cap.read_can_seek = <span class="bool-val">true</span>;
-        cap.read_can_next = <span class="bool-val">true</span>;
-        cap.read_with_range = <span class="bool-val">true</span>;
-        cap.stat = <span class="bool-val">true</span>;
-
-        cap.write = <span class="bool-val">true</span>;
-        cap.write_with_cache_control = <span class="bool-val">true</span>;
-        cap.write_with_content_disposition = <span class="bool-val">true</span>;
-        cap.write_with_content_type = <span class="bool-val">true</span>;
-        cap.write_without_content_length = <span class="bool-val">true</span>;
-        cap.create_dir = <span class="bool-val">true</span>;
-        cap.delete = <span class="bool-val">true</span>;
+        <span class="kw">if </span>kv_cap.get {
+            cap.read = <span class="bool-val">true</span>;
+            cap.read_can_seek = <span class="bool-val">true</span>;
+            cap.read_can_next = <span class="bool-val">true</span>;
+            cap.read_with_range = <span class="bool-val">true</span>;
+            cap.stat = <span class="bool-val">true</span>;
+        }
+
+        <span class="kw">if </span>kv_cap.set {
+            cap.write = <span class="bool-val">true</span>;
+            cap.create_dir = <span class="bool-val">true</span>;
+        }
+
+        <span class="kw">if </span>kv_cap.delete {
+            cap.delete = <span class="bool-val">true</span>;
+        }
+
+        <span class="kw">if </span>kv_cap.scan {
+            cap.scan = <span class="bool-val">true</span>;
+        }
 
         am
     }
@@ -464,6 +538,22 @@
         <span class="self">self</span>.kv.blocking_delete(<span class="kw-2">&amp;</span>p)<span class="question-mark">?</span>;
         <span class="prelude-val">Ok</span>(RpDelete::default())
     }
+
+    <span class="kw">async fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::Pager)&gt; {
+        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
+        <span class="kw">let </span>res = <span class="self">self</span>.kv.scan(<span class="kw-2">&amp;</span>p).<span class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
+
+        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+    }
+
+    <span class="kw">fn </span>blocking_scan(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpScan) -&gt; <span class="prelude-ty">Result</span>&lt;(RpScan, <span class="self">Self</span>::BlockingPager)&gt; {
+        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
+        <span class="kw">let </span>res = <span class="self">self</span>.kv.blocking_scan(<span class="kw-2">&amp;</span>p)<span class="question-mark">?</span>;
+        <span class="kw">let </span>pager = KvPager::new(<span class="kw-2">&amp;</span><span class="self">self</span>.root, res);
+
+        <span class="prelude-val">Ok</span>((RpScan::default(), pager))
+    }
 }
 
 <span class="kw">impl</span>&lt;S&gt; Backend&lt;S&gt;
@@ -486,6 +576,52 @@
     }
 }
 
+<span class="kw">pub struct </span>KvPager {
+    root: String,
+    inner: <span class="prelude-ty">Option</span>&lt;Vec&lt;String&gt;&gt;,
+}
+
+<span class="kw">impl </span>KvPager {
+    <span class="kw">fn </span>new(root: <span class="kw-2">&amp;</span>str, inner: Vec&lt;String&gt;) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            root: root.to_string(),
+            inner: <span class="prelude-val">Some</span>(inner),
+        }
+    }
+
+    <span class="kw">fn </span>inner_next_page(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt; {
+        <span class="kw">let </span>res = <span class="self">self
+            </span>.inner
+            .take()<span class="question-mark">?
+            </span>.into_iter()
+            .map(|v| {
+                <span class="kw">let </span>mode = <span class="kw">if </span>v.ends_with(<span class="string">&#39;/&#39;</span>) {
+                    EntryMode::DIR
+                } <span class="kw">else </span>{
+                    EntryMode::FILE
+                };
+
+                oio::Entry::new(<span class="kw-2">&amp;</span>build_rel_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, <span class="kw-2">&amp;</span>v), Metadata::new(mode))
+            })
+            .collect();
+
+        <span class="prelude-val">Some</span>(res)
+    }
+}
+
+<span class="attr">#[async_trait]
+</span><span class="kw">impl </span>oio::Page <span class="kw">for </span>KvPager {
+    <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
+        <span class="prelude-val">Ok</span>(<span class="self">self</span>.inner_next_page())
+    }
+}
+
+<span class="kw">impl </span>oio::BlockingPage <span class="kw">for </span>KvPager {
+    <span class="kw">fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
+        <span class="prelude-val">Ok</span>(<span class="self">self</span>.inner_next_page())
+    }
+}
+
 <span class="kw">pub struct </span>KvWriter&lt;S&gt; {
     kv: Arc&lt;S&gt;,
     path: String,
diff --git a/docs/rust/src/opendal/raw/adapters/typed_kv/mod.rs.html b/docs/rust/src/opendal/raw/adapters/typed_kv/mod.rs.html
index 5386587a..ba596957 100644
--- a/docs/rust/src/opendal/raw/adapters/typed_kv/mod.rs.html
+++ b/docs/rust/src/opendal/raw/adapters/typed_kv/mod.rs.html
@@ -25,6 +25,8 @@
 <a href="#25" id="25">25</a>
 <a href="#26" id="26">26</a>
 <a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
 </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
@@ -48,6 +50,8 @@
 
 </span><span class="kw">mod </span>api;
 <span class="kw">pub use </span>api::Adapter;
+<span class="kw">pub use </span>api::Capability;
+<span class="kw">pub use </span>api::Info;
 <span class="kw">pub use </span>api::Value;
 
 <span class="kw">mod </span>backend;
diff --git a/docs/rust/src/opendal/services/dashmap/backend.rs.html b/docs/rust/src/opendal/services/dashmap/backend.rs.html
index 34fc0140..c5e71bf4 100644
--- a/docs/rust/src/opendal/services/dashmap/backend.rs.html
+++ b/docs/rust/src/opendal/services/dashmap/backend.rs.html
@@ -174,7 +174,7 @@
 <span class="kw">use </span>async_trait::async_trait;
 <span class="kw">use </span>dashmap::DashMap;
 
-<span class="kw">use </span><span class="kw">crate</span>::raw::adapters::kv;
+<span class="kw">use </span><span class="kw">crate</span>::raw::adapters::typed_kv;
 <span class="kw">use crate</span>::<span class="kw-2">*</span>;
 
 <span class="doccomment">/// [dashmap](https://github.com/xacrimon/dashmap) backend support.
@@ -223,45 +223,45 @@
 }
 
 <span class="doccomment">/// Backend is used to serve `Accessor` support in dashmap.
-</span><span class="kw">pub type </span>DashmapBackend = kv::Backend&lt;Adapter&gt;;
+</span><span class="kw">pub type </span>DashmapBackend = typed_kv::Backend&lt;Adapter&gt;;
 
 <span class="attr">#[derive(Debug, Clone)]
 </span><span class="kw">pub struct </span>Adapter {
-    inner: DashMap&lt;String, Vec&lt;u8&gt;&gt;,
+    inner: DashMap&lt;String, typed_kv::Value&gt;,
 }
 
 <span class="attr">#[async_trait]
-</span><span class="kw">impl </span>kv::Adapter <span class="kw">for </span>Adapter {
-    <span class="kw">fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; kv::Metadata {
-        kv::Metadata::new(
+</span><span class="kw">impl </span>typed_kv::Adapter <span class="kw">for </span>Adapter {
+    <span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; typed_kv::Info {
+        typed_kv::Info::new(
             Scheme::Dashmap,
             <span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.inner <span class="kw">as </span><span class="kw-2">*const </span><span class="kw">_</span>),
-            Capability {
-                read: <span class="bool-val">true</span>,
-                write: <span class="bool-val">true</span>,
+            typed_kv::Capability {
+                get: <span class="bool-val">true</span>,
+                set: <span class="bool-val">true</span>,
                 scan: <span class="bool-val">true</span>,
-                ..Default::default()
+                delete: <span class="bool-val">true</span>,
             },
         )
     }
 
-    <span class="kw">async fn </span>get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;u8&gt;&gt;&gt; {
+    <span class="kw">async fn </span>get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;typed_kv::Value&gt;&gt; {
         <span class="self">self</span>.blocking_get(path)
     }
 
-    <span class="kw">fn </span>blocking_get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;u8&gt;&gt;&gt; {
+    <span class="kw">fn </span>blocking_get(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;typed_kv::Value&gt;&gt; {
         <span class="kw">match </span><span class="self">self</span>.inner.get(path) {
             <span class="prelude-val">None </span>=&gt; <span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>),
-            <span class="prelude-val">Some</span>(bs) =&gt; <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(bs.to_vec())),
+            <span class="prelude-val">Some</span>(bs) =&gt; <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(bs.value().to_owned())),
         }
     }
 
-    <span class="kw">async fn </span>set(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, value: <span class="kw-2">&amp;</span>[u8]) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+    <span class="kw">async fn </span>set(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, value: typed_kv::Value) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
         <span class="self">self</span>.blocking_set(path, value)
     }
 
-    <span class="kw">fn </span>blocking_set(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, value: <span class="kw-2">&amp;</span>[u8]) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="self">self</span>.inner.insert(path.to_string(), value.to_vec());
+    <span class="kw">fn </span>blocking_set(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, value: typed_kv::Value) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.inner.insert(path.to_string(), value);
 
         <span class="prelude-val">Ok</span>(())
     }
diff --git a/docs/rust/src/opendal/services/moka/backend.rs.html b/docs/rust/src/opendal/services/moka/backend.rs.html
index 5810f739..65539d3b 100644
--- a/docs/rust/src/opendal/services/moka/backend.rs.html
+++ b/docs/rust/src/opendal/services/moka/backend.rs.html
@@ -233,6 +233,12 @@
 <a href="#233" id="233">233</a>
 <a href="#234" id="234">234</a>
 <a href="#235" id="235">235</a>
+<a href="#236" id="236">236</a>
+<a href="#237" id="237">237</a>
+<a href="#238" id="238">238</a>
+<a href="#239" id="239">239</a>
+<a href="#240" id="240">240</a>
+<a href="#241" id="241">241</a>
 </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
@@ -430,10 +436,16 @@
 
 <span class="attr">#[async_trait]
 </span><span class="kw">impl </span>typed_kv::Adapter <span class="kw">for </span>Adapter {
-    <span class="kw">fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; (Scheme, String) {
-        (
+    <span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; typed_kv::Info {
+        typed_kv::Info::new(
             Scheme::Moka,
-            <span class="self">self</span>.inner.name().unwrap_or(<span class="string">&quot;moka&quot;</span>).to_string(),
+            <span class="self">self</span>.inner.name().unwrap_or(<span class="string">&quot;moka&quot;</span>),
+            typed_kv::Capability {
+                get: <span class="bool-val">true</span>,
+                set: <span class="bool-val">true</span>,
+                delete: <span class="bool-val">true</span>,
+                ..Default::default()
+            },
         )
     }
 
diff --git a/docs/vision/index.html b/docs/vision/index.html
index 5fa4bc66..f6d8926a 100644
--- a/docs/vision/index.html
+++ b/docs/vision/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Vision | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/vision"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.3708b2d1.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.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index f7eeadba..00050a3b 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.3708b2d1.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2f2c1b80.js" as="script">
 <link rel="preload" href="/assets/js/main.e8563114.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hid [...]
-<script src="/assets/js/runtime~main.3708b2d1.js"></script>
+<script src="/assets/js/runtime~main.2f2c1b80.js"></script>
 <script src="/assets/js/main.e8563114.js"></script>
 </body>
 </html>
\ No newline at end of file