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/10/21 04:21:13 UTC

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

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 287890cda deploy: c7bfe23dd1a0ec796e6751ead8a59d98fb13140c
287890cda is described below

commit 287890cda349b3c28aaf3cf4b2c1c0e3c3fa5f0f
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sat Oct 21 04:21:08 2023 +0000

    deploy: c7bfe23dd1a0ec796e6751ead8a59d98fb13140c
---
 404.html                                           |    4 +-
 .../{054cd2fb.d6b287b5.js => 054cd2fb.60c62687.js} |    2 +-
 .../{0605a481.7ea226a9.js => 0605a481.bb432988.js} |    2 +-
 .../{093f5f04.4a2d2ad7.js => 093f5f04.deccc02c.js} |    2 +-
 .../{09d8124e.5b7da2a3.js => 09d8124e.6da08bef.js} |    2 +-
 .../{136e1c50.6930f0b6.js => 136e1c50.e85fbccf.js} |    2 +-
 .../{151cd40f.343ca615.js => 151cd40f.d30f9885.js} |    2 +-
 .../{1957547a.0f2e0971.js => 1957547a.9948790a.js} |    2 +-
 assets/js/1db64337.6eef5d51.js                     |    1 +
 assets/js/1db64337.a02fd084.js                     |    1 -
 .../{22d8fa67.6fb53dbf.js => 22d8fa67.2b8f55df.js} |    2 +-
 .../{29b208a4.fd08dc06.js => 29b208a4.57dff111.js} |    2 +-
 .../{2cbf1097.93d6de9a.js => 2cbf1097.94825762.js} |    2 +-
 .../{3632610d.f6f96c29.js => 3632610d.8654934f.js} |    2 +-
 .../{42347498.dbae7cdb.js => 42347498.f569b116.js} |    2 +-
 .../{434bbc94.c44d5619.js => 434bbc94.35da9117.js} |    2 +-
 .../{4e2d8f56.f2378872.js => 4e2d8f56.a37942e7.js} |    2 +-
 .../{500d55cb.0fc8b140.js => 500d55cb.a3307af2.js} |    2 +-
 .../{57a16c1d.0b0e026c.js => 57a16c1d.3587e8f3.js} |    2 +-
 .../{592d1076.c84a7f2e.js => 592d1076.17c5e851.js} |    2 +-
 .../{621b831b.afac9360.js => 621b831b.a940d744.js} |    2 +-
 .../{65bf2b43.e9d45649.js => 65bf2b43.5891a534.js} |    2 +-
 .../{67ecc70e.f3f42ad3.js => 67ecc70e.a44994a0.js} |    2 +-
 .../{6dc695d1.dc9795ac.js => 6dc695d1.af5f366b.js} |    2 +-
 .../{6f4d3fa1.5d75e1f1.js => 6f4d3fa1.4827e50e.js} |    2 +-
 .../{7263c0b5.0d17eac2.js => 7263c0b5.6915bb80.js} |    2 +-
 assets/js/8070e160.325db59c.js                     |    1 +
 assets/js/8070e160.70eff220.js                     |    1 -
 .../{8b18d929.a31eacf0.js => 8b18d929.0893918f.js} |    2 +-
 assets/js/8cc9519e.5c824cc2.js                     |    1 -
 assets/js/8cc9519e.9e45da5c.js                     |    1 +
 .../{8f4159f2.61b2ee73.js => 8f4159f2.b5892c4b.js} |    2 +-
 .../{8fb00c63.f340cc83.js => 8fb00c63.1da91189.js} |    2 +-
 .../{939f74f6.c5f7da95.js => 939f74f6.42f8b27a.js} |    2 +-
 .../{a0405932.5467e98a.js => a0405932.0a2b31f4.js} |    2 +-
 .../{b114cefa.7c8d1f10.js => b114cefa.9d8e3425.js} |    2 +-
 .../{b56f9725.041c5400.js => b56f9725.42007952.js} |    2 +-
 .../{bb5b2057.2bda780f.js => bb5b2057.c5f89e63.js} |    2 +-
 .../{c0600a1b.0910b789.js => c0600a1b.5b609bb7.js} |    2 +-
 .../{c46c6b55.5dfaf364.js => c46c6b55.01026d13.js} |    2 +-
 .../{c6ab695b.fe380532.js => c6ab695b.82e0af08.js} |    2 +-
 .../{cc62039a.e35778df.js => cc62039a.d2a8c36d.js} |    2 +-
 .../{d3c0d8d5.39af9baa.js => d3c0d8d5.20ffd555.js} |    2 +-
 .../{ddccef4c.c793aa73.js => ddccef4c.a697a733.js} |    2 +-
 .../{e892cec6.be4b4d9c.js => e892cec6.1798c14e.js} |    2 +-
 .../{f1ca5a39.4f9a71f3.js => f1ca5a39.50e4866d.js} |    2 +-
 .../{f9145722.77009d53.js => f9145722.7528a90e.js} |    2 +-
 .../{fde7cc64.244ec1e4.js => fde7cc64.423b5083.js} |    2 +-
 ...e~main.5afca37a.js => runtime~main.2d1180dd.js} |    2 +-
 blog/archive/index.html                            |    4 +-
 blog/how-opendal-read-data/index.html              |    4 +-
 blog/index.html                                    |    4 +-
 blog/opendal-access-data-freely/index.html         |    4 +-
 blog/opendal-entered-apache-incubator/index.html   |    4 +-
 blog/owo-1/index.html                              |    4 +-
 blog/tags/announcement/index.html                  |    4 +-
 blog/tags/index.html                               |    4 +-
 blog/tags/internal/index.html                      |    4 +-
 blog/tags/owo/index.html                           |    4 +-
 community/category/committers/index.html           |    4 +-
 community/category/reference/index.html            |    4 +-
 community/committers/committer/index.html          |    4 +-
 community/committers/podling-report/index.html     |    4 +-
 .../reference/generate_release_note/index.html     |    4 +-
 .../committers/reference/setup_gpg/index.html      |    4 +-
 community/committers/release/index.html            |    4 +-
 community/committers/verify/index.html             |    4 +-
 community/index.html                               |    4 +-
 docs/c/annotated.html                              |   27 +-
 docs/c/classes.html                                |    2 +-
 docs/c/functions.html                              |   20 +-
 docs/c/functions_vars.html                         |   20 +-
 docs/c/globals.html                                |   81 +-
 docs/c/globals_func.html                           |   58 +-
 docs/c/globals_type.html                           |   25 +-
 docs/c/index.html                                  |   39 +-
 docs/c/opendal_8h.html                             | 1131 ++++++++++----------
 docs/c/opendal_8h_source.html                      |  414 +++----
 docs/c/search/all_3.js                             |    5 +-
 docs/c/search/all_4.js                             |    4 +-
 docs/c/search/all_5.js                             |    4 +-
 docs/c/search/all_6.js                             |    4 +-
 docs/c/search/all_7.js                             |   99 +-
 docs/c/search/all_8.js                             |    2 +-
 docs/c/search/all_9.js                             |    4 +-
 docs/c/search/all_a.js                             |    2 +-
 docs/c/search/all_b.js                             |    2 +-
 docs/c/search/classes_0.js                         |   31 +-
 docs/c/search/enums_0.js                           |    2 +-
 docs/c/search/enumvalues_0.js                      |   20 +-
 docs/c/search/files_0.js                           |    2 +-
 docs/c/search/files_1.js                           |    2 +-
 docs/c/search/functions_0.js                       |   42 +-
 docs/c/search/pages_0.js                           |    2 +-
 docs/c/search/pages_1.js                           |    2 +-
 docs/c/search/typedefs_0.js                        |    4 +-
 docs/c/search/typedefs_1.js                        |    2 +-
 docs/c/search/typedefs_2.js                        |   33 +-
 docs/c/search/variables_0.js                       |    2 +-
 docs/c/search/variables_1.js                       |    2 +-
 docs/c/search/variables_2.js                       |    3 +-
 docs/c/search/variables_3.js                       |    4 +-
 docs/c/search/variables_4.js                       |    4 +-
 docs/c/search/variables_5.js                       |    4 +-
 docs/c/search/variables_6.js                       |    2 +-
 docs/c/search/variables_7.js                       |    2 +-
 docs/c/search/variables_8.js                       |    2 +-
 docs/c/search/variables_9.js                       |    2 +-
 docs/c/structopendal__bytes.html                   |    4 +-
 ...bers.html => structopendal__entry-members.html} |    6 +-
 ..._list__entry.html => structopendal__entry.html} |   28 +-
 ...ers.html => structopendal__lister-members.html} |    6 +-
 ...ing__lister.html => structopendal__lister.html} |   20 +-
 ...s.html => structopendal__operator-members.html} |    6 +-
 ...ator__ptr.html => structopendal__operator.html} |   22 +-
 docs/c/structopendal__operator__options.html       |    6 +-
 docs/c/structopendal__reader.html                  |    8 +-
 docs/c/structopendal__result__is__exist.html       |    8 +-
 docs/c/structopendal__result__list-members.html    |    2 +-
 docs/c/structopendal__result__list.html            |   16 +-
 ...ructopendal__result__lister__next-members.html} |    8 +-
 ...ml => structopendal__result__lister__next.html} |   35 +-
 ...ructopendal__result__operator__new-members.html |    2 +-
 docs/c/structopendal__result__operator__new.html   |   16 +-
 ...opendal__result__operator__reader-members.html} |    8 +-
 ...> structopendal__result__operator__reader.html} |   35 +-
 docs/c/structopendal__result__reader__read.html    |    9 +-
 docs/c/structopendal__result__stat.html            |    6 +-
 docs/category/services/index.html                  |    4 +-
 docs/lua/classes/opendal.metadata.html             |    2 +-
 docs/lua/classes/opendal.operator.html             |    2 +-
 docs/lua/index.html                                |    2 +-
 docs/nodejs/classes/BlockingLister.html            |    4 +-
 docs/nodejs/classes/Entry.html                     |    4 +-
 docs/nodejs/classes/Lister.html                    |    4 +-
 docs/nodejs/classes/Metadata.html                  |   18 +-
 docs/nodejs/classes/Operator.html                  |   58 +-
 docs/nodejs/interfaces/PresignedRequest.html       |    8 +-
 docs/overview/index.html                           |    6 +-
 docs/python/opendal.html                           |   60 +-
 docs/python/search.js                              |    2 +-
 docs/quickstart/index.html                         |    6 +-
 docs/services/atomicserver/index.html              |    6 +-
 docs/services/azblob/index.html                    |    6 +-
 docs/services/azdls/index.html                     |    6 +-
 docs/services/cacache/index.html                   |    6 +-
 docs/services/cos/index.html                       |    6 +-
 docs/services/d1/index.html                        |    6 +-
 docs/services/dashmap/index.html                   |    6 +-
 docs/services/dropbox/index.html                   |    6 +-
 docs/services/etcd/index.html                      |    6 +-
 docs/services/foundationdb/index.html              |    6 +-
 docs/services/fs/index.html                        |    6 +-
 docs/services/ftp/index.html                       |    6 +-
 docs/services/gcs/index.html                       |    6 +-
 docs/services/gdrive/index.html                    |    6 +-
 docs/services/ghac/index.html                      |    6 +-
 docs/services/hdfs/index.html                      |    6 +-
 docs/services/http/index.html                      |    6 +-
 docs/services/ipfs/index.html                      |    6 +-
 docs/services/ipmfs/index.html                     |    6 +-
 docs/services/libsql/index.html                    |    6 +-
 docs/services/memcached/index.html                 |    6 +-
 docs/services/memory/index.html                    |    6 +-
 docs/services/moka/index.html                      |    6 +-
 docs/services/mysql/index.html                     |    6 +-
 docs/services/obs/index.html                       |    6 +-
 docs/services/onedrive/index.html                  |    6 +-
 docs/services/oss/index.html                       |    6 +-
 docs/services/persy/index.html                     |    6 +-
 docs/services/postgresql/index.html                |    6 +-
 docs/services/redb/index.html                      |    6 +-
 docs/services/redis/index.html                     |    6 +-
 docs/services/rocksdb/index.html                   |    6 +-
 docs/services/s3/index.html                        |    6 +-
 docs/services/sftp/index.html                      |    6 +-
 docs/services/sled/index.html                      |    6 +-
 docs/services/sqlite/index.html                    |    6 +-
 docs/services/supabase/index.html                  |    6 +-
 docs/services/tikv/index.html                      |    6 +-
 docs/services/vercel_artifacts/index.html          |    6 +-
 docs/services/wasabi/index.html                    |    6 +-
 docs/services/webdav/index.html                    |    6 +-
 docs/services/webhdfs/index.html                   |    6 +-
 download/index.html                                |    4 +-
 index.html                                         |    4 +-
 186 files changed, 1528 insertions(+), 1445 deletions(-)

diff --git a/404.html b/404.html
index 180ec958f..a083503d1 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.d6b287b5.js b/assets/js/054cd2fb.60c62687.js
similarity index 84%
rename from assets/js/054cd2fb.d6b287b5.js
rename to assets/js/054cd2fb.60c62687.js
index dc7dced7b..a02cd9835 100644
--- a/assets/js/054cd2fb.d6b287b5.js
+++ b/assets/js/054cd2fb.60c62687.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/0605a481.7ea226a9.js b/assets/js/0605a481.bb432988.js
similarity index 75%
rename from assets/js/0605a481.7ea226a9.js
rename to assets/js/0605a481.bb432988.js
index 971a6ec3d..d381258d5 100644
--- a/assets/js/0605a481.7ea226a9.js
+++ b/assets/js/0605a481.bb432988.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/093f5f04.4a2d2ad7.js b/assets/js/093f5f04.deccc02c.js
similarity index 63%
rename from assets/js/093f5f04.4a2d2ad7.js
rename to assets/js/093f5f04.deccc02c.js
index b2594d260..da234dd8c 100644
--- a/assets/js/093f5f04.4a2d2ad7.js
+++ b/assets/js/093f5f04.deccc02c.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/09d8124e.5b7da2a3.js b/assets/js/09d8124e.6da08bef.js
similarity index 87%
rename from assets/js/09d8124e.5b7da2a3.js
rename to assets/js/09d8124e.6da08bef.js
index a54e372cb..25116646a 100644
--- a/assets/js/09d8124e.5b7da2a3.js
+++ b/assets/js/09d8124e.6da08bef.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.6930f0b6.js b/assets/js/136e1c50.e85fbccf.js
similarity index 83%
rename from assets/js/136e1c50.6930f0b6.js
rename to assets/js/136e1c50.e85fbccf.js
index 8c64edeaa..ba7f584e5 100644
--- a/assets/js/136e1c50.6930f0b6.js
+++ b/assets/js/136e1c50.e85fbccf.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/151cd40f.343ca615.js b/assets/js/151cd40f.d30f9885.js
similarity index 86%
rename from assets/js/151cd40f.343ca615.js
rename to assets/js/151cd40f.d30f9885.js
index b014ca037..85da941b4 100644
--- a/assets/js/151cd40f.343ca615.js
+++ b/assets/js/151cd40f.d30f9885.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.0f2e0971.js b/assets/js/1957547a.9948790a.js
similarity index 86%
rename from assets/js/1957547a.0f2e0971.js
rename to assets/js/1957547a.9948790a.js
index 5aff1852b..3e9e792e9 100644
--- a/assets/js/1957547a.0f2e0971.js
+++ b/assets/js/1957547a.9948790a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.6eef5d51.js b/assets/js/1db64337.6eef5d51.js
new file mode 100644
index 000000000..c220c80f3
--- /dev/null
+++ b/assets/js/1db64337.6eef5d51.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.a02fd084.js b/assets/js/1db64337.a02fd084.js
deleted file mode 100644
index f00d11264..000000000
--- a/assets/js/1db64337.a02fd084.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.6fb53dbf.js b/assets/js/22d8fa67.2b8f55df.js
similarity index 72%
rename from assets/js/22d8fa67.6fb53dbf.js
rename to assets/js/22d8fa67.2b8f55df.js
index 22f73a90b..e8cbf4f46 100644
--- a/assets/js/22d8fa67.6fb53dbf.js
+++ b/assets/js/22d8fa67.2b8f55df.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/29b208a4.fd08dc06.js b/assets/js/29b208a4.57dff111.js
similarity index 84%
rename from assets/js/29b208a4.fd08dc06.js
rename to assets/js/29b208a4.57dff111.js
index 9969789ba..f1c31b76b 100644
--- a/assets/js/29b208a4.fd08dc06.js
+++ b/assets/js/29b208a4.57dff111.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.93d6de9a.js b/assets/js/2cbf1097.94825762.js
similarity index 91%
rename from assets/js/2cbf1097.93d6de9a.js
rename to assets/js/2cbf1097.94825762.js
index 491d10df7..19bab5a57 100644
--- a/assets/js/2cbf1097.93d6de9a.js
+++ b/assets/js/2cbf1097.94825762.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3632610d.f6f96c29.js b/assets/js/3632610d.8654934f.js
similarity index 85%
rename from assets/js/3632610d.f6f96c29.js
rename to assets/js/3632610d.8654934f.js
index bea7b01fc..e9e512863 100644
--- a/assets/js/3632610d.f6f96c29.js
+++ b/assets/js/3632610d.8654934f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/42347498.dbae7cdb.js b/assets/js/42347498.f569b116.js
similarity index 85%
rename from assets/js/42347498.dbae7cdb.js
rename to assets/js/42347498.f569b116.js
index c7333b684..ac8bb40b3 100644
--- a/assets/js/42347498.dbae7cdb.js
+++ b/assets/js/42347498.f569b116.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.c44d5619.js b/assets/js/434bbc94.35da9117.js
similarity index 85%
rename from assets/js/434bbc94.c44d5619.js
rename to assets/js/434bbc94.35da9117.js
index 278889384..af6e24987 100644
--- a/assets/js/434bbc94.c44d5619.js
+++ b/assets/js/434bbc94.35da9117.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4e2d8f56.f2378872.js b/assets/js/4e2d8f56.a37942e7.js
similarity index 81%
rename from assets/js/4e2d8f56.f2378872.js
rename to assets/js/4e2d8f56.a37942e7.js
index f6b8a7907..2f151088d 100644
--- a/assets/js/4e2d8f56.f2378872.js
+++ b/assets/js/4e2d8f56.a37942e7.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/500d55cb.0fc8b140.js b/assets/js/500d55cb.a3307af2.js
similarity index 82%
rename from assets/js/500d55cb.0fc8b140.js
rename to assets/js/500d55cb.a3307af2.js
index bed916bb7..fa673b2ed 100644
--- a/assets/js/500d55cb.0fc8b140.js
+++ b/assets/js/500d55cb.a3307af2.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.0b0e026c.js b/assets/js/57a16c1d.3587e8f3.js
similarity index 80%
rename from assets/js/57a16c1d.0b0e026c.js
rename to assets/js/57a16c1d.3587e8f3.js
index a2f21ed73..27802ab9a 100644
--- a/assets/js/57a16c1d.0b0e026c.js
+++ b/assets/js/57a16c1d.3587e8f3.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/592d1076.c84a7f2e.js b/assets/js/592d1076.17c5e851.js
similarity index 83%
rename from assets/js/592d1076.c84a7f2e.js
rename to assets/js/592d1076.17c5e851.js
index 4f5c9f77d..9b54aae6b 100644
--- a/assets/js/592d1076.c84a7f2e.js
+++ b/assets/js/592d1076.17c5e851.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/621b831b.afac9360.js b/assets/js/621b831b.a940d744.js
similarity index 84%
rename from assets/js/621b831b.afac9360.js
rename to assets/js/621b831b.a940d744.js
index b6909ff12..de5fc74f1 100644
--- a/assets/js/621b831b.afac9360.js
+++ b/assets/js/621b831b.a940d744.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/65bf2b43.e9d45649.js b/assets/js/65bf2b43.5891a534.js
similarity index 82%
rename from assets/js/65bf2b43.e9d45649.js
rename to assets/js/65bf2b43.5891a534.js
index 39d421764..f156cea1e 100644
--- a/assets/js/65bf2b43.e9d45649.js
+++ b/assets/js/65bf2b43.5891a534.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/67ecc70e.f3f42ad3.js b/assets/js/67ecc70e.a44994a0.js
similarity index 81%
rename from assets/js/67ecc70e.f3f42ad3.js
rename to assets/js/67ecc70e.a44994a0.js
index 261c450a4..228714cdd 100644
--- a/assets/js/67ecc70e.f3f42ad3.js
+++ b/assets/js/67ecc70e.a44994a0.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6dc695d1.dc9795ac.js b/assets/js/6dc695d1.af5f366b.js
similarity index 81%
rename from assets/js/6dc695d1.dc9795ac.js
rename to assets/js/6dc695d1.af5f366b.js
index d85d1f26e..be6b80d8e 100644
--- a/assets/js/6dc695d1.dc9795ac.js
+++ b/assets/js/6dc695d1.af5f366b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6f4d3fa1.5d75e1f1.js b/assets/js/6f4d3fa1.4827e50e.js
similarity index 85%
rename from assets/js/6f4d3fa1.5d75e1f1.js
rename to assets/js/6f4d3fa1.4827e50e.js
index 295ff0070..1f548ef38 100644
--- a/assets/js/6f4d3fa1.5d75e1f1.js
+++ b/assets/js/6f4d3fa1.4827e50e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/7263c0b5.0d17eac2.js b/assets/js/7263c0b5.6915bb80.js
similarity index 86%
rename from assets/js/7263c0b5.0d17eac2.js
rename to assets/js/7263c0b5.6915bb80.js
index e7252c48a..39bd61458 100644
--- a/assets/js/7263c0b5.0d17eac2.js
+++ b/assets/js/7263c0b5.6915bb80.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8070e160.325db59c.js b/assets/js/8070e160.325db59c.js
new file mode 100644
index 000000000..1c79bad95
--- /dev/null
+++ b/assets/js/8070e160.325db59c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8070e160.70eff220.js b/assets/js/8070e160.70eff220.js
deleted file mode 100644
index 76a19a9fd..000000000
--- a/assets/js/8070e160.70eff220.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8b18d929.a31eacf0.js b/assets/js/8b18d929.0893918f.js
similarity index 89%
rename from assets/js/8b18d929.a31eacf0.js
rename to assets/js/8b18d929.0893918f.js
index 0578fafc3..69e6599a3 100644
--- a/assets/js/8b18d929.a31eacf0.js
+++ b/assets/js/8b18d929.0893918f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6299],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6299],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.5c824cc2.js b/assets/js/8cc9519e.5c824cc2.js
deleted file mode 100644
index aeff85e0f..000000000
--- a/assets/js/8cc9519e.5c824cc2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.9e45da5c.js b/assets/js/8cc9519e.9e45da5c.js
new file mode 100644
index 000000000..4f09db1db
--- /dev/null
+++ b/assets/js/8cc9519e.9e45da5c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.61b2ee73.js b/assets/js/8f4159f2.b5892c4b.js
similarity index 88%
rename from assets/js/8f4159f2.61b2ee73.js
rename to assets/js/8f4159f2.b5892c4b.js
index 93e2cae79..68d47482f 100644
--- a/assets/js/8f4159f2.61b2ee73.js
+++ b/assets/js/8f4159f2.b5892c4b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8fb00c63.f340cc83.js b/assets/js/8fb00c63.1da91189.js
similarity index 84%
rename from assets/js/8fb00c63.f340cc83.js
rename to assets/js/8fb00c63.1da91189.js
index a8f022dce..ed4322b07 100644
--- a/assets/js/8fb00c63.f340cc83.js
+++ b/assets/js/8fb00c63.1da91189.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/939f74f6.c5f7da95.js b/assets/js/939f74f6.42f8b27a.js
similarity index 85%
rename from assets/js/939f74f6.c5f7da95.js
rename to assets/js/939f74f6.42f8b27a.js
index 00b9cdfe7..b0144df71 100644
--- a/assets/js/939f74f6.c5f7da95.js
+++ b/assets/js/939f74f6.42f8b27a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.5467e98a.js b/assets/js/a0405932.0a2b31f4.js
similarity index 84%
rename from assets/js/a0405932.5467e98a.js
rename to assets/js/a0405932.0a2b31f4.js
index 31127df94..ef878a9ff 100644
--- a/assets/js/a0405932.5467e98a.js
+++ b/assets/js/a0405932.0a2b31f4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/b114cefa.7c8d1f10.js b/assets/js/b114cefa.9d8e3425.js
similarity index 84%
rename from assets/js/b114cefa.7c8d1f10.js
rename to assets/js/b114cefa.9d8e3425.js
index 9240ffc7c..3dfb5996c 100644
--- a/assets/js/b114cefa.7c8d1f10.js
+++ b/assets/js/b114cefa.9d8e3425.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.041c5400.js b/assets/js/b56f9725.42007952.js
similarity index 82%
rename from assets/js/b56f9725.041c5400.js
rename to assets/js/b56f9725.42007952.js
index 7ccd6fd5f..8a85fbe4e 100644
--- a/assets/js/b56f9725.041c5400.js
+++ b/assets/js/b56f9725.42007952.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.2bda780f.js b/assets/js/bb5b2057.c5f89e63.js
similarity index 75%
rename from assets/js/bb5b2057.2bda780f.js
rename to assets/js/bb5b2057.c5f89e63.js
index 17010a8a6..12f7b0003 100644
--- a/assets/js/bb5b2057.2bda780f.js
+++ b/assets/js/bb5b2057.c5f89e63.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c0600a1b.0910b789.js b/assets/js/c0600a1b.5b609bb7.js
similarity index 82%
rename from assets/js/c0600a1b.0910b789.js
rename to assets/js/c0600a1b.5b609bb7.js
index 45d004c30..00a3d027a 100644
--- a/assets/js/c0600a1b.0910b789.js
+++ b/assets/js/c0600a1b.5b609bb7.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c46c6b55.5dfaf364.js b/assets/js/c46c6b55.01026d13.js
similarity index 82%
rename from assets/js/c46c6b55.5dfaf364.js
rename to assets/js/c46c6b55.01026d13.js
index f38b542b7..c342aae11 100644
--- a/assets/js/c46c6b55.5dfaf364.js
+++ b/assets/js/c46c6b55.01026d13.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.fe380532.js b/assets/js/c6ab695b.82e0af08.js
similarity index 85%
rename from assets/js/c6ab695b.fe380532.js
rename to assets/js/c6ab695b.82e0af08.js
index 47514725d..7b4bf4657 100644
--- a/assets/js/c6ab695b.fe380532.js
+++ b/assets/js/c6ab695b.82e0af08.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.e35778df.js b/assets/js/cc62039a.d2a8c36d.js
similarity index 89%
rename from assets/js/cc62039a.e35778df.js
rename to assets/js/cc62039a.d2a8c36d.js
index 46ced5f71..2f254d449 100644
--- a/assets/js/cc62039a.e35778df.js
+++ b/assets/js/cc62039a.d2a8c36d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d3c0d8d5.39af9baa.js b/assets/js/d3c0d8d5.20ffd555.js
similarity index 84%
rename from assets/js/d3c0d8d5.39af9baa.js
rename to assets/js/d3c0d8d5.20ffd555.js
index 29f9a1c26..5b970cddc 100644
--- a/assets/js/d3c0d8d5.39af9baa.js
+++ b/assets/js/d3c0d8d5.20ffd555.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ddccef4c.c793aa73.js b/assets/js/ddccef4c.a697a733.js
similarity index 86%
rename from assets/js/ddccef4c.c793aa73.js
rename to assets/js/ddccef4c.a697a733.js
index 460fe10aa..5f4a09768 100644
--- a/assets/js/ddccef4c.c793aa73.js
+++ b/assets/js/ddccef4c.a697a733.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.be4b4d9c.js b/assets/js/e892cec6.1798c14e.js
similarity index 86%
rename from assets/js/e892cec6.be4b4d9c.js
rename to assets/js/e892cec6.1798c14e.js
index d7c25d670..87ede80f4 100644
--- a/assets/js/e892cec6.be4b4d9c.js
+++ b/assets/js/e892cec6.1798c14e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.4f9a71f3.js b/assets/js/f1ca5a39.50e4866d.js
similarity index 87%
rename from assets/js/f1ca5a39.4f9a71f3.js
rename to assets/js/f1ca5a39.50e4866d.js
index 4ba79bcb8..d04b9cb7e 100644
--- a/assets/js/f1ca5a39.4f9a71f3.js
+++ b/assets/js/f1ca5a39.50e4866d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f9145722.77009d53.js b/assets/js/f9145722.7528a90e.js
similarity index 86%
rename from assets/js/f9145722.77009d53.js
rename to assets/js/f9145722.7528a90e.js
index b5738b990..8c005abb0 100644
--- a/assets/js/f9145722.77009d53.js
+++ b/assets/js/f9145722.7528a90e.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/fde7cc64.244ec1e4.js b/assets/js/fde7cc64.423b5083.js
similarity index 85%
rename from assets/js/fde7cc64.244ec1e4.js
rename to assets/js/fde7cc64.423b5083.js
index 43e00c24b..9293fed62 100644
--- a/assets/js/fde7cc64.244ec1e4.js
+++ b/assets/js/fde7cc64.423b5083.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.5afca37a.js b/assets/js/runtime~main.2d1180dd.js
similarity index 58%
rename from assets/js/runtime~main.5afca37a.js
rename to assets/js/runtime~main.2d1180dd.js
index 511040a07..2ce6ff61b 100644
--- a/assets/js/runtime~main.5afca37a.js
+++ b/assets/js/runtime~main.2d1180dd.js
@@ -1 +1 @@
-(()=>{"use strict";var e,c,a,f,d,b={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(c,a,f,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}d=d||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
+(()=>{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],b=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}b=b||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index ba6e17f5b..b79250b65 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index b28546434..1587759a2 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OpenDAL Internal: Data Reading | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:la [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index a527427d9..4130c140f 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 9fe803712..87871fa5b 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.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 b6c38e04e..11b13fbd6 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
index 14c91ee43..6e8f31862 100644
--- a/blog/owo-1/index.html
+++ b/blog/owo-1/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OwO #1: The v0.40 Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/owo-1"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"> [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.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 99edbf918..e18588f72 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">2 posts tagged with &quot;announcement&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index ce70d8ac3..d11122714 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 438f8df80..98fc64c7a 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;internal&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:tit [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
index fcbb1964d..4b12250e0 100644
--- a/blog/tags/owo/index.html
+++ b/blog/tags/owo/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;owo&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/owo"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" conten [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
index 370002602..a3f211949 100644
--- a/community/category/committers/index.html
+++ b/community/category/committers/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Committers | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/committers"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="c [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
index d7e816f0f..adfa4a66a 100644
--- a/community/category/reference/index.html
+++ b/community/category/reference/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Reference | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/reference"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cur [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/committer/index.html b/community/committers/committer/index.html
index 03e4ec553..1b95d419c 100644
--- a/community/committers/committer/index.html
+++ b/community/committers/committer/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Committer onboarding | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/committer"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/podling-report/index.html b/community/committers/podling-report/index.html
index 7d89c3ef2..fe01aeb23 100644
--- a/community/committers/podling-report/index.html
+++ b/community/committers/podling-report/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Podling status reports | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/podling-report"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_v [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/reference/generate_release_note/index.html b/community/committers/reference/generate_release_note/index.html
index c332e8741..a59be6beb 100644
--- a/community/committers/reference/generate_release_note/index.html
+++ b/community/committers/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Generate release note | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" na [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/reference/setup_gpg/index.html b/community/committers/reference/setup_gpg/index.html
index 70e3a7a1d..448429160 100644
--- a/community/committers/reference/setup_gpg/index.html
+++ b/community/committers/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Setup GPG key | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/setup_gpg"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versi [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/release/index.html b/community/committers/release/index.html
index efa3e123e..565d86eba 100644
--- a/community/committers/release/index.html
+++ b/community/committers/release/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Create a OpenDAL Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/release"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versio [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -20,7 +20,7 @@ please cancel the release for the current <code>release_version</code>,
 <em>increase th RC counting</em> and re-initiate a release with the new <code>release_version</code>.
 And remember to delete the wrong artifacts from the SVN dist repo.
 Additionally, you should also drop the staging Maven artifacts on <a href="https://repository.apache.org" target="_blank" rel="noopener noreferrer">https://repository.apache.org</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><h3 class="anchor  [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/verify/index.html b/community/committers/verify/index.html
index 6d2331fff..025ace4ec 100644
--- a/community/committers/verify/index.html
+++ b/community/committers/verify/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Verify a release candidate | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/verify"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versi [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -13,7 +13,7 @@
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
 or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index d9dbf7d85..7830eb8ed 100644
--- a/community/index.html
+++ b/community/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Community | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/"><meta data-rh="true" 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-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/c/annotated.html b/docs/c/annotated.html
index 88f58cdbb..2bd318308 100644
--- a/docs/c/annotated.html
+++ b/docs/c/annotated.html
@@ -69,21 +69,22 @@ $(function() {
 <div class="contents">
 <div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
 <table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__blocking__lister.html" target="_self">opendal_blocking_lister</a></td><td class="desc">BlockingLister is designed to list entries at given path in a blocking manner </td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__bytes.html" target="_self">opendal_bytes</a></td><td class="desc">Opendal_bytes carries raw-bytes with its length </td></tr>
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__bytes.html" target="_self">opendal_bytes</a></td><td class="desc">Opendal_bytes carries raw-bytes with its length </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__entry.html" target="_self">opendal_entry</a></td><td class="desc">Opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a> </td></tr>
 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__error.html" target="_self">opendal_error</a></td><td class="desc">The opendal error type for C binding, containing an error code and corresponding error message </td></tr>
-<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__list__entry.html" target="_self">opendal_list_entry</a></td><td class="desc">Opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking [...]
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__lister.html" target="_self">opendal_lister</a></td><td class="desc">BlockingLister is designed to list entries at given path in a blocking manner </td></tr>
 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__metadata.html" target="_self">opendal_metadata</a></td><td class="desc">Carries all metadata associated with a path </td></tr>
-<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator__options.html" target="_self">opendal_operator_options</a></td><td class="desc">The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_ [...]
-<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator__ptr.html" target="_self">opendal_operator_ptr</a></td><td class="desc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL </td></tr>
-<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__reader.html" target="_self">opendal_reader</a></td><td class="desc"></td></tr>
-<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__is__exist.html" target="_self">opendal_result_is_exist</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a> </td></tr>
-<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__list.html" target="_self">opendal_result_list</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </td></tr>
-<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__new.html" target="_self">opendal_result_operator_new</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation </td></tr>
-<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__read.html" target="_self">opendal_result_read</a></td><td class="desc">The result type returned by opendal's read operation </td></tr>
-<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__reader.html" target="_self">opendal_result_reader</a></td><td class="desc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the p [...]
-<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__reader__read.html" target="_self">opendal_result_reader_read</a></td><td class="desc"></td></tr>
-<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__stat.html" target="_self">opendal_result_stat</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a> </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator.html" target="_self">opendal_operator</a></td><td class="desc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator__options.html" target="_self">opendal_operator_options</a></td><td class="desc">The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces..."> [...]
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__reader.html" target="_self">opendal_reader</a></td><td class="desc">The result type returned by opendal's reader operation </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__is__exist.html" target="_self">opendal_result_is_exist</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a> </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__list.html" target="_self">opendal_result_list</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__lister__next.html" target="_self">opendal_result_lister_next</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list res [...]
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__new.html" target="_self">opendal_result_operator_new</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__reader.html" target="_self">opendal_result_operator_reader</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for [...]
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__read.html" target="_self">opendal_result_read</a></td><td class="desc">The result type returned by opendal's read operation </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__reader__read.html" target="_self">opendal_result_reader_read</a></td><td class="desc">The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size f [...]
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__stat.html" target="_self">opendal_result_stat</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a> </td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
diff --git a/docs/c/classes.html b/docs/c/classes.html
index 376dc7540..7d510fe0c 100644
--- a/docs/c/classes.html
+++ b/docs/c/classes.html
@@ -71,7 +71,7 @@ $(function() {
 <div class="classindex">
 <dl class="classindex even">
 <dt class="alphachar"><a name="letter_O">O</a></dt>
-<dd><a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a></dd><dd><a class="el" href="structopendal__bytes.html">opendal_bytes</a></dd><dd><a class="el" href="structopendal__error.html">opendal_error</a></dd><dd><a class="el" href="structopendal__list__entry.html">opendal_list_entry</a></dd><dd><a class="el" href="structopendal__metadata.html">opendal_metadata</a></dd><dd><a class="el" href="structopendal__operator__options.html">opendal_operator_options</ [...]
+<dd><a class="el" href="structopendal__bytes.html">opendal_bytes</a></dd><dd><a class="el" href="structopendal__entry.html">opendal_entry</a></dd><dd><a class="el" href="structopendal__error.html">opendal_error</a></dd><dd><a class="el" href="structopendal__lister.html">opendal_lister</a></dd><dd><a class="el" href="structopendal__metadata.html">opendal_metadata</a></dd><dd><a class="el" href="structopendal__operator.html">opendal_operator</a></dd><dd><a class="el" href="structopendal__o [...]
 </div>
 </div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/c/functions.html b/docs/c/functions.html
index 3bf7ae075..89cba5818 100644
--- a/docs/c/functions.html
+++ b/docs/c/functions.html
@@ -71,18 +71,22 @@ $(function() {
 : <a class="el" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes</a>
 , <a class="el" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read</a>
 </li>
+<li>entry
+: <a class="el" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">opendal_result_lister_next</a>
+</li>
 <li>error
 : <a class="el" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist</a>
 , <a class="el" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list</a>
+, <a class="el" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">opendal_result_lister_next</a>
 , <a class="el" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">opendal_result_operator_new</a>
+, <a class="el" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">opendal_result_operator_reader</a>
 , <a class="el" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read</a>
-, <a class="el" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">opendal_result_reader</a>
 , <a class="el" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">opendal_result_reader_read</a>
 , <a class="el" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat</a>
 </li>
 <li>inner
-: <a class="el" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">opendal_blocking_lister</a>
-, <a class="el" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">opendal_list_entry</a>
+: <a class="el" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">opendal_entry</a>
+, <a class="el" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">opendal_lister</a>
 , <a class="el" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">opendal_metadata</a>
 , <a class="el" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">opendal_operator_options</a>
 , <a class="el" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">opendal_reader</a>
@@ -94,7 +98,7 @@ $(function() {
 : <a class="el" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes</a>
 </li>
 <li>lister
-: <a class="el" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">opendal_result_list</a>
+: <a class="el" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">opendal_result_list</a>
 </li>
 <li>message
 : <a class="el" href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">opendal_error</a>
@@ -102,14 +106,14 @@ $(function() {
 <li>meta
 : <a class="el" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat</a>
 </li>
-<li>operator_ptr
-: <a class="el" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">opendal_result_operator_new</a>
+<li>op
+: <a class="el" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">opendal_result_operator_new</a>
 </li>
 <li>ptr
-: <a class="el" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">opendal_operator_ptr</a>
+: <a class="el" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">opendal_operator</a>
 </li>
 <li>reader
-: <a class="el" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">opendal_result_reader</a>
+: <a class="el" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">opendal_result_operator_reader</a>
 </li>
 <li>size
 : <a class="el" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">opendal_result_reader_read</a>
diff --git a/docs/c/functions_vars.html b/docs/c/functions_vars.html
index 745d9de07..1418dba77 100644
--- a/docs/c/functions_vars.html
+++ b/docs/c/functions_vars.html
@@ -71,18 +71,22 @@ $(function() {
 : <a class="el" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes</a>
 , <a class="el" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read</a>
 </li>
+<li>entry
+: <a class="el" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">opendal_result_lister_next</a>
+</li>
 <li>error
 : <a class="el" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist</a>
 , <a class="el" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list</a>
+, <a class="el" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">opendal_result_lister_next</a>
 , <a class="el" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">opendal_result_operator_new</a>
+, <a class="el" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">opendal_result_operator_reader</a>
 , <a class="el" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read</a>
-, <a class="el" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">opendal_result_reader</a>
 , <a class="el" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">opendal_result_reader_read</a>
 , <a class="el" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat</a>
 </li>
 <li>inner
-: <a class="el" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">opendal_blocking_lister</a>
-, <a class="el" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">opendal_list_entry</a>
+: <a class="el" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">opendal_entry</a>
+, <a class="el" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">opendal_lister</a>
 , <a class="el" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">opendal_metadata</a>
 , <a class="el" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">opendal_operator_options</a>
 , <a class="el" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">opendal_reader</a>
@@ -94,7 +98,7 @@ $(function() {
 : <a class="el" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes</a>
 </li>
 <li>lister
-: <a class="el" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">opendal_result_list</a>
+: <a class="el" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">opendal_result_list</a>
 </li>
 <li>message
 : <a class="el" href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">opendal_error</a>
@@ -102,14 +106,14 @@ $(function() {
 <li>meta
 : <a class="el" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat</a>
 </li>
-<li>operator_ptr
-: <a class="el" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">opendal_result_operator_new</a>
+<li>op
+: <a class="el" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">opendal_result_operator_new</a>
 </li>
 <li>ptr
-: <a class="el" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">opendal_operator_ptr</a>
+: <a class="el" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">opendal_operator</a>
 </li>
 <li>reader
-: <a class="el" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">opendal_result_reader</a>
+: <a class="el" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">opendal_result_operator_reader</a>
 </li>
 <li>size
 : <a class="el" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">opendal_result_reader_read</a>
diff --git a/docs/c/globals.html b/docs/c/globals.html
index 6fbc32137..7390b178e 100644
--- a/docs/c/globals.html
+++ b/docs/c/globals.html
@@ -86,14 +86,11 @@ $(function() {
 <li>OPENDAL_ALREADY_EXISTS
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a8f0a65852b0b02a0a3c73f7382607d67">opendal.h</a>
 </li>
-<li>opendal_blocking_lister
-: <a class="el" href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">opendal.h</a>
-</li>
 <li>opendal_bytes
 : <a class="el" href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal.h</a>
 </li>
 <li>opendal_bytes_free()
-: <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal.h</a>
+: <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal.h</a>
 </li>
 <li>opendal_code
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal.h</a>
@@ -101,6 +98,18 @@ $(function() {
 <li>OPENDAL_CONFIG_INVALID
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5">opendal.h</a>
 </li>
+<li>opendal_entry
+: <a class="el" href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">opendal.h</a>
+</li>
+<li>opendal_entry_free()
+: <a class="el" href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">opendal.h</a>
+</li>
+<li>opendal_entry_name()
+: <a class="el" href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">opendal.h</a>
+</li>
+<li>opendal_entry_path()
+: <a class="el" href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">opendal.h</a>
+</li>
 <li>opendal_error
 : <a class="el" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal.h</a>
 </li>
@@ -113,23 +122,14 @@ $(function() {
 <li>OPENDAL_IS_SAME_FILE
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2aa2ade9f6ea9d1ad5a6f328a73217e536">opendal.h</a>
 </li>
-<li>opendal_list_entry
-: <a class="el" href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">opendal.h</a>
-</li>
-<li>opendal_list_entry_free()
-: <a class="el" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal.h</a>
-</li>
-<li>opendal_list_entry_name()
-: <a class="el" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal.h</a>
-</li>
-<li>opendal_list_entry_path()
-: <a class="el" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal.h</a>
+<li>opendal_lister
+: <a class="el" href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">opendal.h</a>
 </li>
 <li>opendal_lister_free()
-: <a class="el" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal.h</a>
+: <a class="el" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal.h</a>
 </li>
 <li>opendal_lister_next()
-: <a class="el" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal.h</a>
 </li>
 <li>opendal_metadata
 : <a class="el" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal.h</a>
@@ -152,26 +152,20 @@ $(function() {
 <li>OPENDAL_NOT_FOUND
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a549e63735c8104369fd9230b441ebbf1">opendal.h</a>
 </li>
-<li>opendal_operator_blocking_delete()
-: <a class="el" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_list()
-: <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal.h</a>
+<li>opendal_operator
+: <a class="el" href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">opendal.h</a>
 </li>
-<li>opendal_operator_blocking_read()
-: <a class="el" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_reader()
-: <a class="el" href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_write()
-: <a class="el" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal.h</a>
+<li>opendal_operator_delete()
+: <a class="el" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal.h</a>
 </li>
 <li>opendal_operator_free()
-: <a class="el" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal.h</a>
 </li>
 <li>opendal_operator_is_exist()
-: <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal.h</a>
+: <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal.h</a>
+</li>
+<li>opendal_operator_list()
+: <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal.h</a>
 </li>
 <li>opendal_operator_new()
 : <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal.h</a>
@@ -188,11 +182,17 @@ $(function() {
 <li>opendal_operator_options_set()
 : <a class="el" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal.h</a>
 </li>
-<li>opendal_operator_ptr
-: <a class="el" href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">opendal.h</a>
+<li>opendal_operator_read()
+: <a class="el" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal.h</a>
+</li>
+<li>opendal_operator_reader()
+: <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal.h</a>
 </li>
 <li>opendal_operator_stat()
-: <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal.h</a>
+</li>
+<li>opendal_operator_write()
+: <a class="el" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal.h</a>
 </li>
 <li>OPENDAL_PERMISSION_DENIED
 : <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7d8ddf01b6fc55e87b7a89e04e5b3681">opendal.h</a>
@@ -207,7 +207,7 @@ $(function() {
 : <a class="el" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal.h</a>
 </li>
 <li>opendal_reader_read()
-: <a class="el" href="opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">opendal.h</a>
 </li>
 <li>opendal_result_is_exist
 : <a class="el" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">opendal.h</a>
@@ -215,15 +215,18 @@ $(function() {
 <li>opendal_result_list
 : <a class="el" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal.h</a>
 </li>
+<li>opendal_result_lister_next
+: <a class="el" href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">opendal.h</a>
+</li>
 <li>opendal_result_operator_new
 : <a class="el" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal.h</a>
 </li>
+<li>opendal_result_operator_reader
+: <a class="el" href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">opendal.h</a>
+</li>
 <li>opendal_result_read
 : <a class="el" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal.h</a>
 </li>
-<li>opendal_result_reader
-: <a class="el" href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">opendal.h</a>
-</li>
 <li>opendal_result_reader_read
 : <a class="el" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal.h</a>
 </li>
diff --git a/docs/c/globals_func.html b/docs/c/globals_func.html
index 5563bc3bc..c30c3da2a 100644
--- a/docs/c/globals_func.html
+++ b/docs/c/globals_func.html
@@ -65,25 +65,25 @@ $(function() {
 <div class="contents">
 &#160;<ul>
 <li>opendal_bytes_free()
-: <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal.h</a>
+: <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal.h</a>
 </li>
-<li>opendal_error_free()
-: <a class="el" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal.h</a>
+<li>opendal_entry_free()
+: <a class="el" href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">opendal.h</a>
 </li>
-<li>opendal_list_entry_free()
-: <a class="el" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal.h</a>
+<li>opendal_entry_name()
+: <a class="el" href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">opendal.h</a>
 </li>
-<li>opendal_list_entry_name()
-: <a class="el" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal.h</a>
+<li>opendal_entry_path()
+: <a class="el" href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">opendal.h</a>
 </li>
-<li>opendal_list_entry_path()
-: <a class="el" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal.h</a>
+<li>opendal_error_free()
+: <a class="el" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal.h</a>
 </li>
 <li>opendal_lister_free()
-: <a class="el" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal.h</a>
+: <a class="el" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal.h</a>
 </li>
 <li>opendal_lister_next()
-: <a class="el" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal.h</a>
 </li>
 <li>opendal_metadata_content_length()
 : <a class="el" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal.h</a>
@@ -97,26 +97,17 @@ $(function() {
 <li>opendal_metadata_is_file()
 : <a class="el" href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">opendal.h</a>
 </li>
-<li>opendal_operator_blocking_delete()
-: <a class="el" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_list()
-: <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_read()
-: <a class="el" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_reader()
-: <a class="el" href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">opendal.h</a>
-</li>
-<li>opendal_operator_blocking_write()
-: <a class="el" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal.h</a>
+<li>opendal_operator_delete()
+: <a class="el" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal.h</a>
 </li>
 <li>opendal_operator_free()
-: <a class="el" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal.h</a>
 </li>
 <li>opendal_operator_is_exist()
-: <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal.h</a>
+: <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal.h</a>
+</li>
+<li>opendal_operator_list()
+: <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal.h</a>
 </li>
 <li>opendal_operator_new()
 : <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal.h</a>
@@ -130,14 +121,23 @@ $(function() {
 <li>opendal_operator_options_set()
 : <a class="el" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal.h</a>
 </li>
+<li>opendal_operator_read()
+: <a class="el" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal.h</a>
+</li>
+<li>opendal_operator_reader()
+: <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal.h</a>
+</li>
 <li>opendal_operator_stat()
-: <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal.h</a>
+</li>
+<li>opendal_operator_write()
+: <a class="el" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal.h</a>
 </li>
 <li>opendal_reader_free()
 : <a class="el" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal.h</a>
 </li>
 <li>opendal_reader_read()
-: <a class="el" href="opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">opendal.h</a>
+: <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">opendal.h</a>
 </li>
 </ul>
 </div><!-- contents -->
diff --git a/docs/c/globals_type.html b/docs/c/globals_type.html
index ed34d69c2..8cd754242 100644
--- a/docs/c/globals_type.html
+++ b/docs/c/globals_type.html
@@ -73,30 +73,30 @@ $(function() {
 <li>Entry
 : <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">opendal.h</a>
 </li>
-<li>opendal_blocking_lister
-: <a class="el" href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">opendal.h</a>
-</li>
 <li>opendal_bytes
 : <a class="el" href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal.h</a>
 </li>
 <li>opendal_code
 : <a class="el" href="opendal_8h.html#a333cc71b98ca4ce17183c1b4263ddd1f">opendal.h</a>
 </li>
+<li>opendal_entry
+: <a class="el" href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">opendal.h</a>
+</li>
 <li>opendal_error
 : <a class="el" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal.h</a>
 </li>
-<li>opendal_list_entry
-: <a class="el" href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">opendal.h</a>
+<li>opendal_lister
+: <a class="el" href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">opendal.h</a>
 </li>
 <li>opendal_metadata
 : <a class="el" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal.h</a>
 </li>
+<li>opendal_operator
+: <a class="el" href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">opendal.h</a>
+</li>
 <li>opendal_operator_options
 : <a class="el" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal.h</a>
 </li>
-<li>opendal_operator_ptr
-: <a class="el" href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">opendal.h</a>
-</li>
 <li>opendal_reader
 : <a class="el" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal.h</a>
 </li>
@@ -106,15 +106,18 @@ $(function() {
 <li>opendal_result_list
 : <a class="el" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal.h</a>
 </li>
+<li>opendal_result_lister_next
+: <a class="el" href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">opendal.h</a>
+</li>
 <li>opendal_result_operator_new
 : <a class="el" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal.h</a>
 </li>
+<li>opendal_result_operator_reader
+: <a class="el" href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">opendal.h</a>
+</li>
 <li>opendal_result_read
 : <a class="el" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal.h</a>
 </li>
-<li>opendal_result_reader
-: <a class="el" href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">opendal.h</a>
-</li>
 <li>opendal_result_reader_read
 : <a class="el" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal.h</a>
 </li>
diff --git a/docs/c/index.html b/docs/c/index.html
index b4441aeca..878e9d0ee 100644
--- a/docs/c/index.html
+++ b/docs/c/index.html
@@ -79,8 +79,9 @@ Example</h1>
 <div class="line"><span class="keywordtype">int</span> main()</div>
 <div class="line">{</div>
 <div class="line">    <span class="comment">/* Initialize a operator for &quot;memory&quot; backend, with no options */</span></div>
-<div class="line">    <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> op = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;memory&quot;</span>, 0);</div>
-<div class="line">    assert(op.<a class="code" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">ptr</a> != NULL);</div>
+<div class="line">    <a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> result = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;memory&quot;</span>, 0);</div>
+<div class="line">    assert(result.operator_ptr != NULL);</div>
+<div class="line">    assert(result.<a class="code" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">error</a> == NULL);</div>
 <div class="line"> </div>
 <div class="line">    <span class="comment">/* Prepare some data to be written */</span></div>
 <div class="line">    <a class="code" href="structopendal__bytes.html">opendal_bytes</a> data = {</div>
@@ -89,11 +90,11 @@ Example</h1>
 <div class="line">    };</div>
 <div class="line"> </div>
 <div class="line">    <span class="comment">/* Write this into path &quot;/testpath&quot; */</span></div>
-<div class="line">    <a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a>(op, <span class="stringliteral">&quot;/testpath&quot;</span>, data);</div>
+<div class="line">    <a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a>(op, <span class="stringliteral">&quot;/testpath&quot;</span>, data);</div>
 <div class="line">    assert(error == NULL);</div>
 <div class="line"> </div>
 <div class="line">    <span class="comment">/* We can read it out, make sure the data is the same */</span></div>
-<div class="line">    <a class="code" href="structopendal__result__read.html">opendal_result_read</a> r = <a class="code" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a>(op, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line">    <a class="code" href="structopendal__result__read.html">opendal_result_read</a> r = <a class="code" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a>(op, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
 <div class="line">    <a class="code" href="structopendal__bytes.html">opendal_bytes</a>* read_bytes = r.<a class="code" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">data</a>;</div>
 <div class="line">    assert(r.<a class="code" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">error</a> == NULL);</div>
 <div class="line">    assert(read_bytes-&gt;<a class="code" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">len</a> == 24);</div>
@@ -105,26 +106,26 @@ Example</h1>
 <div class="line">    printf(<span class="stringliteral">&quot;\n&quot;</span>);</div>
 <div class="line"> </div>
 <div class="line">    <span class="comment">/* the opendal_bytes read is heap allocated, please free it */</span></div>
-<div class="line">    <a class="code" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal_bytes_free</a>(read_bytes);</div>
+<div class="line">    <a class="code" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal_bytes_free</a>(read_bytes);</div>
 <div class="line"> </div>
 <div class="line">    <span class="comment">/* the operator_ptr is also heap allocated */</span></div>
-<div class="line">    <a class="code" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a>(&amp;op);</div>
+<div class="line">    <a class="code" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a>(&amp;op);</div>
 <div class="line">}</div>
 <div class="ttc" id="aopendal_8h_html"><div class="ttname"><a href="opendal_8h.html">opendal.h</a></div></div>
-<div class="ttc" id="aopendal_8h_html_a39c13941f26a7a1bbb0b52cbb7af61b9"><div class="ttname"><a href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_blocking_write(const struct opendal_operator_ptr *ptr, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
+<div class="ttc" id="aopendal_8h_html_a04d551eea4b6248d96c9ce9278d27855"><div class="ttname"><a href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator.</div></div>
 <div class="ttc" id="aopendal_8h_html_a3b32f655689a122d2b6feff169fac442"><div class="ttname"><a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a></div><div class="ttdeci">struct opendal_result_operator_new opendal_operator_new(const char *scheme, const struct opendal_operator_options *options)</div><div class="ttdoc">Construct an operator based on scheme and options</div></div>
-<div class="ttc" id="aopendal_8h_html_a3e038035b4339e19f24e1aa8ef678def"><div class="ttname"><a href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator_ptr *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator_ptr.</div></div>
-<div class="ttc" id="aopendal_8h_html_ae8fc63885af34e53afbb075dfed39732"><div class="ttname"><a href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_blocking_read(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
-<div class="ttc" id="aopendal_8h_html_aea5253c2bbe9438349eebb68a18a82ea"><div class="ttname"><a href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal_bytes_free</a></div><div class="ttdeci">void opendal_bytes_free(struct opendal_bytes *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_bytes.</div></div>
-<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:240</div></div>
-<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:248</div></div>
-<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:244</div></div>
-<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:270</div></div>
-<div class="ttc" id="astructopendal__operator__ptr_html"><div class="ttname"><a href="structopendal__operator__ptr.html">opendal_operator_ptr</a></div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
-<div class="ttc" id="astructopendal__operator__ptr_html_a17b619ae01bb6471f51f8501ab18dd9b"><div class="ttname"><a href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">opendal_operator_ptr::ptr</a></div><div class="ttdeci">const struct BlockingOperator * ptr</div><div class="ttdef"><b>Definition:</b> opendal.h:228</div></div>
-<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:318</div></div>
-<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:326</div></div>
-<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:322</div></div>
+<div class="ttc" id="aopendal_8h_html_ab1419180b377316e27416b742bcc059f"><div class="ttname"><a href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_read(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
+<div class="ttc" id="aopendal_8h_html_adba027eb1460c828ff32e87f0ceb338a"><div class="ttname"><a href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal_bytes_free</a></div><div class="ttdeci">void opendal_bytes_free(struct opendal_bytes *bs)</div><div class="ttdoc">Frees the heap memory used by the opendal_bytes.</div></div>
+<div class="ttc" id="aopendal_8h_html_af8b6596a53263101e93b4d73e9eb928c"><div class="ttname"><a href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_write(const struct opendal_operator *op, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
+<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:219</div></div>
+<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:227</div></div>
+<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
+<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:249</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html"><div class="ttname"><a href="structopendal__result__operator__new.html">opendal_result_operator_new</a></div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:349</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html_a5ee50d6c74038806e57d12d1880ac520"><div class="ttname"><a href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">opendal_result_operator_new::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:357</div></div>
+<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:386</div></div>
+<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:394</div></div>
+<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:390</div></div>
 </div><!-- fragment --><p>For more examples, please refer to <code>./examples</code></p>
 <h1><a class="anchor" id="autotoc_md36"></a>
 Prerequisites</h1>
diff --git a/docs/c/opendal_8h.html b/docs/c/opendal_8h.html
index dfd07b0d1..2974d4c52 100644
--- a/docs/c/opendal_8h.html
+++ b/docs/c/opendal_8h.html
@@ -84,48 +84,53 @@ $(function() {
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
 Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL.  <a href="structopendal__operator__ptr.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__bytes.html">opendal_bytes</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> carries raw-bytes with its length  <a href="structopendal__bytes.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__error.html">opendal_error</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The opendal error type for C binding, containing an error code and corresponding error message.  <a href="structopendal__error.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__entry.html">opendal_entry</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>  <a href="structopendal__entry.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list result of the list operation, the error field is the error code and error message. If the operation succeeds, the error should be NULL.  <a href="structopendal__result__lister__next.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__lister.html">opendal_lister</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">BlockingLister is designed to list entries at given path in a blocking manner.  <a href="structopendal__lister.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__metadata.html">opendal_metadata</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Carries all metadata associated with a path.  <a href="structopendal__metadata.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__operator.html">opendal_operator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL.  <a href="structopendal__operator.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation.  <a href="structopendal__result__operator__new.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__operator__options.html">opendal_operator_options</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>.  <a href="structopendal__operator__options.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>.  <a href="structopendal__operator__options.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__read.html">opendal_result_read</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal's read operation.  <a href="structopendal__result__read.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__reader.html">opendal_reader</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal's reader operation.  <a href="structopendal__reader.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__reader.html">opendal_result_reader</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> represents whether the stat operation is successful.  <a href="structopendal__result__reader.html#details">More...</a><br /></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>, the field <code>reader</code> contains the reader of the path, which is an  [...]
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  <a href="structopendal__result__is__exist.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__metadata.html">opendal_metadata</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Carries all metadata associated with a path.  <a href="structopendal__metadata.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  <a href="structopendal__result__is__exist.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__stat.html">opendal_result_stat</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  <a href="structopendal__result__stat.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">BlockingLister is designed to list entries at given path in a blocking manner.  <a href="structopendal__blocking__lister.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  <a href="structopendal__result__stat.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>.  <a href="structopendal__result__list.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__list__entry.html">opendal_list_entry</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a> is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a>  <a href="s [...]
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>.  <a href="structopendal__result__list.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__reader__read.html">opendal_result_reader_read</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size field, which is the size of the data read, which is zero on error. The error field is the error code and error message.  <a href="structopendal__result__reader__read.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
@@ -139,48 +144,53 @@ Typedefs</h2></td></tr>
 <tr class="separator:a8c11fb124aac4911b663122dbfa7d1fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a65b0d0252adaf76f9ce2004299344de8"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a></td></tr>
 <tr class="separator:a65b0d0252adaf76f9ce2004299344de8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae5d70fff7f6c87e07b8aa97e08e7191"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">opendal_operator_ptr</a></td></tr>
-<tr class="memdesc:aae5d70fff7f6c87e07b8aa97e08e7191"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL.  <a href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">More...</a><br /></td></tr>
-<tr class="separator:aae5d70fff7f6c87e07b8aa97e08e7191"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a4117acdec0983ce12962491960847381"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal_bytes</a></td></tr>
 <tr class="memdesc:a4117acdec0983ce12962491960847381"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> carries raw-bytes with its length  <a href="opendal_8h.html#a4117acdec0983ce12962491960847381">More...</a><br /></td></tr>
 <tr class="separator:a4117acdec0983ce12962491960847381"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aba7687efb3e2f74800e93aee4eede6cc"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__error.html">opendal_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal_error</a></td></tr>
 <tr class="memdesc:aba7687efb3e2f74800e93aee4eede6cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">The opendal error type for C binding, containing an error code and corresponding error message.  <a href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">More...</a><br /></td></tr>
 <tr class="separator:aba7687efb3e2f74800e93aee4eede6cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af70798853b9dbd5712006b5f9de831c9"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__entry.html">opendal_entry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">opendal_entry</a></td></tr>
+<tr class="memdesc:af70798853b9dbd5712006b5f9de831c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>  <a href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">More...</a><br /></td></tr>
+<tr class="separator:af70798853b9dbd5712006b5f9de831c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a590096ddcd0245b474880bae76c2137d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">opendal_result_lister_next</a></td></tr>
+<tr class="memdesc:a590096ddcd0245b474880bae76c2137d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list result of the list operation, the error field is the error code and error message. If the operation succeeds, the error should be NULL.  <a href="opendal_8h.html#a590096ddcd0245b474880 [...]
+<tr class="separator:a590096ddcd0245b474880bae76c2137d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a581e3ab221c9b3ed82e0a2eb0ba37f68"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__lister.html">opendal_lister</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">opendal_lister</a></td></tr>
+<tr class="memdesc:a581e3ab221c9b3ed82e0a2eb0ba37f68"><td class="mdescLeft">&#160;</td><td class="mdescRight">BlockingLister is designed to list entries at given path in a blocking manner.  <a href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">More...</a><br /></td></tr>
+<tr class="separator:a581e3ab221c9b3ed82e0a2eb0ba37f68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af0acf7956915881ccd1f0874f309c682"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal_metadata</a></td></tr>
+<tr class="memdesc:af0acf7956915881ccd1f0874f309c682"><td class="mdescLeft">&#160;</td><td class="mdescRight">Carries all metadata associated with a path.  <a href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">More...</a><br /></td></tr>
+<tr class="separator:af0acf7956915881ccd1f0874f309c682"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07642e228c04606083f49cbe02a626ca"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__operator.html">opendal_operator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">opendal_operator</a></td></tr>
+<tr class="memdesc:a07642e228c04606083f49cbe02a626ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL.  <a href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">More...</a><br /></td></tr>
+<tr class="separator:a07642e228c04606083f49cbe02a626ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1c2ddf5212cda7243c1138f55b9cdbc5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal_result_operator_new</a></td></tr>
 <tr class="memdesc:a1c2ddf5212cda7243c1138f55b9cdbc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation.  <a href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">More...</a><br /></td></tr>
 <tr class="separator:a1c2ddf5212cda7243c1138f55b9cdbc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a76d4f0935961d0e49befd7719728fd16"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal_operator_options</a></td></tr>
-<tr class="memdesc:a76d4f0935961d0e49befd7719728fd16"><td class="mdescLeft">&#160;</td><td class="mdescRight">The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>.  <a href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">More...</a><br /></td></tr>
+<tr class="memdesc:a76d4f0935961d0e49befd7719728fd16"><td class="mdescLeft">&#160;</td><td class="mdescRight">The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>.  <a href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">More...</a><br /></td></tr>
 <tr class="separator:a76d4f0935961d0e49befd7719728fd16"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a68a7b0ae2b453dd9ba31ba0d572a4d5d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal_result_read</a></td></tr>
 <tr class="memdesc:a68a7b0ae2b453dd9ba31ba0d572a4d5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal's read operation.  <a href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">More...</a><br /></td></tr>
 <tr class="separator:a68a7b0ae2b453dd9ba31ba0d572a4d5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1f2a071a20d13757ba9cd5fde09c1100"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__reader.html">opendal_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal_reader</a></td></tr>
+<tr class="memdesc:a1f2a071a20d13757ba9cd5fde09c1100"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal's reader operation.  <a href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">More...</a><br /></td></tr>
 <tr class="separator:a1f2a071a20d13757ba9cd5fde09c1100"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7712a472329fe04955dd86a213c78b37"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">opendal_result_reader</a></td></tr>
-<tr class="memdesc:a7712a472329fe04955dd86a213c78b37"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> represents whether the stat operation is successful.  <a href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">More...</a><br /></td></tr>
-<tr class="separator:a7712a472329fe04955dd86a213c78b37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae16e33ed9b7d8a3791f38a4fd5d877c8"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">opendal_result_operator_reader</a></td></tr>
+<tr class="memdesc:ae16e33ed9b7d8a3791f38a4fd5d877c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>, the field <code>reader</code> contains the [...]
+<tr class="separator:ae16e33ed9b7d8a3791f38a4fd5d877c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:afbd6b36f0b084ca5fa251ebd5e317abf"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">opendal_result_is_exist</a></td></tr>
-<tr class="memdesc:afbd6b36f0b084ca5fa251ebd5e317abf"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  <a href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">More...</a><br /></td></tr>
+<tr class="memdesc:afbd6b36f0b084ca5fa251ebd5e317abf"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  <a href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">More...</a><br /></td></tr>
 <tr class="separator:afbd6b36f0b084ca5fa251ebd5e317abf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af0acf7956915881ccd1f0874f309c682"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal_metadata</a></td></tr>
-<tr class="memdesc:af0acf7956915881ccd1f0874f309c682"><td class="mdescLeft">&#160;</td><td class="mdescRight">Carries all metadata associated with a path.  <a href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">More...</a><br /></td></tr>
-<tr class="separator:af0acf7956915881ccd1f0874f309c682"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a07f3f83aa0b650a09986291e47a8ddb0"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__stat.html">opendal_result_stat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">opendal_result_stat</a></td></tr>
-<tr class="memdesc:a07f3f83aa0b650a09986291e47a8ddb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  <a href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">More...</a><br /></td></tr>
+<tr class="memdesc:a07f3f83aa0b650a09986291e47a8ddb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  <a href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">More...</a><br /></td></tr>
 <tr class="separator:a07f3f83aa0b650a09986291e47a8ddb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0b698963d36cbe398ba4bd4e61195e44"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">opendal_blocking_lister</a></td></tr>
-<tr class="memdesc:a0b698963d36cbe398ba4bd4e61195e44"><td class="mdescLeft">&#160;</td><td class="mdescRight">BlockingLister is designed to list entries at given path in a blocking manner.  <a href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">More...</a><br /></td></tr>
-<tr class="separator:a0b698963d36cbe398ba4bd4e61195e44"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a606c20c489cac143082dc3870102f43a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__list.html">opendal_result_list</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal_result_list</a></td></tr>
-<tr class="memdesc:a606c20c489cac143082dc3870102f43a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>.  <a href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">More...</a><br /></td></tr>
+<tr class="memdesc:a606c20c489cac143082dc3870102f43a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>.  <a href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">More...</a><br /></td></tr>
 <tr class="separator:a606c20c489cac143082dc3870102f43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d3583cbe9b8b5281ddbc3c4f78dca33"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">opendal_list_entry</a></td></tr>
-<tr class="memdesc:a3d3583cbe9b8b5281ddbc3c4f78dca33"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a> is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">openda [...]
-<tr class="separator:a3d3583cbe9b8b5281ddbc3c4f78dca33"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1fc707d831b5e91edd1a34c0f08805ff"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structopendal__result__reader__read.html">opendal_result_reader_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal_result_reader_read</a></td></tr>
+<tr class="memdesc:a1fc707d831b5e91edd1a34c0f08805ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size field, which is the size of the data read, which is zero on error. The error field is the error code and error message.  <a href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">M [...]
 <tr class="separator:a1fc707d831b5e91edd1a34c0f08805ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
@@ -205,39 +215,15 @@ Enumerations</h2></td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
 Functions</h2></td></tr>
-<tr class="memitem:a3b32f655689a122d2b6feff169fac442"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a> (const char *scheme, const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *options)</td></tr>
-<tr class="memdesc:a3b32f655689a122d2b6feff169fac442"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an operator based on <code>scheme</code> and <code>options</code>  <a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">More...</a><br /></td></tr>
-<tr class="separator:a3b32f655689a122d2b6feff169fac442"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a39c13941f26a7a1bbb0b52cbb7af61b9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path, struct <a class="el" href="structopen [...]
-<tr class="memdesc:a39c13941f26a7a1bbb0b52cbb7af61b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly write raw bytes to <code>path</code>.  <a href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">More...</a><br /></td></tr>
-<tr class="separator:a39c13941f26a7a1bbb0b52cbb7af61b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae8fc63885af34e53afbb075dfed39732"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:ae8fc63885af34e53afbb075dfed39732"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly read the data from <code>path</code>.  <a href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">More...</a><br /></td></tr>
-<tr class="separator:ae8fc63885af34e53afbb075dfed39732"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6285d4da17f5f873bc7a8edd7301fb81"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">opendal_operator_blocking_reader</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:a6285d4da17f5f873bc7a8edd7301fb81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly read the data from <code>path</code>.  <a href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">More...</a><br /></td></tr>
-<tr class="separator:a6285d4da17f5f873bc7a8edd7301fb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ceeec46dfb498f1b6c9f1138d820977"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal_operator_blocking_delete</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:a2ceeec46dfb498f1b6c9f1138d820977"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly delete the object in <code>path</code>.  <a href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">More...</a><br /></td></tr>
-<tr class="separator:a2ceeec46dfb498f1b6c9f1138d820977"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae5a3bf403cdf78d5c5b1fa9f623f0d80"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:ae5a3bf403cdf78d5c5b1fa9f623f0d80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether the path exists.  <a href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">More...</a><br /></td></tr>
-<tr class="separator:ae5a3bf403cdf78d5c5b1fa9f623f0d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aefa1285911f7cf00837e69ba29d2efd3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__stat.html">opendal_result_stat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:aefa1285911f7cf00837e69ba29d2efd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stat the path, return its metadata.  <a href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">More...</a><br /></td></tr>
-<tr class="separator:aefa1285911f7cf00837e69ba29d2efd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a844f3a690078c34af557ae83e1f1513f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__list.html">opendal_result_list</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal_operator_blocking_list</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr, const char *path)</td></tr>
-<tr class="memdesc:a844f3a690078c34af557ae83e1f1513f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly list the objects in <code>path</code>.  <a href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">More...</a><br /></td></tr>
-<tr class="separator:a844f3a690078c34af557ae83e1f1513f"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a4a8d92df21f5473762677afd9af5f714"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal_error_free</a> (struct <a class="el" href="structopendal__error.html">opendal_error</a> *ptr)</td></tr>
 <tr class="memdesc:a4a8d92df21f5473762677afd9af5f714"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>, ok to call on NULL.  <a href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">More...</a><br /></td></tr>
 <tr class="separator:a4a8d92df21f5473762677afd9af5f714"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e038035b4339e19f24e1aa8ef678def"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a> (const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *op)</td></tr>
-<tr class="memdesc:a3e038035b4339e19f24e1aa8ef678def"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the heap-allocated operator pointed by <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>.  <a href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">More...</a><br /></td></tr>
-<tr class="separator:a3e038035b4339e19f24e1aa8ef678def"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aea5253c2bbe9438349eebb68a18a82ea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal_bytes_free</a> (struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a> *ptr)</td></tr>
-<tr class="memdesc:aea5253c2bbe9438349eebb68a18a82ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the heap memory used by the <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a>.  <a href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">More...</a><br /></td></tr>
-<tr class="separator:aea5253c2bbe9438349eebb68a18a82ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8429a4433316d9bf70cfffbbcb844a3d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal_lister_next</a> (const struct <a class="el" href="structopendal__lister.html">opendal_lister</a> *self)</td></tr>
+<tr class="memdesc:a8429a4433316d9bf70cfffbbcb844a3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the next object to be listed.  <a href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">More...</a><br /></td></tr>
+<tr class="separator:a8429a4433316d9bf70cfffbbcb844a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee248f8b3afbb982fd0ad0baaa1159e3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal_lister_free</a> (const struct <a class="el" href="structopendal__lister.html">opendal_lister</a> *p)</td></tr>
+<tr class="memdesc:aee248f8b3afbb982fd0ad0baaa1159e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the heap-allocated metadata used by <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>.  <a href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">More...</a><br /></td></tr>
+<tr class="separator:aee248f8b3afbb982fd0ad0baaa1159e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a8ff66345b1c45c66920ef0ddfef739c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">opendal_metadata_free</a> (struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a> *ptr)</td></tr>
 <tr class="memdesc:a8ff66345b1c45c66920ef0ddfef739c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the heap-allocated metadata used by <a class="el" href="structopendal__metadata.html" title="Carries all metadata associated with a path.">opendal_metadata</a>.  <a href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">More...</a><br /></td></tr>
 <tr class="separator:a8ff66345b1c45c66920ef0ddfef739c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -250,33 +236,59 @@ Functions</h2></td></tr>
 <tr class="memitem:ac8cb949fb37f83dfcbe78976eaa29409"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">opendal_metadata_is_dir</a> (const struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a> *self)</td></tr>
 <tr class="memdesc:ac8cb949fb37f83dfcbe78976eaa29409"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether the path represents a directory.  <a href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">More...</a><br /></td></tr>
 <tr class="separator:ac8cb949fb37f83dfcbe78976eaa29409"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04d551eea4b6248d96c9ce9278d27855"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op)</td></tr>
+<tr class="memdesc:a04d551eea4b6248d96c9ce9278d27855"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the heap-allocated operator pointed by <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>.  <a href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">More...</a><br /></td></tr>
+<tr class="separator:a04d551eea4b6248d96c9ce9278d27855"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b32f655689a122d2b6feff169fac442"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a> (const char *scheme, const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *options)</td></tr>
+<tr class="memdesc:a3b32f655689a122d2b6feff169fac442"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct an operator based on <code>scheme</code> and <code>options</code>  <a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">More...</a><br /></td></tr>
+<tr class="separator:a3b32f655689a122d2b6feff169fac442"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8b6596a53263101e93b4d73e9eb928c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path, struct <a class="el" href="structopendal__bytes.html">op [...]
+<tr class="memdesc:af8b6596a53263101e93b4d73e9eb928c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly write raw bytes to <code>path</code>.  <a href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">More...</a><br /></td></tr>
+<tr class="separator:af8b6596a53263101e93b4d73e9eb928c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1419180b377316e27416b742bcc059f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:ab1419180b377316e27416b742bcc059f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly read the data from <code>path</code>.  <a href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">More...</a><br /></td></tr>
+<tr class="separator:ab1419180b377316e27416b742bcc059f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aca8d6d56223c55277146afe9ca226944"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal_operator_reader</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:aca8d6d56223c55277146afe9ca226944"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly read the data from <code>path</code>.  <a href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">More...</a><br /></td></tr>
+<tr class="separator:aca8d6d56223c55277146afe9ca226944"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad21a0a160ee32cfa90e2e0ca1e1da0dc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal_operator_delete</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:ad21a0a160ee32cfa90e2e0ca1e1da0dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly delete the object in <code>path</code>.  <a href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">More...</a><br /></td></tr>
+<tr class="separator:ad21a0a160ee32cfa90e2e0ca1e1da0dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc6c32aa41963ac67e612dc47f7edb46"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:acc6c32aa41963ac67e612dc47f7edb46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether the path exists.  <a href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">More...</a><br /></td></tr>
+<tr class="separator:acc6c32aa41963ac67e612dc47f7edb46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d6a3d830761b215c3d03960b6153582"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__stat.html">opendal_result_stat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:a8d6a3d830761b215c3d03960b6153582"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stat the path, return its metadata.  <a href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">More...</a><br /></td></tr>
+<tr class="separator:a8d6a3d830761b215c3d03960b6153582"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8f2888ef406d9fc81af0015a904af9c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__list.html">opendal_result_list</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal_operator_list</a> (const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *op, const char *path)</td></tr>
+<tr class="memdesc:af8f2888ef406d9fc81af0015a904af9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blockingly list the objects in <code>path</code>.  <a href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">More...</a><br /></td></tr>
+<tr class="separator:af8f2888ef406d9fc81af0015a904af9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adba027eb1460c828ff32e87f0ceb338a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal_bytes_free</a> (struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a> *bs)</td></tr>
+<tr class="memdesc:adba027eb1460c828ff32e87f0ceb338a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the heap memory used by the <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a>.  <a href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">More...</a><br /></td></tr>
+<tr class="separator:adba027eb1460c828ff32e87f0ceb338a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a67b1457f2b1258551552dc383840f288"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a> (void)</td></tr>
-<tr class="memdesc:a67b1457f2b1258551552dc383840f288"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a heap-allocated <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a>.  <a href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">More...</a><br /></td></tr>
+<tr class="memdesc:a67b1457f2b1258551552dc383840f288"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a heap-allocated <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a>.  <a href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">More...</a><br /></td></tr>
 <tr class="separator:a67b1457f2b1258551552dc383840f288"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af408af922875eb26c25cef4ddfdede02"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a> (struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *self, const char *key, const char *value)</td></tr>
-<tr class="memdesc:af408af922875eb26c25cef4ddfdede02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a Key-Value pair inside <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a>.  <a href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">More...</a><br /></td></tr>
+<tr class="memdesc:af408af922875eb26c25cef4ddfdede02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set a Key-Value pair inside <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a>.  <a href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">More...</a><br /></td></tr>
 <tr class="separator:af408af922875eb26c25cef4ddfdede02"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1d65b173b087b2abca126de2e951b412"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a> (const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *options)</td></tr>
-<tr class="memdesc:a1d65b173b087b2abca126de2e951b412"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the allocated memory used by [<code><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a></code>].  <a href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">More...</a><br /></td></tr>
+<tr class="memdesc:a1d65b173b087b2abca126de2e951b412"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the allocated memory used by [<code><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a></code>].  <a href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">More...</a><br /></td></tr>
 <tr class="separator:a1d65b173b087b2abca126de2e951b412"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a191fdabb43a5173bcb00fbb3f615070c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal_lister_next</a> (const struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *self)</td></tr>
-<tr class="memdesc:a191fdabb43a5173bcb00fbb3f615070c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the next object to be listed.  <a href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">More...</a><br /></td></tr>
-<tr class="separator:a191fdabb43a5173bcb00fbb3f615070c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a25e2bd426163636455d6ba2e82547db7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal_lister_free</a> (const struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *p)</td></tr>
-<tr class="memdesc:a25e2bd426163636455d6ba2e82547db7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the heap-allocated metadata used by <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a>.  <a href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">More...</a><br /></td></tr>
-<tr class="separator:a25e2bd426163636455d6ba2e82547db7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3a9984872f04ae478af91a15e1af0af0"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal_list_entry_path</a> (const struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *self)</td></tr>
-<tr class="memdesc:a3a9984872f04ae478af91a15e1af0af0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Path of entry.  <a href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">More...</a><br /></td></tr>
-<tr class="separator:a3a9984872f04ae478af91a15e1af0af0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac9b6091ec4c8aa0333727b34de3fa845"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal_list_entry_name</a> (const struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *self)</td></tr>
-<tr class="memdesc:ac9b6091ec4c8aa0333727b34de3fa845"><td class="mdescLeft">&#160;</td><td class="mdescRight">Name of entry.  <a href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">More...</a><br /></td></tr>
-<tr class="separator:ac9b6091ec4c8aa0333727b34de3fa845"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afa415362bf713d7c7869225a7f50f4a5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal_list_entry_free</a> (struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *ptr)</td></tr>
-<tr class="memdesc:afa415362bf713d7c7869225a7f50f4a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the heap memory used by the <a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a>.  <a href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">More...</a><br /></td></tr>
-<tr class="separator:afa415362bf713d7c7869225a7f50f4a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae10ef4bd17ee529fbfa8ab6ed9d0e3a4"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__reader__read.html">opendal_result_reader_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">opendal_reader_read</a> (const struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *self, uint8_t *buf, uintptr_t len)</td></tr>
-<tr class="separator:ae10ef4bd17ee529fbfa8ab6ed9d0e3a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae712985c1de6bc0bb35c85b3cadefab9"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">opendal_entry_path</a> (const struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *self)</td></tr>
+<tr class="memdesc:ae712985c1de6bc0bb35c85b3cadefab9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Path of entry.  <a href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">More...</a><br /></td></tr>
+<tr class="separator:ae712985c1de6bc0bb35c85b3cadefab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa2109178eeaabde28bf8ba7e3110ed5"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">opendal_entry_name</a> (const struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *self)</td></tr>
+<tr class="memdesc:aaa2109178eeaabde28bf8ba7e3110ed5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Name of entry.  <a href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">More...</a><br /></td></tr>
+<tr class="separator:aaa2109178eeaabde28bf8ba7e3110ed5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9238bb47d83d4b8d98981122f3824bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">opendal_entry_free</a> (struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *ptr)</td></tr>
+<tr class="memdesc:af9238bb47d83d4b8d98981122f3824bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the heap memory used by the opendal_list_entry.  <a href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">More...</a><br /></td></tr>
+<tr class="separator:af9238bb47d83d4b8d98981122f3824bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a2ea5159526b724de9724dd905d2d3e"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__result__reader__read.html">opendal_result_reader_read</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">opendal_reader_read</a> (const struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *reader, uint8_t *buf, uintptr_t len)</td></tr>
+<tr class="memdesc:a1a2ea5159526b724de9724dd905d2d3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read data from the reader.  <a href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">More...</a><br /></td></tr>
+<tr class="separator:a1a2ea5159526b724de9724dd905d2d3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a7ef708841e8d9a0cebb64a983ef4d472"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal_reader_free</a> (struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *ptr)</td></tr>
+<tr class="memdesc:a7ef708841e8d9a0cebb64a983ef4d472"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the heap memory used by the <a class="el" href="structopendal__reader.html" title="The result type returned by opendal&#39;s reader operation.">opendal_reader</a>.  <a href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">More...</a><br /></td></tr>
 <tr class="separator:a7ef708841e8d9a0cebb64a983ef4d472"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Typedef Documentation</h2>
@@ -358,56 +370,59 @@ Notes</h1>
 </div><!-- fragment --> 
 </div>
 </div>
-<a id="a0b698963d36cbe398ba4bd4e61195e44"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0b698963d36cbe398ba4bd4e61195e44">&#9670;&nbsp;</a></span>opendal_blocking_lister</h2>
+<a id="a4117acdec0983ce12962491960847381"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4117acdec0983ce12962491960847381">&#9670;&nbsp;</a></span>opendal_bytes</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a> <a class="el" href="structopendal__bytes.html">opendal_bytes</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>BlockingLister is designed to list entries at given path in a blocking manner. </p>
-<p>Users can construct Lister by <code>blocking_list</code> or <code>blocking_scan</code>(currently not supported in C binding)</p>
-<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </dd></dl>
+<p><a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> carries raw-bytes with its length </p>
+<p>The <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> type is a C-compatible substitute for Vec type in Rust, it has to be manually freed. You have to call <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the heap memory to avoid memory leak.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free</a> </dd></dl>
 
 </div>
 </div>
-<a id="a4117acdec0983ce12962491960847381"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4117acdec0983ce12962491960847381">&#9670;&nbsp;</a></span>opendal_bytes</h2>
+<a id="a333cc71b98ca4ce17183c1b4263ddd1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a333cc71b98ca4ce17183c1b4263ddd1f">&#9670;&nbsp;</a></span>opendal_code</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a> <a class="el" href="structopendal__bytes.html">opendal_bytes</a></td>
+          <td class="memname">typedef enum <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a> <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p><a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> carries raw-bytes with its length </p>
-<p>The <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> type is a C-compatible substitute for Vec type in Rust, it has to be manually freed. You have to call <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the heap memory to avoid memory leak.</p>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free</a> </dd></dl>
+<p>The error code for all opendal APIs in C binding. </p>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000001">Todo:</a></b></dt><dd>The error handling is not complete, the error with error message will be added in the future. </dd></dl>
 
 </div>
 </div>
-<a id="a333cc71b98ca4ce17183c1b4263ddd1f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a333cc71b98ca4ce17183c1b4263ddd1f">&#9670;&nbsp;</a></span>opendal_code</h2>
+<a id="af70798853b9dbd5712006b5f9de831c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af70798853b9dbd5712006b5f9de831c9">&#9670;&nbsp;</a></span>opendal_entry</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef enum <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a> <a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__entry.html">opendal_entry</a> <a class="el" href="structopendal__entry.html">opendal_entry</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>The error code for all opendal APIs in C binding. </p>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000001">Todo:</a></b></dt><dd>The error handling is not complete, the error with error message will be added in the future. </dd></dl>
+<p>opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a> </p>
+<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </dd>
+<dd>
+opendal_list_entry_path() </dd>
+<dd>
+opendal_list_entry_name() </dd></dl>
 
 </div>
 </div>
@@ -435,24 +450,21 @@ Notes</h1>
 
 </div>
 </div>
-<a id="a3d3583cbe9b8b5281ddbc3c4f78dca33"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d3583cbe9b8b5281ddbc3c4f78dca33">&#9670;&nbsp;</a></span>opendal_list_entry</h2>
+<a id="a581e3ab221c9b3ed82e0a2eb0ba37f68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a581e3ab221c9b3ed82e0a2eb0ba37f68">&#9670;&nbsp;</a></span>opendal_lister</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__lister.html">opendal_lister</a> <a class="el" href="structopendal__lister.html">opendal_lister</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p><a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a> is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a> </p>
-<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </dd>
-<dd>
-<a class="el" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0" title="Path of entry.">opendal_list_entry_path()</a> </dd>
-<dd>
-<a class="el" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845" title="Name of entry.">opendal_list_entry_name()</a> </dd></dl>
+<p>BlockingLister is designed to list entries at given path in a blocking manner. </p>
+<p>Users can construct Lister by <code>blocking_list</code> or <code>blocking_scan</code>(currently not supported in C binding)</p>
+<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </dd></dl>
 
 </div>
 </div>
@@ -475,48 +487,48 @@ Notes</h1>
 
 </div>
 </div>
-<a id="a76d4f0935961d0e49befd7719728fd16"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a76d4f0935961d0e49befd7719728fd16">&#9670;&nbsp;</a></span>opendal_operator_options</h2>
+<a id="a07642e228c04606083f49cbe02a626ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a07642e228c04606083f49cbe02a626ca">&#9670;&nbsp;</a></span>opendal_operator</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__operator.html">opendal_operator</a> <a class="el" href="structopendal__operator.html">opendal_operator</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>. </p>
-<dl class="section note"><dt>Note</dt><dd>This is also a heap-allocated struct, please free it after you use it</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> has an example of using <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a> </dd>
-<dd>
-<a class="el" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288" title="Construct a heap-allocated opendal_operator_options.">opendal_operator_options_new</a> This function construct the operator </dd>
-<dd>
-<a class="el" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412" title="Free the allocated memory used by [opendal_operator_options].">opendal_operator_options_free</a> This function frees the heap memory of the operator </dd>
+<p>Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> This function construct the operator </dd>
 <dd>
-<a class="el" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02" title="Set a Key-Value pair inside opendal_operator_options.">opendal_operator_options_set</a> This function allow you to set the options </dd></dl>
+<a class="el" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855" title="Free the heap-allocated operator pointed by opendal_operator.">opendal_operator_free</a> This function frees the heap memory of the operator</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> actually owns a pointer to a opendal::BlockingOperator, which is inside the Rust core code.</dd></dl>
+<dl class="section remark"><dt>Remarks</dt><dd>You may use the field <code>ptr</code> to check whether this is a NULL operator. </dd></dl>
 
 </div>
 </div>
-<a id="aae5d70fff7f6c87e07b8aa97e08e7191"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae5d70fff7f6c87e07b8aa97e08e7191">&#9670;&nbsp;</a></span>opendal_operator_ptr</h2>
+<a id="a76d4f0935961d0e49befd7719728fd16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76d4f0935961d0e49befd7719728fd16">&#9670;&nbsp;</a></span>opendal_operator_options</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL. </p>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> This function construct the operator </dd>
+<p>The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>. </p>
+<dl class="section note"><dt>Note</dt><dd>This is also a heap-allocated struct, please free it after you use it</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> has an example of using <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a> </dd>
 <dd>
-<a class="el" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def" title="Free the heap-allocated operator pointed by opendal_operator_ptr.">opendal_operator_free</a> This function frees the heap memory of the operator</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> actually owns a pointer to a opendal::BlockingOperator, which is inside the Rust core code.</dd></dl>
-<dl class="section remark"><dt>Remarks</dt><dd>You may use the field <code>ptr</code> to check whether this is a NULL operator. </dd></dl>
+<a class="el" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288" title="Construct a heap-allocated opendal_operator_options.">opendal_operator_options_new</a> This function construct the operator </dd>
+<dd>
+<a class="el" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412" title="Free the allocated memory used by [opendal_operator_options].">opendal_operator_options_free</a> This function frees the heap memory of the operator </dd>
+<dd>
+<a class="el" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02" title="Set a Key-Value pair inside opendal_operator_options.">opendal_operator_options_set</a> This function allow you to set the options </dd></dl>
 
 </div>
 </div>
@@ -532,6 +544,9 @@ Notes</h1>
       </table>
 </div><div class="memdoc">
 
+<p>The result type returned by opendal's reader operation. </p>
+<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__reader.html" title="The result type returned by opendal&#39;s reader operation.">opendal_reader</a> actually owns a pointer to a opendal::BlockingReader, which is inside the Rust core code. </dd></dl>
+
 </div>
 </div>
 <a id="afbd6b36f0b084ca5fa251ebd5e317abf"></a>
@@ -546,9 +561,9 @@ Notes</h1>
       </table>
 </div><div class="memdoc">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>, the field <code>is_exist</code> contains whether the path exists, and the field <code>error</code> contains the corresponding error. If successful, the <code>error</code> field is null.</p>
-<dl class="section note"><dt>Note</dt><dd>If the <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a> fails, the <code>is_exist</code> field will be set to false. </dd></dl>
+<p>The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>, the field <code>is_exist</code> contains whether the path exists, and the field <code>error</code> contains the corresponding error. If successful, the <code>error</code> field is null.</p>
+<dl class="section note"><dt>Note</dt><dd>If the <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a> fails, the <code>is_exist</code> field will be set to false. </dd></dl>
 
 </div>
 </div>
@@ -564,8 +579,25 @@ Notes</h1>
       </table>
 </div><div class="memdoc">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>, the field <code>lister</code> contains the lister of the path, which is an iterator of the objects under the path. the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+<p>The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>, the field <code>lister</code> contains the lister of the path, which is an iterator of the objects under the path. the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+
+</div>
+</div>
+<a id="a590096ddcd0245b474880bae76c2137d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a590096ddcd0245b474880bae76c2137d">&#9670;&nbsp;</a></span>opendal_result_lister_next</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a> <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list result of the list operation, the error field is the error code and error message. If the operation succeeds, the error should be NULL. </p>
+<dl class="section note"><dt>Note</dt><dd>Please notice if the lister reaches the end, both the list_entry and error will be NULL. </dd></dl>
 
 </div>
 </div>
@@ -582,45 +614,45 @@ Notes</h1>
 </div><div class="memdoc">
 
 <p>The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation. </p>
-<p>If the init logic is successful, the <code>operator_ptr</code> field will be set to a valid pointer, and the <code>error</code> field will be set to null. If the init logic fails, the <code>operator_ptr</code> field will be set to null, and the <code>error</code> field will be set to a valid pointer with error code and error message.</p>
+<p>If the init logic is successful, the <code>op</code> field will be set to a valid pointer, and the <code>error</code> field will be set to null. If the init logic fails, the <code>op</code> field will be set to null, and the <code>error</code> field will be set to a valid pointer with error code and error message.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> </dd>
 <dd>
-<a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
 <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
 
 </div>
 </div>
-<a id="a68a7b0ae2b453dd9ba31ba0d572a4d5d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a68a7b0ae2b453dd9ba31ba0d572a4d5d">&#9670;&nbsp;</a></span>opendal_result_read</h2>
+<a id="ae16e33ed9b7d8a3791f38a4fd5d877c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae16e33ed9b7d8a3791f38a4fd5d877c8">&#9670;&nbsp;</a></span>opendal_result_operator_reader</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a> <a class="el" href="structopendal__result__read.html">opendal_result_read</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a> <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>The result type returned by opendal's read operation. </p>
-<p>The result type of read operation in opendal C binding, it contains the data that the read operation returns and an NULL error. If the read operation failed, the <code>data</code> fields should be a nullptr and the error is not NULL. </p>
+<p>The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>, the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> repres [...]
 
 </div>
 </div>
-<a id="a7712a472329fe04955dd86a213c78b37"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7712a472329fe04955dd86a213c78b37">&#9670;&nbsp;</a></span>opendal_result_reader</h2>
+<a id="a68a7b0ae2b453dd9ba31ba0d572a4d5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68a7b0ae2b453dd9ba31ba0d572a4d5d">&#9670;&nbsp;</a></span>opendal_result_read</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">typedef struct <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a> <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a></td>
+          <td class="memname">typedef struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a> <a class="el" href="structopendal__result__read.html">opendal_result_read</a></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> represents whether the stat operation is successful. </p>
+<p>The result type returned by opendal's read operation. </p>
+<p>The result type of read operation in opendal C binding, it contains the data that the read operation returns and an NULL error. If the read operation failed, the <code>data</code> fields should be a nullptr and the error is not NULL. </p>
 
 </div>
 </div>
@@ -636,6 +668,8 @@ Notes</h1>
       </table>
 </div><div class="memdoc">
 
+<p>The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size field, which is the size of the data read, which is zero on error. The error field is the error code and error message. </p>
+
 </div>
 </div>
 <a id="a07f3f83aa0b650a09986291e47a8ddb0"></a>
@@ -650,8 +684,8 @@ Notes</h1>
       </table>
 </div><div class="memdoc">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>, the field <code>meta</code> contains the metadata of the path, the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+<p>The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>, the field <code>meta</code> contains the metadata of the path, the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
 
 </div>
 </div>
@@ -696,8 +730,8 @@ Notes</h1>
 </div>
 </div>
 <h2 class="groupheader">Function Documentation</h2>
-<a id="aea5253c2bbe9438349eebb68a18a82ea"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aea5253c2bbe9438349eebb68a18a82ea">&#9670;&nbsp;</a></span>opendal_bytes_free()</h2>
+<a id="adba027eb1460c828ff32e87f0ceb338a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adba027eb1460c828ff32e87f0ceb338a">&#9670;&nbsp;</a></span>opendal_bytes_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -706,7 +740,7 @@ Notes</h1>
           <td class="memname">void opendal_bytes_free </td>
           <td>(</td>
           <td class="paramtype">struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em></td><td>)</td>
+          <td class="paramname"><em>bs</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
@@ -716,92 +750,92 @@ Notes</h1>
 
 </div>
 </div>
-<a id="a4a8d92df21f5473762677afd9af5f714"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4a8d92df21f5473762677afd9af5f714">&#9670;&nbsp;</a></span>opendal_error_free()</h2>
+<a id="af9238bb47d83d4b8d98981122f3824bf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9238bb47d83d4b8d98981122f3824bf">&#9670;&nbsp;</a></span>opendal_entry_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void opendal_error_free </td>
+          <td class="memname">void opendal_entry_free </td>
           <td>(</td>
-          <td class="paramtype">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td>
+          <td class="paramtype">struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *&#160;</td>
           <td class="paramname"><em>ptr</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Frees the <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>, ok to call on NULL. </p>
+<p>Frees the heap memory used by the opendal_list_entry. </p>
 
 </div>
 </div>
-<a id="afa415362bf713d7c7869225a7f50f4a5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afa415362bf713d7c7869225a7f50f4a5">&#9670;&nbsp;</a></span>opendal_list_entry_free()</h2>
+<a id="aaa2109178eeaabde28bf8ba7e3110ed5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa2109178eeaabde28bf8ba7e3110ed5">&#9670;&nbsp;</a></span>opendal_entry_name()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void opendal_list_entry_free </td>
+          <td class="memname">char* opendal_entry_name </td>
           <td>(</td>
-          <td class="paramtype">struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em></td><td>)</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *&#160;</td>
+          <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Frees the heap memory used by the <a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a>. </p>
+<p>Name of entry. </p>
+<p>Name is the last segment of path. If this entry is a dir, <code>Name</code> MUST endswith <code>/</code> Otherwise, <code>Name</code> MUST NOT endswith <code>/</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>To free the string, you can directly call free() </dd></dl>
 
 </div>
 </div>
-<a id="ac9b6091ec4c8aa0333727b34de3fa845"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac9b6091ec4c8aa0333727b34de3fa845">&#9670;&nbsp;</a></span>opendal_list_entry_name()</h2>
+<a id="ae712985c1de6bc0bb35c85b3cadefab9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae712985c1de6bc0bb35c85b3cadefab9">&#9670;&nbsp;</a></span>opendal_entry_path()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">char* opendal_list_entry_name </td>
+          <td class="memname">char* opendal_entry_path </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *&#160;</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *&#160;</td>
           <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Name of entry. </p>
-<p>Name is the last segment of path. If this entry is a dir, <code>Name</code> MUST endswith <code>/</code> Otherwise, <code>Name</code> MUST NOT endswith <code>/</code>.</p>
+<p>Path of entry. </p>
+<p>Path is relative to operator's root. Only valid in current operator.</p>
 <dl class="section note"><dt>Note</dt><dd>To free the string, you can directly call free() </dd></dl>
 
 </div>
 </div>
-<a id="a3a9984872f04ae478af91a15e1af0af0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3a9984872f04ae478af91a15e1af0af0">&#9670;&nbsp;</a></span>opendal_list_entry_path()</h2>
+<a id="a4a8d92df21f5473762677afd9af5f714"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a8d92df21f5473762677afd9af5f714">&#9670;&nbsp;</a></span>opendal_error_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">char* opendal_list_entry_path </td>
+          <td class="memname">void opendal_error_free </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a> *&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
+          <td class="paramtype">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td>
+          <td class="paramname"><em>ptr</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Path of entry. </p>
-<p>Path is relative to operator's root. Only valid in current operator.</p>
-<dl class="section note"><dt>Note</dt><dd>To free the string, you can directly call free() </dd></dl>
+<p>Frees the <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>, ok to call on NULL. </p>
 
 </div>
 </div>
-<a id="a25e2bd426163636455d6ba2e82547db7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a25e2bd426163636455d6ba2e82547db7">&#9670;&nbsp;</a></span>opendal_lister_free()</h2>
+<a id="aee248f8b3afbb982fd0ad0baaa1159e3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee248f8b3afbb982fd0ad0baaa1159e3">&#9670;&nbsp;</a></span>opendal_lister_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -809,27 +843,27 @@ Notes</h1>
         <tr>
           <td class="memname">void opendal_lister_free </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *&#160;</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__lister.html">opendal_lister</a> *&#160;</td>
           <td class="paramname"><em>p</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Free the heap-allocated metadata used by <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a>. </p>
+<p>Free the heap-allocated metadata used by <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>. </p>
 
 </div>
 </div>
-<a id="a191fdabb43a5173bcb00fbb3f615070c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a191fdabb43a5173bcb00fbb3f615070c">&#9670;&nbsp;</a></span>opendal_lister_next()</h2>
+<a id="a8429a4433316d9bf70cfffbbcb844a3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8429a4433316d9bf70cfffbbcb844a3d">&#9670;&nbsp;</a></span>opendal_lister_next()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a>* opendal_lister_next </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a> opendal_lister_next </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *&#160;</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__lister.html">opendal_lister</a> *&#160;</td>
           <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
@@ -838,7 +872,7 @@ Notes</h1>
 
 <p>Return the next object to be listed. </p>
 <p>Lister is an iterator of the objects under its path, this method is the same as calling next() on the iterator</p>
-<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </dd></dl>
+<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </dd></dl>
 
 </div>
 </div>
@@ -859,20 +893,20 @@ Notes</h1>
 </div><div class="memdoc">
 
 <p>Return the content_length of the metadata. </p>
-<h1><a class="anchor" id="autotoc_md29"></a>
+<h1><a class="anchor" id="autotoc_md5"></a>
 Example</h1>
 <div class="fragment"><div class="line"><span class="comment">// ... previously you wrote &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
 <div class="line">assert(s.<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a> == NULL);</div>
 <div class="line"> </div>
 <div class="line"><a class="code" href="structopendal__metadata.html">opendal_metadata</a> *meta = s.<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
 <div class="line">assert(<a class="code" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal_metadata_content_length</a>(meta) == 13);</div>
+<div class="ttc" id="aopendal_8h_html_a8d6a3d830761b215c3d03960b6153582"><div class="ttname"><a href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a></div><div class="ttdeci">struct opendal_result_stat opendal_operator_stat(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Stat the path, return its metadata.</div></div>
 <div class="ttc" id="aopendal_8h_html_ac8e9a9da0f04cb80848e7e42c3b90235"><div class="ttname"><a href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal_metadata_content_length</a></div><div class="ttdeci">uint64_t opendal_metadata_content_length(const struct opendal_metadata *self)</div><div class="ttdoc">Return the content_length of the metadata.</div></div>
-<div class="ttc" id="aopendal_8h_html_aefa1285911f7cf00837e69ba29d2efd3"><div class="ttname"><a href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a></div><div class="ttdeci">struct opendal_result_stat opendal_operator_stat(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Stat the path, return its metadata.</div></div>
-<div class="ttc" id="astructopendal__metadata_html"><div class="ttname"><a href="structopendal__metadata.html">opendal_metadata</a></div><div class="ttdoc">Carries all metadata associated with a path.</div><div class="ttdef"><b>Definition:</b> opendal.h:376</div></div>
-<div class="ttc" id="astructopendal__result__stat_html"><div class="ttname"><a href="structopendal__result__stat.html">opendal_result_stat</a></div><div class="ttdoc">The result type returned by opendal_operator_stat().</div><div class="ttdef"><b>Definition:</b> opendal.h:391</div></div>
-<div class="ttc" id="astructopendal__result__stat_html_a1d4d484d7bf50bc8e5d65dea5f6f2425"><div class="ttname"><a href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat::meta</a></div><div class="ttdeci">struct opendal_metadata * meta</div><div class="ttdef"><b>Definition:</b> opendal.h:395</div></div>
-<div class="ttc" id="astructopendal__result__stat_html_a657eee3bfdf805036f169d94ee70dce9"><div class="ttname"><a href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:399</div></div>
+<div class="ttc" id="astructopendal__metadata_html"><div class="ttname"><a href="structopendal__metadata.html">opendal_metadata</a></div><div class="ttdoc">Carries all metadata associated with a path.</div><div class="ttdef"><b>Definition:</b> opendal.h:308</div></div>
+<div class="ttc" id="astructopendal__result__stat_html"><div class="ttname"><a href="structopendal__result__stat.html">opendal_result_stat</a></div><div class="ttdoc">The result type returned by opendal_operator_stat().</div><div class="ttdef"><b>Definition:</b> opendal.h:452</div></div>
+<div class="ttc" id="astructopendal__result__stat_html_a1d4d484d7bf50bc8e5d65dea5f6f2425"><div class="ttname"><a href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat::meta</a></div><div class="ttdeci">struct opendal_metadata * meta</div><div class="ttdef"><b>Definition:</b> opendal.h:456</div></div>
+<div class="ttc" id="astructopendal__result__stat_html_a657eee3bfdf805036f169d94ee70dce9"><div class="ttname"><a href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:460</div></div>
 </div><!-- fragment --> 
 </div>
 </div>
@@ -913,10 +947,10 @@ Example</h1>
 </div><div class="memdoc">
 
 <p>Return whether the path represents a directory. </p>
-<h1><a class="anchor" id="autotoc_md31"></a>
+<h1><a class="anchor" id="autotoc_md7"></a>
 Example</h1>
 <div class="fragment"><div class="line"><span class="comment">// ... previously you wrote &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
 <div class="line">assert(s.<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a> == NULL);</div>
 <div class="line"> </div>
 <div class="line"><a class="code" href="structopendal__metadata.html">opendal_metadata</a> *meta = s.<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
@@ -945,10 +979,10 @@ Example</h1>
 </div><div class="memdoc">
 
 <p>Return whether the path represents a file. </p>
-<h1><a class="anchor" id="autotoc_md30"></a>
+<h1><a class="anchor" id="autotoc_md6"></a>
 Example</h1>
 <div class="fragment"><div class="line"><span class="comment">// ... previously you wrote &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
 <div class="line">assert(s.<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a> == NULL);</div>
 <div class="line"> </div>
 <div class="line"><a class="code" href="structopendal__metadata.html">opendal_metadata</a> *meta = s.<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
@@ -957,17 +991,17 @@ Example</h1>
 </div><!-- fragment --> 
 </div>
 </div>
-<a id="a2ceeec46dfb498f1b6c9f1138d820977"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2ceeec46dfb498f1b6c9f1138d820977">&#9670;&nbsp;</a></span>opendal_operator_blocking_delete()</h2>
+<a id="ad21a0a160ee32cfa90e2e0ca1e1da0dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad21a0a160ee32cfa90e2e0ca1e1da0dc">&#9670;&nbsp;</a></span>opendal_operator_delete()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_operator_blocking_delete </td>
+          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_operator_delete </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -987,42 +1021,42 @@ Example</h1>
 <p>Delete the object in <code>path</code> blockingly by <code>op_ptr</code>. Error is NULL if successful, otherwise it contains the error code and error message.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
     <tr><td class="paramname">path</td><td>The designated path you want to delete </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
 <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
 <dl class="section return"><dt>Returns</dt><dd>NULL if succeeds, otherwise it contains the error code and error message.</dd></dl>
-<h1><a class="anchor" id="autotoc_md16"></a>
+<h1><a class="anchor" id="autotoc_md20"></a>
 Example</h1>
-<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">//...prepare your opendal_operator_ptr, named ptr for example</span></div>
+<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">//...prepare your opendal_operator, named ptr for example</span></div>
 <div class="line"> </div>
 <div class="line"><span class="comment">// prepare your data</span></div>
 <div class="line"><span class="keywordtype">char</span>* data = <span class="stringliteral">&quot;Hello, World!&quot;</span>;</div>
 <div class="line"><a class="code" href="structopendal__bytes.html">opendal_bytes</a> bytes = <a class="code" href="structopendal__bytes.html">opendal_bytes</a> { .<a class="code" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">data</a> = (uint8_t*)data, .len = 13 };</div>
-<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>, bytes);</div>
+<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>, bytes);</div>
 <div class="line"> </div>
 <div class="line">assert(error == NULL);</div>
 <div class="line"> </div>
 <div class="line"><span class="comment">// now you can delete!</span></div>
-<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal_operator_blocking_delete</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *error = <a class="code" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal_operator_delete</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
 <div class="line"> </div>
 <div class="line"><span class="comment">// Assert that this succeeds</span></div>
 <div class="line">assert(error == NULL);</div>
-<div class="ttc" id="aopendal_8h_html_a2ceeec46dfb498f1b6c9f1138d820977"><div class="ttname"><a href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal_operator_blocking_delete</a></div><div class="ttdeci">struct opendal_error * opendal_operator_blocking_delete(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly delete the object in path.</div></div>
-<div class="ttc" id="aopendal_8h_html_a39c13941f26a7a1bbb0b52cbb7af61b9"><div class="ttname"><a href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_blocking_write(const struct opendal_operator_ptr *ptr, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
-<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:240</div></div>
-<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:244</div></div>
-<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:270</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md17"></a>
+<div class="ttc" id="aopendal_8h_html_ad21a0a160ee32cfa90e2e0ca1e1da0dc"><div class="ttname"><a href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal_operator_delete</a></div><div class="ttdeci">struct opendal_error * opendal_operator_delete(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly delete the object in path.</div></div>
+<div class="ttc" id="aopendal_8h_html_af8b6596a53263101e93b4d73e9eb928c"><div class="ttname"><a href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_write(const struct opendal_operator *op, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
+<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:219</div></div>
+<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
+<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:249</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md21"></a>
 Safety</h1>
 <p>It is <b>safe</b> under the cases below</p><ul>
 <li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
 </ul>
-<h1><a class="anchor" id="autotoc_md18"></a>
+<h1><a class="anchor" id="autotoc_md22"></a>
 Panic</h1>
 <ul>
 <li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
@@ -1030,99 +1064,48 @@ Panic</h1>
 
 </div>
 </div>
-<a id="a844f3a690078c34af557ae83e1f1513f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a844f3a690078c34af557ae83e1f1513f">&#9670;&nbsp;</a></span>opendal_operator_blocking_list()</h2>
+<a id="a04d551eea4b6248d96c9ce9278d27855"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04d551eea4b6248d96c9ce9278d27855">&#9670;&nbsp;</a></span>opendal_operator_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__list.html">opendal_result_list</a> opendal_operator_blocking_list </td>
+          <td class="memname">void opendal_operator_free </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>path</em>&#160;</td>
-        </tr>
-        <tr>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em></td><td>)</td>
           <td></td>
-          <td>)</td>
-          <td></td><td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Blockingly list the objects in <code>path</code>. </p>
-<p>List the object in <code>path</code> blockingly by <code>op_ptr</code>, return a result with a <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a>. Users should call <a class="el" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c" title="Return the next object to be listed.">opendal_lister_next()</a> on the lister.</p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The designated path you want to delete </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__list.html" title="The result type returned by opendal_operator_blocking_list().">opendal_result_list</a>, containing a lister and an <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>. If the operation succeeds, the <code>lister</code> field would holds a valid lister and the [...]
-<h1><a class="anchor" id="autotoc_md25"></a>
+<p>Free the heap-allocated operator pointed by <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>. </p>
+<p>Please only use this for a pointer pointing at a valid <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>. Calling this function on NULL does nothing, but calling this function on pointers of other type will lead to segfault.</p>
+<h1><a class="anchor" id="autotoc_md8"></a>
 Example</h1>
-<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// You have written some data into some files path &quot;root/dir1&quot;</span></div>
-<div class="line"><span class="comment">// Your opendal_operator_ptr was called ptr</span></div>
-<div class="line"><a class="code" href="structopendal__result__list.html">opendal_result_list</a> l = <a class="code" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal_operator_blocking_list</a>(ptr, <span class="stringliteral">&quot;root/dir1&quot;</span>);</div>
-<div class="line">assert(l.<a class="code" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a> == ERROR);</div>
-<div class="line"> </div>
-<div class="line"><a class="code" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *lister = l.<a class="code" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">lister</a>;</div>
-<div class="line"><a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> *entry;</div>
-<div class="line"> </div>
-<div class="line"><span class="keywordflow">while</span> ((entry = <a class="code" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal_lister_next</a>(lister)) != NULL) {</div>
-<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span>* de_path = <a class="code" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal_list_entry_path</a>(entry);</div>
-<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span>* de_name = <a class="code" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal_list_entry_name</a>(entry);</div>
-<div class="line">    <span class="comment">// ...... your operations</span></div>
-<div class="line"> </div>
-<div class="line">    <span class="comment">// remember to free the entry after you are done using it</span></div>
-<div class="line">    <a class="code" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal_list_entry_free</a>(entry);</div>
-<div class="line">}</div>
+<div class="fragment"><div class="line"><a class="code" href="structopendal__operator.html">opendal_operator</a> *ptr = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;fs&quot;</span>, NULL);</div>
+<div class="line"><span class="comment">// ... use this ptr, maybe some reads and writes</span></div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// and remember to free the lister</span></div>
-<div class="line"><a class="code" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal_lister_free</a>(lister);</div>
-<div class="ttc" id="aopendal_8h_html_a191fdabb43a5173bcb00fbb3f615070c"><div class="ttname"><a href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal_lister_next</a></div><div class="ttdeci">struct opendal_list_entry * opendal_lister_next(const struct opendal_blocking_lister *self)</div><div class="ttdoc">Return the next object to be listed.</div></div>
-<div class="ttc" id="aopendal_8h_html_a25e2bd426163636455d6ba2e82547db7"><div class="ttname"><a href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal_lister_free</a></div><div class="ttdeci">void opendal_lister_free(const struct opendal_blocking_lister *p)</div><div class="ttdoc">Free the heap-allocated metadata used by opendal_blocking_lister.</div></div>
-<div class="ttc" id="aopendal_8h_html_a3a9984872f04ae478af91a15e1af0af0"><div class="ttname"><a href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal_list_entry_path</a></div><div class="ttdeci">char * opendal_list_entry_path(const struct opendal_list_entry *self)</div><div class="ttdoc">Path of entry.</div></div>
-<div class="ttc" id="aopendal_8h_html_a844f3a690078c34af557ae83e1f1513f"><div class="ttname"><a href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal_operator_blocking_list</a></div><div class="ttdeci">struct opendal_result_list opendal_operator_blocking_list(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly list the objects in path.</div></div>
-<div class="ttc" id="aopendal_8h_html_ac9b6091ec4c8aa0333727b34de3fa845"><div class="ttname"><a href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal_list_entry_name</a></div><div class="ttdeci">char * opendal_list_entry_name(const struct opendal_list_entry *self)</div><div class="ttdoc">Name of entry.</div></div>
-<div class="ttc" id="aopendal_8h_html_afa415362bf713d7c7869225a7f50f4a5"><div class="ttname"><a href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal_list_entry_free</a></div><div class="ttdeci">void opendal_list_entry_free(struct opendal_list_entry *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_list_entry.</div></div>
-<div class="ttc" id="astructopendal__blocking__lister_html"><div class="ttname"><a href="structopendal__blocking__lister.html">opendal_blocking_lister</a></div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div><div class="ttdef"><b>Definition:</b> opendal.h:411</div></div>
-<div class="ttc" id="astructopendal__list__entry_html"><div class="ttname"><a href="structopendal__list__entry.html">opendal_list_entry</a></div><div class="ttdoc">opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister</div><div class="ttdef"><b>Definition:</b> opendal.h:441</div></div>
-<div class="ttc" id="astructopendal__result__list_html"><div class="ttname"><a href="structopendal__result__list.html">opendal_result_list</a></div><div class="ttdoc">The result type returned by opendal_operator_blocking_list().</div><div class="ttdef"><b>Definition:</b> opendal.h:422</div></div>
-<div class="ttc" id="astructopendal__result__list_html_a1388cb447f532ecd19ff9a13e09daced"><div class="ttname"><a href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">opendal_result_list::lister</a></div><div class="ttdeci">struct opendal_blocking_lister * lister</div><div class="ttdef"><b>Definition:</b> opendal.h:426</div></div>
-<div class="ttc" id="astructopendal__result__list_html_a874bfb5c9d016445698fb59d65b76ed2"><div class="ttname"><a href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:430</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md26"></a>
-Safety</h1>
-<p>It is <b>safe</b> under the cases below</p><ul>
-<li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
-</ul>
-<h1><a class="anchor" id="autotoc_md27"></a>
-Panic</h1>
-<ul>
-<li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
-</ul>
-
+<div class="line"><span class="comment">// free this operator</span></div>
+<div class="line"><a class="code" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a>(ptr);</div>
+<div class="ttc" id="aopendal_8h_html_a04d551eea4b6248d96c9ce9278d27855"><div class="ttname"><a href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator.</div></div>
+<div class="ttc" id="aopendal_8h_html_a3b32f655689a122d2b6feff169fac442"><div class="ttname"><a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a></div><div class="ttdeci">struct opendal_result_operator_new opendal_operator_new(const char *scheme, const struct opendal_operator_options *options)</div><div class="ttdoc">Construct an operator based on scheme and options</div></div>
+<div class="ttc" id="astructopendal__operator_html"><div class="ttname"><a href="structopendal__operator.html">opendal_operator</a></div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div><div class="ttdef"><b>Definition:</b> opendal.h:329</div></div>
+</div><!-- fragment --> 
 </div>
 </div>
-<a id="ae8fc63885af34e53afbb075dfed39732"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae8fc63885af34e53afbb075dfed39732">&#9670;&nbsp;</a></span>opendal_operator_blocking_read()</h2>
+<a id="acc6c32aa41963ac67e612dc47f7edb46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc6c32aa41963ac67e612dc47f7edb46">&#9670;&nbsp;</a></span>opendal_operator_is_exist()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a> opendal_operator_blocking_read </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> opendal_operator_is_exist </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -1138,42 +1121,42 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Blockingly read the data from <code>path</code>. </p>
-<p>Read the data out from <code>path</code> blockingly by operator.</p>
+<p>Check whether the path exists. </p>
+<p>If the operation succeeds, no matter the path exists or not, the error should be a nullptr. Otherwise, the field <code>is_exist</code> is filled with false, and the error is set</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The path you want to read the data out </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The path you want to check existence </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
-<a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> </dd>
+<a class="el" href="structopendal__result__is__exist.html" title="The result type returned by opendal_operator_is_exist().">opendal_result_is_exist</a> </dd>
 <dd>
 <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a>, the <code>data</code> field is a pointer to a newly allocated <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a>, the <code>error</code> field contains the error. If the <code>error</code> is not NULL, then the operation f [...]
-<dl class="section note"><dt>Note</dt><dd>If the read operation succeeds, the returned <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> is newly allocated on heap. After your usage of that, please call <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the space.</dd></dl>
-<h1><a class="anchor" id="autotoc_md10"></a>
+<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__is__exist.html" title="The result type returned by opendal_operator_is_exist().">opendal_result_is_exist</a>, the <code>is_exist</code> field contains whether the path exists. However, it the operation fails, the <code>is_exist</code> will contains false and the error will be set.</dd></dl>
+<h1><a class="anchor" id="autotoc_md23"></a>
 Example</h1>
-<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// ... you have write &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
-<div class="line"> </div>
-<div class="line"><a class="code" href="structopendal__result__read.html">opendal_result_read</a> r = <a class="code" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a>(ptr, <span class="stringliteral">&quot;testpath&quot;</span>);</div>
-<div class="line">assert(r.<a class="code" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">error</a> == NULL);</div>
+<div class="fragment"><div class="line"><span class="comment">// .. you previously wrote some data to path &quot;/mytest/obj&quot;</span></div>
+<div class="line"><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> e = <a class="code" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a>(ptr, <span class="stringliteral">&quot;/mytest/obj&quot;</span>);</div>
+<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a> == NULL);</div>
+<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>);</div>
 <div class="line"> </div>
-<div class="line"><a class="code" href="structopendal__bytes.html">opendal_bytes</a> *bytes = r.<a class="code" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">data</a>;</div>
-<div class="line">assert(bytes-&gt;<a class="code" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">len</a> == 13);</div>
-<div class="ttc" id="aopendal_8h_html_ae8fc63885af34e53afbb075dfed39732"><div class="ttname"><a href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_blocking_read(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
-<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:248</div></div>
-<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:318</div></div>
-<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:326</div></div>
-<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:322</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md11"></a>
+<div class="line"><span class="comment">// but you previously did **not** write any data to path &quot;/yourtest/obj&quot;</span></div>
+<div class="line"><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> e = <a class="code" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a>(ptr, <span class="stringliteral">&quot;/yourtest/obj&quot;</span>);</div>
+<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a> == NULL);</div>
+<div class="line">assert(!e.<a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>);</div>
+<div class="ttc" id="aopendal_8h_html_acc6c32aa41963ac67e612dc47f7edb46"><div class="ttname"><a href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a></div><div class="ttdeci">struct opendal_result_is_exist opendal_operator_is_exist(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Check whether the path exists.</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html"><div class="ttname"><a href="structopendal__result__is__exist.html">opendal_result_is_exist</a></div><div class="ttdoc">The result type returned by opendal_operator_is_exist().</div><div class="ttdef"><b>Definition:</b> opendal.h:434</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html_a6dc61502ab68ba25bcd56b09a215de6c"><div class="ttname"><a href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:442</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html_abe145d68333ea78b438ef92a12d9d295"><div class="ttname"><a href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">opendal_result_is_exist::is_exist</a></div><div class="ttdeci">bool is_exist</div><div class="ttdef"><b>Definition:</b> opendal.h:438</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md24"></a>
 Safety</h1>
 <p>It is <b>safe</b> under the cases below</p><ul>
 <li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
 </ul>
-<h1><a class="anchor" id="autotoc_md12"></a>
+<h1><a class="anchor" id="autotoc_md25"></a>
 Panic</h1>
 <ul>
 <li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
@@ -1181,17 +1164,17 @@ Panic</h1>
 
 </div>
 </div>
-<a id="a6285d4da17f5f873bc7a8edd7301fb81"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6285d4da17f5f873bc7a8edd7301fb81">&#9670;&nbsp;</a></span>opendal_operator_blocking_reader()</h2>
+<a id="af8f2888ef406d9fc81af0015a904af9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8f2888ef406d9fc81af0015a904af9c">&#9670;&nbsp;</a></span>opendal_operator_list()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a> opendal_operator_blocking_reader </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__list.html">opendal_result_list</a> opendal_operator_list </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -1207,40 +1190,51 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Blockingly read the data from <code>path</code>. </p>
-<p>Read the data out from <code>path</code> blockingly by operator, returns an <a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> with error code.</p>
+<p>Blockingly list the objects in <code>path</code>. </p>
+<p>List the object in <code>path</code> blockingly by <code>op_ptr</code>, return a result with a <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>. Users should call <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a> on the lister.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The path you want to read the data out </td></tr>
-    <tr><td class="paramname">buffer</td><td>The buffer you want to read the data into </td></tr>
-    <tr><td class="paramname">buffer_len</td><td>The length of the buffer </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The designated path you want to delete </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
-<dd>
-<a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> </dd>
-<dd>
-<a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2" title="The error code for all opendal APIs in C binding.">opendal_code</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns opendal_code</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>If the read operation succeeds, the returned <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> is newly allocated on heap. After your usage of that, please call <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the space.</dd></dl>
-<h1><a class="anchor" id="autotoc_md13"></a>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__list.html" title="The result type returned by opendal_operator_list().">opendal_result_list</a>, containing a lister and an <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>. If the operation succeeds, the <code>lister</code> field would holds a valid lister and the <code>er [...]
+<h1><a class="anchor" id="autotoc_md29"></a>
 Example</h1>
-<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// ... you have write &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
+<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// You have written some data into some files path &quot;root/dir1&quot;</span></div>
+<div class="line"><span class="comment">// Your opendal_operator was called ptr</span></div>
+<div class="line"><a class="code" href="structopendal__result__list.html">opendal_result_list</a> l = <a class="code" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal_operator_list</a>(ptr, <span class="stringliteral">&quot;root/dir1&quot;</span>);</div>
+<div class="line">assert(l.<a class="code" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a> == ERROR);</div>
+<div class="line"> </div>
+<div class="line"><a class="code" href="structopendal__lister.html">opendal_lister</a> *lister = l.<a class="code" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">lister</a>;</div>
+<div class="line">opendal_list_entry *entry;</div>
+<div class="line"> </div>
+<div class="line"><span class="keywordflow">while</span> ((entry = <a class="code" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal_lister_next</a>(lister)) != NULL) {</div>
+<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span>* de_path = opendal_list_entry_path(entry);</div>
+<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span>* de_name = opendal_list_entry_name(entry);</div>
+<div class="line">    <span class="comment">// ...... your operations</span></div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">// remember to free the entry after you are done using it</span></div>
+<div class="line">    opendal_list_entry_free(entry);</div>
+<div class="line">}</div>
 <div class="line"> </div>
-<div class="line"><span class="keywordtype">int</span> length = 13;</div>
-<div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> buffer[length];</div>
-<div class="line"><a class="code" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a> r = opendal_operator_blocking_read_with_buffer(ptr, <span class="stringliteral">&quot;testpath&quot;</span>, buffer, length);</div>
-<div class="line">assert(r == OPENDAL_OK);</div>
-<div class="line"><span class="comment">// assert buffer == &quot;Hello, World!&quot;</span></div>
-<div class="ttc" id="aopendal_8h_html_a6715be152766e5b8f840ce10cf9442c2"><div class="ttname"><a href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a></div><div class="ttdeci">opendal_code</div><div class="ttdoc">The error code for all opendal APIs in C binding.</div><div class="ttdef"><b>Definition:</b> opendal.h:33</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md14"></a>
+<div class="line"><span class="comment">// and remember to free the lister</span></div>
+<div class="line"><a class="code" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal_lister_free</a>(lister);</div>
+<div class="ttc" id="aopendal_8h_html_a8429a4433316d9bf70cfffbbcb844a3d"><div class="ttname"><a href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal_lister_next</a></div><div class="ttdeci">struct opendal_result_lister_next opendal_lister_next(const struct opendal_lister *self)</div><div class="ttdoc">Return the next object to be listed.</div></div>
+<div class="ttc" id="aopendal_8h_html_aee248f8b3afbb982fd0ad0baaa1159e3"><div class="ttname"><a href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal_lister_free</a></div><div class="ttdeci">void opendal_lister_free(const struct opendal_lister *p)</div><div class="ttdoc">Free the heap-allocated metadata used by opendal_lister.</div></div>
+<div class="ttc" id="aopendal_8h_html_af8f2888ef406d9fc81af0015a904af9c"><div class="ttname"><a href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal_operator_list</a></div><div class="ttdeci">struct opendal_result_list opendal_operator_list(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly list the objects in path.</div></div>
+<div class="ttc" id="astructopendal__lister_html"><div class="ttname"><a href="structopendal__lister.html">opendal_lister</a></div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div><div class="ttdef"><b>Definition:</b> opendal.h:293</div></div>
+<div class="ttc" id="astructopendal__result__list_html"><div class="ttname"><a href="structopendal__result__list.html">opendal_result_list</a></div><div class="ttdoc">The result type returned by opendal_operator_list().</div><div class="ttdef"><b>Definition:</b> opendal.h:470</div></div>
+<div class="ttc" id="astructopendal__result__list_html_a54b9b09c29f8d867da187c32e362398a"><div class="ttname"><a href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">opendal_result_list::lister</a></div><div class="ttdeci">struct opendal_lister * lister</div><div class="ttdef"><b>Definition:</b> opendal.h:474</div></div>
+<div class="ttc" id="astructopendal__result__list_html_a874bfb5c9d016445698fb59d65b76ed2"><div class="ttname"><a href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:478</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md30"></a>
 Safety</h1>
 <p>It is <b>safe</b> under the cases below</p><ul>
 <li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
 </ul>
-<h1><a class="anchor" id="autotoc_md15"></a>
+<h1><a class="anchor" id="autotoc_md31"></a>
 Panic</h1>
 <ul>
 <li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
@@ -1248,29 +1242,23 @@ Panic</h1>
 
 </div>
 </div>
-<a id="a39c13941f26a7a1bbb0b52cbb7af61b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a39c13941f26a7a1bbb0b52cbb7af61b9">&#9670;&nbsp;</a></span>opendal_operator_blocking_write()</h2>
+<a id="a3b32f655689a122d2b6feff169fac442"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b32f655689a122d2b6feff169fac442">&#9670;&nbsp;</a></span>opendal_operator_new()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_operator_blocking_write </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> opendal_operator_new </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
           <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>path</em>, </td>
+          <td class="paramname"><em>scheme</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a>&#160;</td>
-          <td class="paramname"><em>bytes</em>&#160;</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
+          <td class="paramname"><em>options</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -1280,92 +1268,144 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Blockingly write raw bytes to <code>path</code>. </p>
-<p>Write the <code>bytes</code> into the <code>path</code> blockingly by <code>op_ptr</code>. Error is NULL if successful, otherwise it contains the error code and error message.</p>
-<dl class="section note"><dt>Note</dt><dd>It is important to notice that the <code>bytes</code> that is passes in will be consumed by this function. Therefore, you should not use the <code>bytes</code> after this function returns.</dd></dl>
+<p>Construct an operator based on <code>scheme</code> and <code>options</code> </p>
+<p>Uses an array of key-value pairs to initialize the operator based on provided <code>scheme</code> and <code>options</code>. For each scheme, i.e. Backend, different options could be set, you may reference the <a href="https://opendal.apache.org/docs/category/services/">documentation</a> for each service, especially for the <b>Configuration Part</b>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The designated path you want to write your bytes in </td></tr>
-    <tr><td class="paramname">bytes</td><td>The opendal_byte typed bytes to be written </td></tr>
+    <tr><td class="paramname">scheme</td><td>the service scheme you want to specify, e.g. "fs", "s3", "supabase" </td></tr>
+    <tr><td class="paramname">options</td><td>the pointer to the options for this operators, it could be NULL, which means no option is set </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
-<dd>
-<a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> </dd>
-<dd>
-<a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>NULL if succeeds, otherwise it contains the error code and error message.</dd></dl>
-<h1><a class="anchor" id="autotoc_md7"></a>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A valid <a class="el" href="structopendal__result__operator__new.html" title="The result type returned by opendal_operator_new() operation.">opendal_result_operator_new</a> setup with the <code>scheme</code> and <code>options</code> is the construction succeeds. On success the operator field is a valid pointer to a newly allocated <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a [...]
+<h1><a class="anchor" id="autotoc_md9"></a>
 Example</h1>
-<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">//...prepare your opendal_operator_ptr, named ptr for example</span></div>
+<p>Following is an example. </p><div class="fragment"><div class="line"><span class="comment">// Allocate a new options</span></div>
+<div class="line"><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options = <a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>();</div>
+<div class="line"><span class="comment">// Set the options you need</span></div>
+<div class="line"><a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(options, <span class="stringliteral">&quot;root&quot;</span>, <span class="stringliteral">&quot;/myroot&quot;</span>);</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// prepare your data</span></div>
-<div class="line"><span class="keywordtype">char</span>* data = <span class="stringliteral">&quot;Hello, World!&quot;</span>;</div>
-<div class="line"><a class="code" href="structopendal__bytes.html">opendal_bytes</a> bytes = <a class="code" href="structopendal__bytes.html">opendal_bytes</a> { .<a class="code" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">data</a> = (uint8_t*)data, .len = 13 };</div>
+<div class="line"><span class="comment">// Construct the operator based on the options and scheme</span></div>
+<div class="line"><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> result = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;memory&quot;</span>, options);</div>
+<div class="line"><a class="code" href="structopendal__operator.html">opendal_operator</a>* op = result.<a class="code" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">op</a>;</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// now you can write!</span></div>
-<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *err = <a class="code" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>, bytes);</div>
+<div class="line"><span class="comment">// you could free the options right away since the options is not used afterwards</span></div>
+<div class="line"><a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(options);</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// Assert that this succeeds</span></div>
-<div class="line">assert(err == NULL);</div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md8"></a>
+<div class="line"><span class="comment">// ... your operations</span></div>
+<div class="ttc" id="aopendal_8h_html_a1d65b173b087b2abca126de2e951b412"><div class="ttname"><a href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a></div><div class="ttdeci">void opendal_operator_options_free(const struct opendal_operator_options *options)</div><div class="ttdoc">Free the allocated memory used by [opendal_operator_options].</div></div>
+<div class="ttc" id="aopendal_8h_html_a67b1457f2b1258551552dc383840f288"><div class="ttname"><a href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a></div><div class="ttdeci">struct opendal_operator_options * opendal_operator_options_new(void)</div><div class="ttdoc">Construct a heap-allocated opendal_operator_options.</div></div>
+<div class="ttc" id="aopendal_8h_html_af408af922875eb26c25cef4ddfdede02"><div class="ttname"><a href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a></div><div class="ttdeci">void opendal_operator_options_set(struct opendal_operator_options *self, const char *key, const char *value)</div><div class="ttdoc">Set a Key-Value pair inside opendal_operator_options.</div></div>
+<div class="ttc" id="astructopendal__operator__options_html"><div class="ttname"><a href="structopendal__operator__options.html">opendal_operator_options</a></div><div class="ttdoc">The configuration for the initialization of opendal_operator.</div><div class="ttdef"><b>Definition:</b> opendal.h:370</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html"><div class="ttname"><a href="structopendal__result__operator__new.html">opendal_result_operator_new</a></div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:349</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html_a4e358aad13b4c71dc7a9a812191371c6"><div class="ttname"><a href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">opendal_result_operator_new::op</a></div><div class="ttdeci">struct opendal_operator * op</div><div class="ttdef"><b>Definition:</b> opendal.h:353</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md10"></a>
 Safety</h1>
-<p>It is <b>safe</b> under the cases below</p><ul>
-<li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
-<li>The <code>bytes</code> provided has valid byte in the <code>data</code> field and the <code>len</code> field is set correctly.</li>
-</ul>
-<h1><a class="anchor" id="autotoc_md9"></a>
-Panic</h1>
-<ul>
-<li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
-</ul>
+<p>The only unsafe case is passing a invalid c string pointer to the <code>scheme</code> argument. </p>
 
 </div>
 </div>
-<a id="a3e038035b4339e19f24e1aa8ef678def"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3e038035b4339e19f24e1aa8ef678def">&#9670;&nbsp;</a></span>opendal_operator_free()</h2>
+<a id="a1d65b173b087b2abca126de2e951b412"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1d65b173b087b2abca126de2e951b412">&#9670;&nbsp;</a></span>opendal_operator_options_free()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void opendal_operator_free </td>
+          <td class="memname">void opendal_operator_options_free </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>op</em></td><td>)</td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
+          <td class="paramname"><em>options</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
 </div><div class="memdoc">
 
-<p>Free the heap-allocated operator pointed by <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>. </p>
-<p>Please only use this for a pointer pointing at a valid <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>. Calling this function on NULL does nothing, but calling this function on pointers of other type will lead to segfault.</p>
-<h1><a class="anchor" id="autotoc_md28"></a>
+<p>Free the allocated memory used by [<code><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a></code>]. </p>
+
+</div>
+</div>
+<a id="a67b1457f2b1258551552dc383840f288"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67b1457f2b1258551552dc383840f288">&#9670;&nbsp;</a></span>opendal_operator_options_new()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a>* opendal_operator_options_new </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Construct a heap-allocated <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a>. </p>
+<dl class="section return"><dt>Returns</dt><dd>An empty opendal_operator_option, which could be set by opendal_operator_option_set().</dd></dl>
+<dl class="section see"><dt>See also</dt><dd>opendal_operator_option_set </dd></dl>
+
+</div>
+</div>
+<a id="af408af922875eb26c25cef4ddfdede02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af408af922875eb26c25cef4ddfdede02">&#9670;&nbsp;</a></span>opendal_operator_options_set()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void opendal_operator_options_set </td>
+          <td>(</td>
+          <td class="paramtype">struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
+          <td class="paramname"><em>self</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set a Key-Value pair inside <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a>. </p>
+<h1><a class="anchor" id="autotoc_md32"></a>
+Safety</h1>
+<p>This function is unsafe because it dereferences and casts the raw pointers Make sure the pointer of <code>key</code> and <code>value</code> point to a valid string.</p>
+<h1><a class="anchor" id="autotoc_md33"></a>
 Example</h1>
-<div class="fragment"><div class="line"><a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;fs&quot;</span>, NULL);</div>
-<div class="line"><span class="comment">// ... use this ptr, maybe some reads and writes</span></div>
+<div class="fragment"><div class="line"><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options = <a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>();</div>
+<div class="line"><a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(options, <span class="stringliteral">&quot;root&quot;</span>, <span class="stringliteral">&quot;/myroot&quot;</span>);</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// free this operator</span></div>
-<div class="line"><a class="code" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a>(ptr);</div>
-<div class="ttc" id="aopendal_8h_html_a3b32f655689a122d2b6feff169fac442"><div class="ttname"><a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a></div><div class="ttdeci">struct opendal_result_operator_new opendal_operator_new(const char *scheme, const struct opendal_operator_options *options)</div><div class="ttdoc">Construct an operator based on scheme and options</div></div>
-<div class="ttc" id="aopendal_8h_html_a3e038035b4339e19f24e1aa8ef678def"><div class="ttname"><a href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator_ptr *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator_ptr.</div></div>
-<div class="ttc" id="astructopendal__operator__ptr_html"><div class="ttname"><a href="structopendal__operator__ptr.html">opendal_operator_ptr</a></div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
+<div class="line"><span class="comment">// .. use your opendal_operator_options</span></div>
+<div class="line"> </div>
+<div class="line"><a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(options);</div>
 </div><!-- fragment --> 
 </div>
 </div>
-<a id="ae5a3bf403cdf78d5c5b1fa9f623f0d80"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae5a3bf403cdf78d5c5b1fa9f623f0d80">&#9670;&nbsp;</a></span>opendal_operator_is_exist()</h2>
+<a id="ab1419180b377316e27416b742bcc059f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1419180b377316e27416b742bcc059f">&#9670;&nbsp;</a></span>opendal_operator_read()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> opendal_operator_is_exist </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__read.html">opendal_result_read</a> opendal_operator_read </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -1381,42 +1421,42 @@ Example</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Check whether the path exists. </p>
-<p>If the operation succeeds, no matter the path exists or not, the error should be a nullptr. Otherwise, the field <code>is_exist</code> is filled with false, and the error is set</p>
+<p>Blockingly read the data from <code>path</code>. </p>
+<p>Read the data out from <code>path</code> blockingly by operator.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The path you want to check existence </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The path you want to read the data out </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
-<a class="el" href="structopendal__result__is__exist.html" title="The result type returned by opendal_operator_is_exist().">opendal_result_is_exist</a> </dd>
+<a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> </dd>
 <dd>
 <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__is__exist.html" title="The result type returned by opendal_operator_is_exist().">opendal_result_is_exist</a>, the <code>is_exist</code> field contains whether the path exists. However, it the operation fails, the <code>is_exist</code> will contains false and the error will be set.</dd></dl>
-<h1><a class="anchor" id="autotoc_md19"></a>
+<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a>, the <code>data</code> field is a pointer to a newly allocated <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a>, the <code>error</code> field contains the error. If the <code>error</code> is not NULL, then the operation f [...]
+<dl class="section note"><dt>Note</dt><dd>If the read operation succeeds, the returned <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> is newly allocated on heap. After your usage of that, please call <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the space.</dd></dl>
+<h1><a class="anchor" id="autotoc_md14"></a>
 Example</h1>
-<div class="fragment"><div class="line"><span class="comment">// .. you previously wrote some data to path &quot;/mytest/obj&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> e = <a class="code" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a>(ptr, <span class="stringliteral">&quot;/mytest/obj&quot;</span>);</div>
-<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a> == NULL);</div>
-<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>);</div>
+<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// ... you have write &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// but you previously did **not** write any data to path &quot;/yourtest/obj&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> e = <a class="code" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a>(ptr, <span class="stringliteral">&quot;/yourtest/obj&quot;</span>);</div>
-<div class="line">assert(e.<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a> == NULL);</div>
-<div class="line">assert(!e.<a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>);</div>
-<div class="ttc" id="aopendal_8h_html_ae5a3bf403cdf78d5c5b1fa9f623f0d80"><div class="ttname"><a href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a></div><div class="ttdeci">struct opendal_result_is_exist opendal_operator_is_exist(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Check whether the path exists.</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html"><div class="ttname"><a href="structopendal__result__is__exist.html">opendal_result_is_exist</a></div><div class="ttdoc">The result type returned by opendal_operator_is_exist().</div><div class="ttdef"><b>Definition:</b> opendal.h:354</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html_a6dc61502ab68ba25bcd56b09a215de6c"><div class="ttname"><a href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:362</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html_abe145d68333ea78b438ef92a12d9d295"><div class="ttname"><a href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">opendal_result_is_exist::is_exist</a></div><div class="ttdeci">bool is_exist</div><div class="ttdef"><b>Definition:</b> opendal.h:358</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md20"></a>
+<div class="line"><a class="code" href="structopendal__result__read.html">opendal_result_read</a> r = <a class="code" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a>(ptr, <span class="stringliteral">&quot;testpath&quot;</span>);</div>
+<div class="line">assert(r.<a class="code" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">error</a> == NULL);</div>
+<div class="line"> </div>
+<div class="line"><a class="code" href="structopendal__bytes.html">opendal_bytes</a> *bytes = r.<a class="code" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">data</a>;</div>
+<div class="line">assert(bytes-&gt;<a class="code" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">len</a> == 13);</div>
+<div class="ttc" id="aopendal_8h_html_ab1419180b377316e27416b742bcc059f"><div class="ttname"><a href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_read(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
+<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:227</div></div>
+<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:386</div></div>
+<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:394</div></div>
+<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:390</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md15"></a>
 Safety</h1>
 <p>It is <b>safe</b> under the cases below</p><ul>
 <li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
 </ul>
-<h1><a class="anchor" id="autotoc_md21"></a>
+<h1><a class="anchor" id="autotoc_md16"></a>
 Panic</h1>
 <ul>
 <li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
@@ -1424,23 +1464,23 @@ Panic</h1>
 
 </div>
 </div>
-<a id="a3b32f655689a122d2b6feff169fac442"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3b32f655689a122d2b6feff169fac442">&#9670;&nbsp;</a></span>opendal_operator_new()</h2>
+<a id="aca8d6d56223c55277146afe9ca226944"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aca8d6d56223c55277146afe9ca226944">&#9670;&nbsp;</a></span>opendal_operator_reader()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> opendal_operator_new </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a> opendal_operator_reader </td>
           <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>scheme</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
-          <td class="paramname"><em>options</em>&#160;</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>path</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -1450,109 +1490,67 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Construct an operator based on <code>scheme</code> and <code>options</code> </p>
-<p>Uses an array of key-value pairs to initialize the operator based on provided <code>scheme</code> and <code>options</code>. For each scheme, i.e. Backend, different options could be set, you may reference the <a href="https://opendal.apache.org/docs/category/services/">documentation</a> for each service, especially for the <b>Configuration Part</b>.</p>
+<p>Blockingly read the data from <code>path</code>. </p>
+<p>Read the data out from <code>path</code> blockingly by operator, returns an <a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> with error code.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">scheme</td><td>the service scheme you want to specify, e.g. "fs", "s3", "supabase" </td></tr>
-    <tr><td class="paramname">options</td><td>the pointer to the options for this operators, it could be NULL, which means no option is set </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The path you want to read the data out </td></tr>
+    <tr><td class="paramname">buffer</td><td>The buffer you want to read the data into </td></tr>
+    <tr><td class="paramname">buffer_len</td><td>The length of the buffer </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>A valid <a class="el" href="structopendal__result__operator__new.html" title="The result type returned by opendal_operator_new() operation.">opendal_result_operator_new</a> setup with the <code>scheme</code> and <code>options</code> is the construction succeeds. On success the operator_ptr field is a valid pointer to a newly allocated <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It rep [...]
-<h1><a class="anchor" id="autotoc_md5"></a>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
+<dd>
+<a class="el" href="structopendal__result__read.html" title="The result type returned by opendal&#39;s read operation.">opendal_result_read</a> </dd>
+<dd>
+<a class="el" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2" title="The error code for all opendal APIs in C binding.">opendal_code</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns opendal_code</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the read operation succeeds, the returned <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> is newly allocated on heap. After your usage of that, please call <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the space.</dd></dl>
+<h1><a class="anchor" id="autotoc_md17"></a>
 Example</h1>
-<p>Following is an example. </p><div class="fragment"><div class="line"><span class="comment">// Allocate a new options</span></div>
-<div class="line"><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options = <a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>();</div>
-<div class="line"><span class="comment">// Set the options you need</span></div>
-<div class="line"><a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(options, <span class="stringliteral">&quot;root&quot;</span>, <span class="stringliteral">&quot;/myroot&quot;</span>);</div>
-<div class="line"> </div>
-<div class="line"><span class="comment">// Construct the operator based on the options and scheme</span></div>
-<div class="line"><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> result = <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(<span class="stringliteral">&quot;memory&quot;</span>, options);</div>
-<div class="line"><a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a>* op = result.<a class="code" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">operator_ptr</a>;</div>
-<div class="line"> </div>
-<div class="line"><span class="comment">// you could free the options right away since the options is not used afterwards</span></div>
-<div class="line"><a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(options);</div>
+<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">// ... you have created an operator named op</span></div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// ... your operations</span></div>
-<div class="ttc" id="aopendal_8h_html_a1d65b173b087b2abca126de2e951b412"><div class="ttname"><a href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a></div><div class="ttdeci">void opendal_operator_options_free(const struct opendal_operator_options *options)</div><div class="ttdoc">Free the allocated memory used by [opendal_operator_options].</div></div>
-<div class="ttc" id="aopendal_8h_html_a67b1457f2b1258551552dc383840f288"><div class="ttname"><a href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a></div><div class="ttdeci">struct opendal_operator_options * opendal_operator_options_new(void)</div><div class="ttdoc">Construct a heap-allocated opendal_operator_options.</div></div>
-<div class="ttc" id="aopendal_8h_html_af408af922875eb26c25cef4ddfdede02"><div class="ttname"><a href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a></div><div class="ttdeci">void opendal_operator_options_set(struct opendal_operator_options *self, const char *key, const char *value)</div><div class="ttdoc">Set a Key-Value pair inside opendal_operator_options.</div></div>
-<div class="ttc" id="astructopendal__operator__options_html"><div class="ttname"><a href="structopendal__operator__options.html">opendal_operator_options</a></div><div class="ttdoc">The configuration for the initialization of opendal_operator_ptr.</div><div class="ttdef"><b>Definition:</b> opendal.h:302</div></div>
-<div class="ttc" id="astructopendal__result__operator__new_html"><div class="ttname"><a href="structopendal__result__operator__new.html">opendal_result_operator_new</a></div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:287</div></div>
-<div class="ttc" id="astructopendal__result__operator__new_html_a1998b1bb97c81253564e0a9228759891"><div class="ttname"><a href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">opendal_result_operator_new::operator_ptr</a></div><div class="ttdeci">struct opendal_operator_ptr * operator_ptr</div><div class="ttdef"><b>Definition:</b> opendal.h:288</div></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md6"></a>
+<div class="line"><a class="code" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a> result = <a class="code" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal_operator_reader</a>(op, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line">assert(result.<a class="code" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">error</a> == NULL);</div>
+<div class="line"><span class="comment">// The reader is in result.reader</span></div>
+<div class="line"><a class="code" href="structopendal__reader.html">opendal_reader</a> *reader = result.<a class="code" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">reader</a>;</div>
+<div class="ttc" id="aopendal_8h_html_aca8d6d56223c55277146afe9ca226944"><div class="ttname"><a href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal_operator_reader</a></div><div class="ttdeci">struct opendal_result_operator_reader opendal_operator_reader(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
+<div class="ttc" id="astructopendal__reader_html"><div class="ttname"><a href="structopendal__reader.html">opendal_reader</a></div><div class="ttdoc">The result type returned by opendal's reader operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:403</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html"><div class="ttname"><a href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></div><div class="ttdoc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(),...</div><div class="ttdef"><b>Definition:</b> opendal.h:413</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html_a9bd6c401ef87b4b6456423fa11079b91"><div class="ttname"><a href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">opendal_result_operator_reader::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:421</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html_a9ed8dec94126ab5b74dc63a87ca5839d"><div class="ttname"><a href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">opendal_result_operator_reader::reader</a></div><div class="ttdeci">struct opendal_reader * reader</div><div class="ttdef"><b>Definition:</b> opendal.h:417</div></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md18"></a>
 Safety</h1>
-<p>The only unsafe case is passing a invalid c string pointer to the <code>scheme</code> argument. </p>
-
-</div>
-</div>
-<a id="a1d65b173b087b2abca126de2e951b412"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d65b173b087b2abca126de2e951b412">&#9670;&nbsp;</a></span>opendal_operator_options_free()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void opendal_operator_options_free </td>
-          <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
-          <td class="paramname"><em>options</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Free the allocated memory used by [<code><a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a></code>]. </p>
-
-</div>
-</div>
-<a id="a67b1457f2b1258551552dc383840f288"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a67b1457f2b1258551552dc383840f288">&#9670;&nbsp;</a></span>opendal_operator_options_new()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a>* opendal_operator_options_new </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-
-<p>Construct a heap-allocated <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a>. </p>
-<dl class="section return"><dt>Returns</dt><dd>An empty opendal_operator_option, which could be set by opendal_operator_option_set().</dd></dl>
-<dl class="section see"><dt>See also</dt><dd>opendal_operator_option_set </dd></dl>
+<p>It is <b>safe</b> under the cases below</p><ul>
+<li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
+</ul>
+<h1><a class="anchor" id="autotoc_md19"></a>
+Panic</h1>
+<ul>
+<li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
+</ul>
 
 </div>
 </div>
-<a id="af408af922875eb26c25cef4ddfdede02"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af408af922875eb26c25cef4ddfdede02">&#9670;&nbsp;</a></span>opendal_operator_options_set()</h2>
+<a id="a8d6a3d830761b215c3d03960b6153582"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d6a3d830761b215c3d03960b6153582">&#9670;&nbsp;</a></span>opendal_operator_stat()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">void opendal_operator_options_set </td>
+          <td class="memname">struct <a class="el" href="structopendal__result__stat.html">opendal_result_stat</a> opendal_operator_stat </td>
           <td>(</td>
-          <td class="paramtype">struct <a class="el" href="structopendal__operator__options.html">opendal_operator_options</a> *&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>key</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
+          <td class="paramname"><em>path</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -1562,38 +1560,67 @@ Safety</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Set a Key-Value pair inside <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a>. </p>
-<h1><a class="anchor" id="autotoc_md32"></a>
-Safety</h1>
-<p>This function is unsafe because it dereferences and casts the raw pointers Make sure the pointer of <code>key</code> and <code>value</code> point to a valid string.</p>
-<h1><a class="anchor" id="autotoc_md33"></a>
+<p>Stat the path, return its metadata. </p>
+<p>Error is NULL if successful, otherwise it contains the error code and error message.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The path you want to stat </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
+<dd>
+<a class="el" href="structopendal__result__stat.html" title="The result type returned by opendal_operator_stat().">opendal_result_stat</a> </dd>
+<dd>
+<a class="el" href="structopendal__metadata.html" title="Carries all metadata associated with a path.">opendal_metadata</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__stat.html" title="The result type returned by opendal_operator_stat().">opendal_result_stat</a>, containing a metadata and an <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>. If the operation succeeds, the <code>meta</code> field would holds a valid metadata and the <code> [...]
+<h1><a class="anchor" id="autotoc_md26"></a>
 Example</h1>
-<div class="fragment"><div class="line"><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options = <a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>();</div>
-<div class="line"><a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(options, <span class="stringliteral">&quot;root&quot;</span>, <span class="stringliteral">&quot;/myroot&quot;</span>);</div>
+<div class="fragment"><div class="line"><span class="comment">// ... previously you wrote &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
+<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
+<div class="line">assert(s.<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a> == NULL);</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// .. use your opendal_operator_options</span></div>
+<div class="line"><span class="keyword">const</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *meta = s.<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
 <div class="line"> </div>
-<div class="line"><a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(options);</div>
-</div><!-- fragment --> 
+<div class="line"><span class="comment">// ... you could now use your metadata, notice that please only access metadata</span></div>
+<div class="line"><span class="comment">// using the APIs provided by OpenDAL</span></div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md27"></a>
+Safety</h1>
+<p>It is <b>safe</b> under the cases below</p><ul>
+<li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
+</ul>
+<h1><a class="anchor" id="autotoc_md28"></a>
+Panic</h1>
+<ul>
+<li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
+</ul>
+
 </div>
 </div>
-<a id="aefa1285911f7cf00837e69ba29d2efd3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aefa1285911f7cf00837e69ba29d2efd3">&#9670;&nbsp;</a></span>opendal_operator_stat()</h2>
+<a id="af8b6596a53263101e93b4d73e9eb928c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8b6596a53263101e93b4d73e9eb928c">&#9670;&nbsp;</a></span>opendal_operator_write()</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__result__stat.html">opendal_result_stat</a> opendal_operator_stat </td>
+          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_operator_write </td>
           <td>(</td>
-          <td class="paramtype">const struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
+          <td class="paramtype">const struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>path</em>&#160;</td>
+          <td class="paramname"><em>path</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="structopendal__bytes.html">opendal_bytes</a>&#160;</td>
+          <td class="paramname"><em>bytes</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -1603,37 +1630,43 @@ Example</h1>
       </table>
 </div><div class="memdoc">
 
-<p>Stat the path, return its metadata. </p>
-<p>Error is NULL if successful, otherwise it contains the error code and error message.</p>
+<p>Blockingly write raw bytes to <code>path</code>. </p>
+<p>Write the <code>bytes</code> into the <code>path</code> blockingly by <code>op_ptr</code>. Error is NULL if successful, otherwise it contains the error code and error message.</p>
+<dl class="section note"><dt>Note</dt><dd>It is important to notice that the <code>bytes</code> that is passes in will be consumed by this function. Therefore, you should not use the <code>bytes</code> after this function returns.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> created previously </td></tr>
-    <tr><td class="paramname">path</td><td>The path you want to stat </td></tr>
+    <tr><td class="paramname">ptr</td><td>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> created previously </td></tr>
+    <tr><td class="paramname">path</td><td>The designated path you want to write your bytes in </td></tr>
+    <tr><td class="paramname">bytes</td><td>The opendal_byte typed bytes to be written </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
-<a class="el" href="structopendal__result__stat.html" title="The result type returned by opendal_operator_stat().">opendal_result_stat</a> </dd>
+<a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> </dd>
 <dd>
-<a class="el" href="structopendal__metadata.html" title="Carries all metadata associated with a path.">opendal_metadata</a> </dd></dl>
-<dl class="section return"><dt>Returns</dt><dd>Returns <a class="el" href="structopendal__result__stat.html" title="The result type returned by opendal_operator_stat().">opendal_result_stat</a>, containing a metadata and an <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a>. If the operation succeeds, the <code>meta</code> field would holds a valid metadata and the <code> [...]
-<h1><a class="anchor" id="autotoc_md22"></a>
+<a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>NULL if succeeds, otherwise it contains the error code and error message.</dd></dl>
+<h1><a class="anchor" id="autotoc_md11"></a>
 Example</h1>
-<div class="fragment"><div class="line"><span class="comment">// ... previously you wrote &quot;Hello, World!&quot; to path &quot;/testpath&quot;</span></div>
-<div class="line"><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> s = <a class="code" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>);</div>
-<div class="line">assert(s.<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a> == NULL);</div>
+<p>Following is an example </p><div class="fragment"><div class="line"><span class="comment">//...prepare your opendal_operator, named ptr for example</span></div>
 <div class="line"> </div>
-<div class="line"><span class="keyword">const</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *meta = s.<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
+<div class="line"><span class="comment">// prepare your data</span></div>
+<div class="line"><span class="keywordtype">char</span>* data = <span class="stringliteral">&quot;Hello, World!&quot;</span>;</div>
+<div class="line"><a class="code" href="structopendal__bytes.html">opendal_bytes</a> bytes = <a class="code" href="structopendal__bytes.html">opendal_bytes</a> { .<a class="code" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">data</a> = (uint8_t*)data, .len = 13 };</div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// ... you could now use your metadata, notice that please only access metadata</span></div>
-<div class="line"><span class="comment">// using the APIs provided by OpenDAL</span></div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md23"></a>
+<div class="line"><span class="comment">// now you can write!</span></div>
+<div class="line"><a class="code" href="structopendal__error.html">opendal_error</a> *err = <a class="code" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a>(ptr, <span class="stringliteral">&quot;/testpath&quot;</span>, bytes);</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// Assert that this succeeds</span></div>
+<div class="line">assert(err == NULL);</div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md12"></a>
 Safety</h1>
 <p>It is <b>safe</b> under the cases below</p><ul>
 <li>The memory pointed to by <code>path</code> must contain a valid nul terminator at the end of the string.</li>
+<li>The <code>bytes</code> provided has valid byte in the <code>data</code> field and the <code>len</code> field is set correctly.</li>
 </ul>
-<h1><a class="anchor" id="autotoc_md24"></a>
+<h1><a class="anchor" id="autotoc_md13"></a>
 Panic</h1>
 <ul>
 <li>If the <code>path</code> points to NULL, this function panics, i.e. exits with information </li>
@@ -1657,10 +1690,12 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
+<p>Frees the heap memory used by the <a class="el" href="structopendal__reader.html" title="The result type returned by opendal&#39;s reader operation.">opendal_reader</a>. </p>
+
 </div>
 </div>
-<a id="ae10ef4bd17ee529fbfa8ab6ed9d0e3a4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">&#9670;&nbsp;</a></span>opendal_reader_read()</h2>
+<a id="a1a2ea5159526b724de9724dd905d2d3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1a2ea5159526b724de9724dd905d2d3e">&#9670;&nbsp;</a></span>opendal_reader_read()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -1669,7 +1704,7 @@ Panic</h1>
           <td class="memname">struct <a class="el" href="structopendal__result__reader__read.html">opendal_result_reader_read</a> opendal_reader_read </td>
           <td>(</td>
           <td class="paramtype">const struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
+          <td class="paramname"><em>reader</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -1691,6 +1726,8 @@ Panic</h1>
       </table>
 </div><div class="memdoc">
 
+<p>Read data from the reader. </p>
+
 </div>
 </div>
 </div><!-- contents -->
diff --git a/docs/c/opendal_8h_source.html b/docs/c/opendal_8h_source.html
index ed20de397..b487dff66 100644
--- a/docs/c/opendal_8h_source.html
+++ b/docs/c/opendal_8h_source.html
@@ -123,166 +123,166 @@ $(function() {
 <div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160; </div>
 <div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>Metadata Metadata;</div>
 <div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div>
-<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="structopendal__operator__ptr.html">  223</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> {</div>
-<div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">  228</a></span>&#160;  <span class="keyword">const</span> <span class="keyword">struct </span>BlockingOperator *<a class="code" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">ptr</a>;</div>
-<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">  229</a></span>&#160;} <a class="code" href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">opendal_operator_ptr</a>;</div>
-<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160; </div>
-<div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="structopendal__bytes.html">  240</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> {</div>
-<div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">  244</a></span>&#160;  <span class="keyword">const</span> uint8_t *<a class="code" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">data</a>;</div>
-<div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">  248</a></span>&#160;  uintptr_t <a class="code" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">len</a>;</div>
-<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="opendal_8h.html#a4117acdec0983ce12962491960847381">  249</a></span>&#160;} <a class="code" href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal_bytes</a>;</div>
-<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160; </div>
-<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="structopendal__error.html">  270</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> {</div>
-<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  <span class="keyword">enum</span> <a class="code" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a> <a class="code" href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">code</a>;</div>
-<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> <a class="code" href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">message</a>;</div>
-<div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">  273</a></span>&#160;} <a class="code" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal_error</a>;</div>
-<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160; </div>
-<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html">  287</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> {</div>
-<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">  288</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *<a class="code" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">operator_ptr</a>;</div>
-<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">  289</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">error</a>;</div>
-<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">  290</a></span>&#160;} <a class="code" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal_result_operator_new</a>;</div>
-<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div>
-<div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structopendal__operator__options.html">  302</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> {</div>
-<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">  307</a></span>&#160;  <span class="keyword">struct </span>HashMap_String__String *<a class="code" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">inner</a>;</div>
-<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">  308</a></span>&#160;} <a class="code" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal_operator_options</a>;</div>
-<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160; </div>
-<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="structopendal__result__read.html">  318</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__read.html">opendal_result_read</a> {</div>
-<div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">  322</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> *<a class="code" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">data</a>;</div>
-<div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">  326</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">error</a>;</div>
-<div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">  327</a></span>&#160;} <a class="code" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal_result_read</a>;</div>
-<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160; </div>
-<div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="structopendal__reader.html">  329</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__reader.html">opendal_reader</a> {</div>
-<div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">  330</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa">BlockingReader</a> *<a class="code" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">inner</a>;</div>
-<div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">  331</a></span>&#160;} <a class="code" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal_reader</a>;</div>
-<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div>
-<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="structopendal__result__reader.html">  339</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__reader.html">opendal_result_reader</a> {</div>
-<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">  340</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__reader.html">opendal_reader</a> *<a class="code" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">reader</a>;</div>
-<div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">  341</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">error</a>;</div>
-<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">  342</a></span>&#160;} <a class="code" href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">opendal_result_reader</a>;</div>
-<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160; </div>
-<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html">  354</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> {</div>
-<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">  358</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>;</div>
-<div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">  362</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a>;</div>
-<div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">  363</a></span>&#160;} <a class="code" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">opendal_result_is_exist</a>;</div>
-<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160; </div>
-<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="structopendal__metadata.html">  376</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__metadata.html">opendal_metadata</a> {</div>
-<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">  381</a></span>&#160;  <span class="keyword">struct </span>Metadata *<a class="code" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">inner</a>;</div>
-<div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">  382</a></span>&#160;} <a class="code" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal_metadata</a>;</div>
-<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160; </div>
-<div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html">  391</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> {</div>
-<div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">  395</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
-<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">  399</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a>;</div>
-<div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">  400</a></span>&#160;} <a class="code" href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">opendal_result_stat</a>;</div>
-<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160; </div>
-<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="structopendal__blocking__lister.html">  411</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> {</div>
-<div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">  412</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a> *<a class="code" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">inner</a>;</div>
-<div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">  413</a></span>&#160;} <a class="code" href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">opendal_blocking_lister</a>;</div>
-<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160; </div>
-<div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="structopendal__result__list.html">  422</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__list.html">opendal_result_list</a> {</div>
-<div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">  426</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *<a class="code" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">lister</a>;</div>
-<div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">  430</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a>;</div>
-<div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">  431</a></span>&#160;} <a class="code" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal_result_list</a>;</div>
-<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160; </div>
-<div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="structopendal__list__entry.html">  441</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> {</div>
-<div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">  442</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a> *<a class="code" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">inner</a>;</div>
-<div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">  443</a></span>&#160;} <a class="code" href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">opendal_list_entry</a>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="structopendal__bytes.html">  219</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">  223</a></span>&#160;  <span class="keyword">const</span> uint8_t *<a class="code" href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">data</a>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">  227</a></span>&#160;  uintptr_t <a class="code" href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">len</a>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="opendal_8h.html#a4117acdec0983ce12962491960847381">  228</a></span>&#160;} <a class="code" href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal_bytes</a>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160; </div>
+<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="structopendal__error.html">  249</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  <span class="keyword">enum</span> <a class="code" href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a> <a class="code" href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">code</a>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> <a class="code" href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">message</a>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">  252</a></span>&#160;} <a class="code" href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal_error</a>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160; </div>
+<div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="structopendal__entry.html">  262</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__entry.html">opendal_entry</a> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">  263</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a> *<a class="code" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">inner</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">  264</a></span>&#160;} <a class="code" href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">opendal_entry</a>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
+<div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="structopendal__result__lister__next.html">  273</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__lister__next.html">opendal_result_lister_next</a> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">  277</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__entry.html">opendal_entry</a> *<a class="code" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">entry</a>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">  281</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">error</a>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">  282</a></span>&#160;} <a class="code" href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">opendal_result_lister_next</a>;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160; </div>
+<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="structopendal__lister.html">  293</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__lister.html">opendal_lister</a> {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">  294</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a> *<a class="code" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">inner</a>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">  295</a></span>&#160;} <a class="code" href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">opendal_lister</a>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160; </div>
+<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="structopendal__metadata.html">  308</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__metadata.html">opendal_metadata</a> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">  313</a></span>&#160;  <span class="keyword">struct </span>Metadata *<a class="code" href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">inner</a>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">  314</a></span>&#160;} <a class="code" href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal_metadata</a>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160; </div>
+<div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="structopendal__operator.html">  329</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator.html">opendal_operator</a> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">  334</a></span>&#160;  <span class="keyword">const</span> <span class="keyword">struct </span>BlockingOperator *<a class="code" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">ptr</a>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">  335</a></span>&#160;} <a class="code" href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">opendal_operator</a>;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160; </div>
+<div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html">  349</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> {</div>
+<div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">  353</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__operator.html">opendal_operator</a> *<a class="code" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">op</a>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">  357</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">error</a>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">  358</a></span>&#160;} <a class="code" href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal_result_operator_new</a>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160; </div>
+<div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="structopendal__operator__options.html">  370</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> {</div>
+<div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">  375</a></span>&#160;  <span class="keyword">struct </span>HashMap_String__String *<a class="code" href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">inner</a>;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">  376</a></span>&#160;} <a class="code" href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal_operator_options</a>;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160; </div>
+<div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="structopendal__result__read.html">  386</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__read.html">opendal_result_read</a> {</div>
+<div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">  390</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__bytes.html">opendal_bytes</a> *<a class="code" href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">data</a>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">  394</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">error</a>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">  395</a></span>&#160;} <a class="code" href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal_result_read</a>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160; </div>
+<div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="structopendal__reader.html">  403</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__reader.html">opendal_reader</a> {</div>
+<div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">  404</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa">BlockingReader</a> *<a class="code" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">inner</a>;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">  405</a></span>&#160;} <a class="code" href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal_reader</a>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160; </div>
+<div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="structopendal__result__operator__reader.html">  413</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a> {</div>
+<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">  417</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__reader.html">opendal_reader</a> *<a class="code" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">reader</a>;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">  421</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">error</a>;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">  422</a></span>&#160;} <a class="code" href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">opendal_result_operator_reader</a>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160; </div>
+<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html">  434</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> {</div>
+<div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">  438</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">is_exist</a>;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">  442</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">error</a>;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">  443</a></span>&#160;} <a class="code" href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">opendal_result_is_exist</a>;</div>
 <div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160; </div>
-<div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html">  445</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__reader__read.html">opendal_result_reader_read</a> {</div>
-<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">  446</a></span>&#160;  uintptr_t <a class="code" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">size</a>;</div>
-<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">  447</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">error</a>;</div>
-<div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">  448</a></span>&#160;} <a class="code" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal_result_reader_read</a>;</div>
-<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160; </div>
-<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
-<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
-<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// __cplusplus</span></div>
-<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160; </div>
-<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(const char *scheme,</div>
-<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;                                                        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options);</div>
-<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160; </div>
-<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">  542</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator__ptr.ht [...]
-<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;                                                      <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div>
-<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;                                                      <span class="keyword">struct</span> <a class="code" href="structopendal__bytes.html">opendal_bytes</a> bytes);</div>
-<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160; </div>
-<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__read.html">opendal_result_read</a> <a class="code" href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a>(const struct <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr,</div>
-<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;                                                          <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160; </div>
-<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__reader.html">opendal_result_reader</a> <a class="code" href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">opendal_operator_blocking_reader</a>(const struct <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr,</div>
-<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160; </div>
-<div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">  676</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal_operator_blocking_delete</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator__ptr.h [...]
-<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160; </div>
-<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> <a class="code" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a>(const struct <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr,</div>
-<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160; </div>
-<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> <a class="code" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a>(const struct <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr,</div>
-<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;                                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160; </div>
-<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__list.html">opendal_result_list</a> <a class="code" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal_operator_blocking_list</a>(const struct <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *ptr,</div>
-<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;                                                          <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
-<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160; </div>
-<div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">  818</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal_error_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__error.html">opendal_error</a> *ptr);</div>
-<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160; </div>
-<div class="line"><a name="l00837"></a><span class="lineno"><a class="line" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">  837</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *op);</div>
-<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160; </div>
-<div class="line"><a name="l00842"></a><span class="lineno"><a class="line" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">  842</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal_bytes_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__bytes.html">opendal_bytes</a> *ptr);</div>
-<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160; </div>
-<div class="line"><a name="l00847"></a><span class="lineno"><a class="line" href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">  847</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">opendal_metadata_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *ptr);</div>
-<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160; </div>
-<div class="line"><a name="l00862"></a><span class="lineno"><a class="line" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">  862</a></span>&#160;uint64_t <a class="code" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal_metadata_content_length</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
-<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160; </div>
-<div class="line"><a name="l00877"></a><span class="lineno"><a class="line" href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">  877</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">opendal_metadata_is_file</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
-<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160; </div>
-<div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">  897</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">opendal_metadata_is_dir</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
-<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160; </div>
-<div class="line"><a name="l00907"></a><span class="lineno"><a class="line" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">  907</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *<a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>(<span class="keywordtype">void</span>);</div>
-<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160; </div>
-<div class="line"><a name="l00928"></a><span class="lineno"><a class="line" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">  928</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *<span class="keyword">self</span>,</div>
-<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *key,</div>
-<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div>
-<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160; </div>
-<div class="line"><a name="l00935"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">  935</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options);</div>
-<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160; </div>
-<div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">  946</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> *<a class="code" href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal_lister_next</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__blocking__lister. [...]
-<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160; </div>
-<div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">  951</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal_lister_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *p);</div>
-<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160; </div>
-<div class="line"><a name="l00960"></a><span class="lineno"><a class="line" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">  960</a></span>&#160;<span class="keywordtype">char</span> *<a class="code" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal_list_entry_path</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> *<span class="keyword">self</span>);</div>
-<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160; </div>
-<div class="line"><a name="l00971"></a><span class="lineno"><a class="line" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">  971</a></span>&#160;<span class="keywordtype">char</span> *<a class="code" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal_list_entry_name</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> *<span class="keyword">self</span>);</div>
-<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160; </div>
-<div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">  976</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal_list_entry_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__list__entry.html">opendal_list_entry</a> *ptr);</div>
-<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160; </div>
-<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__reader__read.html">opendal_result_reader_read</a> <a class="code" href="opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">opendal_reader_read</a>(const struct <a class="code" href="structopendal__reader.html">opendal_reader</a> *<span class="keyword">self</span>,</div>
-<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;                                                      uint8_t *buf,</div>
-<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;                                                      uintptr_t len);</div>
-<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160; </div>
-<div class="line"><a name="l00982"></a><span class="lineno"><a class="line" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">  982</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal_reader_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__reader.html">opendal_reader</a> *ptr);</div>
-<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160; </div>
-<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
-<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;} <span class="comment">// extern &quot;C&quot;</span></div>
-<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// __cplusplus</span></div>
-<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160; </div>
-<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _OPENDAL_H */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html">  452</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> {</div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">  456</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<a class="code" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">  460</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a>;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">  461</a></span>&#160;} <a class="code" href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">opendal_result_stat</a>;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160; </div>
+<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="structopendal__result__list.html">  470</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__list.html">opendal_result_list</a> {</div>
+<div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">  474</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__lister.html">opendal_lister</a> *<a class="code" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">lister</a>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">  478</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a>;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">  479</a></span>&#160;} <a class="code" href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal_result_list</a>;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160; </div>
+<div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html">  486</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structopendal__result__reader__read.html">opendal_result_reader_read</a> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">  490</a></span>&#160;  uintptr_t <a class="code" href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">size</a>;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">  494</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">error</a>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">  495</a></span>&#160;} <a class="code" href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal_result_reader_read</a>;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160; </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// __cplusplus</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160; </div>
+<div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">  504</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal_error_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__error.html">opendal_error</a> *ptr);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160; </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__lister__next.html">opendal_result_lister_next</a> <a class="code" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal_lister_next</a>(const struct <a class="code" href="structopendal__lister.html">opendal_lister</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160; </div>
+<div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">  520</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal_lister_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__lister.html">opendal_lister</a> *p);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160; </div>
+<div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">  525</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">opendal_metadata_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *ptr);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160; </div>
+<div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">  540</a></span>&#160;uint64_t <a class="code" href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal_metadata_content_length</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160; </div>
+<div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">  555</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">opendal_metadata_is_file</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160; </div>
+<div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">  575</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">opendal_metadata_is_dir</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__metadata.html">opendal_metadata</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160; </div>
+<div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">  594</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator.html">opendal_operator</a> *op);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160; </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__operator__new.html">opendal_result_operator_new</a> <a class="code" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a>(const char *scheme,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                                                        <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160; </div>
+<div class="line"><a name="l00684"></a><span class="lineno"><a class="line" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">  684</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator.html">opendal_op [...]
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *path,</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;                                             <span class="keyword">struct</span> <a class="code" href="structopendal__bytes.html">opendal_bytes</a> bytes);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160; </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__read.html">opendal_result_read</a> <a class="code" href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a>(const struct <a class="code" href="structopendal__operator.html">opendal_operator</a> *op,</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160; </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a> <a class="code" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal_operator_reader</a>(const struct <a class="code" href="structopendal__operator.html">opendal_operator</a> *op,</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160; </div>
+<div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">  816</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__error.html">opendal_error</a> *<a class="code" href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal_operator_delete</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator.html">opendal_o [...]
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160; </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__is__exist.html">opendal_result_is_exist</a> <a class="code" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a>(const struct <a class="code" href="structopendal__operator.html">opendal_operator</a> *op,</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;                                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160; </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__stat.html">opendal_result_stat</a> <a class="code" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a>(const struct <a class="code" href="structopendal__operator.html">opendal_operator</a> *op,</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;                                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160; </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__list.html">opendal_result_list</a> <a class="code" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal_operator_list</a>(const struct <a class="code" href="structopendal__operator.html">opendal_operator</a> *op,</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;                                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *path);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160; </div>
+<div class="line"><a name="l00957"></a><span class="lineno"><a class="line" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">  957</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal_bytes_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__bytes.html">opendal_bytes</a> *bs);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160; </div>
+<div class="line"><a name="l00967"></a><span class="lineno"><a class="line" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">  967</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *<a class="code" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160; </div>
+<div class="line"><a name="l00988"></a><span class="lineno"><a class="line" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">  988</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *key,</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160; </div>
+<div class="line"><a name="l00995"></a><span class="lineno"><a class="line" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">  995</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__operator__options.html">opendal_operator_options</a> *options);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160; </div>
+<div class="line"><a name="l01004"></a><span class="lineno"><a class="line" href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9"> 1004</a></span>&#160;<span class="keywordtype">char</span> *<a class="code" href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">opendal_entry_path</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__entry.html">opendal_entry</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
+<div class="line"><a name="l01015"></a><span class="lineno"><a class="line" href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5"> 1015</a></span>&#160;<span class="keywordtype">char</span> *<a class="code" href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">opendal_entry_name</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structopendal__entry.html">opendal_entry</a> *<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; </div>
+<div class="line"><a name="l01020"></a><span class="lineno"><a class="line" href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf"> 1020</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">opendal_entry_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__entry.html">opendal_entry</a> *ptr);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="keyword">struct </span><a class="code" href="structopendal__result__reader__read.html">opendal_result_reader_read</a> <a class="code" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">opendal_reader_read</a>(const struct <a class="code" href="structopendal__reader.html">opendal_reader</a> *reader,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;                                                      uint8_t *buf,</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;                                                      uintptr_t len);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; </div>
+<div class="line"><a name="l01032"></a><span class="lineno"><a class="line" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472"> 1032</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal_reader_free</a>(<span class="keyword">struct</span> <a class="code" href="structopendal__reader.html">opendal_reader</a> *ptr);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;} <span class="comment">// extern &quot;C&quot;</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// __cplusplus</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _OPENDAL_H */</span><span class="preprocessor"></span></div>
 <div class="ttc" id="aopendal_8h_html_a03ea17a7d09e319825d05a1d9f5d933c"><div class="ttname"><a href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a></div><div class="ttdeci">struct BlockingLister BlockingLister</div><div class="ttdef"><b>Definition:</b> opendal.h:82</div></div>
+<div class="ttc" id="aopendal_8h_html_a04d551eea4b6248d96c9ce9278d27855"><div class="ttname"><a href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator.</div></div>
+<div class="ttc" id="aopendal_8h_html_a07642e228c04606083f49cbe02a626ca"><div class="ttname"><a href="opendal_8h.html#a07642e228c04606083f49cbe02a626ca">opendal_operator</a></div><div class="ttdeci">struct opendal_operator opendal_operator</div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div></div>
 <div class="ttc" id="aopendal_8h_html_a07f3f83aa0b650a09986291e47a8ddb0"><div class="ttname"><a href="opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0">opendal_result_stat</a></div><div class="ttdeci">struct opendal_result_stat opendal_result_stat</div><div class="ttdoc">The result type returned by opendal_operator_stat().</div></div>
-<div class="ttc" id="aopendal_8h_html_a0b698963d36cbe398ba4bd4e61195e44"><div class="ttname"><a href="opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44">opendal_blocking_lister</a></div><div class="ttdeci">struct opendal_blocking_lister opendal_blocking_lister</div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div></div>
-<div class="ttc" id="aopendal_8h_html_a191fdabb43a5173bcb00fbb3f615070c"><div class="ttname"><a href="opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c">opendal_lister_next</a></div><div class="ttdeci">struct opendal_list_entry * opendal_lister_next(const struct opendal_blocking_lister *self)</div><div class="ttdoc">Return the next object to be listed.</div></div>
+<div class="ttc" id="aopendal_8h_html_a1a2ea5159526b724de9724dd905d2d3e"><div class="ttname"><a href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e">opendal_reader_read</a></div><div class="ttdeci">struct opendal_result_reader_read opendal_reader_read(const struct opendal_reader *reader, uint8_t *buf, uintptr_t len)</div><div class="ttdoc">Read data from the reader.</div></div>
 <div class="ttc" id="aopendal_8h_html_a1c2ddf5212cda7243c1138f55b9cdbc5"><div class="ttname"><a href="opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5">opendal_result_operator_new</a></div><div class="ttdeci">struct opendal_result_operator_new opendal_result_operator_new</div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div></div>
 <div class="ttc" id="aopendal_8h_html_a1d65b173b087b2abca126de2e951b412"><div class="ttname"><a href="opendal_8h.html#a1d65b173b087b2abca126de2e951b412">opendal_operator_options_free</a></div><div class="ttdeci">void opendal_operator_options_free(const struct opendal_operator_options *options)</div><div class="ttdoc">Free the allocated memory used by [opendal_operator_options].</div></div>
-<div class="ttc" id="aopendal_8h_html_a1f2a071a20d13757ba9cd5fde09c1100"><div class="ttname"><a href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal_reader</a></div><div class="ttdeci">struct opendal_reader opendal_reader</div></div>
-<div class="ttc" id="aopendal_8h_html_a1fc707d831b5e91edd1a34c0f08805ff"><div class="ttname"><a href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal_result_reader_read</a></div><div class="ttdeci">struct opendal_result_reader_read opendal_result_reader_read</div></div>
-<div class="ttc" id="aopendal_8h_html_a25e2bd426163636455d6ba2e82547db7"><div class="ttname"><a href="opendal_8h.html#a25e2bd426163636455d6ba2e82547db7">opendal_lister_free</a></div><div class="ttdeci">void opendal_lister_free(const struct opendal_blocking_lister *p)</div><div class="ttdoc">Free the heap-allocated metadata used by opendal_blocking_lister.</div></div>
-<div class="ttc" id="aopendal_8h_html_a2ceeec46dfb498f1b6c9f1138d820977"><div class="ttname"><a href="opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977">opendal_operator_blocking_delete</a></div><div class="ttdeci">struct opendal_error * opendal_operator_blocking_delete(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly delete the object in path.</div></div>
-<div class="ttc" id="aopendal_8h_html_a39c13941f26a7a1bbb0b52cbb7af61b9"><div class="ttname"><a href="opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9">opendal_operator_blocking_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_blocking_write(const struct opendal_operator_ptr *ptr, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
-<div class="ttc" id="aopendal_8h_html_a3a9984872f04ae478af91a15e1af0af0"><div class="ttname"><a href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0">opendal_list_entry_path</a></div><div class="ttdeci">char * opendal_list_entry_path(const struct opendal_list_entry *self)</div><div class="ttdoc">Path of entry.</div></div>
+<div class="ttc" id="aopendal_8h_html_a1f2a071a20d13757ba9cd5fde09c1100"><div class="ttname"><a href="opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100">opendal_reader</a></div><div class="ttdeci">struct opendal_reader opendal_reader</div><div class="ttdoc">The result type returned by opendal's reader operation.</div></div>
+<div class="ttc" id="aopendal_8h_html_a1fc707d831b5e91edd1a34c0f08805ff"><div class="ttname"><a href="opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff">opendal_result_reader_read</a></div><div class="ttdeci">struct opendal_result_reader_read opendal_result_reader_read</div><div class="ttdoc">The is the result type returned by opendal_reader_read(). The result type contains a size field,...</div></div>
 <div class="ttc" id="aopendal_8h_html_a3b32f655689a122d2b6feff169fac442"><div class="ttname"><a href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442">opendal_operator_new</a></div><div class="ttdeci">struct opendal_result_operator_new opendal_operator_new(const char *scheme, const struct opendal_operator_options *options)</div><div class="ttdoc">Construct an operator based on scheme and options</div></div>
-<div class="ttc" id="aopendal_8h_html_a3d3583cbe9b8b5281ddbc3c4f78dca33"><div class="ttname"><a href="opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33">opendal_list_entry</a></div><div class="ttdeci">struct opendal_list_entry opendal_list_entry</div><div class="ttdoc">opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister</div></div>
-<div class="ttc" id="aopendal_8h_html_a3e038035b4339e19f24e1aa8ef678def"><div class="ttname"><a href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def">opendal_operator_free</a></div><div class="ttdeci">void opendal_operator_free(const struct opendal_operator_ptr *op)</div><div class="ttdoc">Free the heap-allocated operator pointed by opendal_operator_ptr.</div></div>
 <div class="ttc" id="aopendal_8h_html_a4117acdec0983ce12962491960847381"><div class="ttname"><a href="opendal_8h.html#a4117acdec0983ce12962491960847381">opendal_bytes</a></div><div class="ttdeci">struct opendal_bytes opendal_bytes</div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div></div>
 <div class="ttc" id="aopendal_8h_html_a4a8d92df21f5473762677afd9af5f714"><div class="ttname"><a href="opendal_8h.html#a4a8d92df21f5473762677afd9af5f714">opendal_error_free</a></div><div class="ttdeci">void opendal_error_free(struct opendal_error *ptr)</div><div class="ttdoc">Frees the opendal_error, ok to call on NULL.</div></div>
-<div class="ttc" id="aopendal_8h_html_a606c20c489cac143082dc3870102f43a"><div class="ttname"><a href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal_result_list</a></div><div class="ttdeci">struct opendal_result_list opendal_result_list</div><div class="ttdoc">The result type returned by opendal_operator_blocking_list().</div></div>
-<div class="ttc" id="aopendal_8h_html_a6285d4da17f5f873bc7a8edd7301fb81"><div class="ttname"><a href="opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81">opendal_operator_blocking_reader</a></div><div class="ttdeci">struct opendal_result_reader opendal_operator_blocking_reader(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
+<div class="ttc" id="aopendal_8h_html_a581e3ab221c9b3ed82e0a2eb0ba37f68"><div class="ttname"><a href="opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68">opendal_lister</a></div><div class="ttdeci">struct opendal_lister opendal_lister</div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div></div>
+<div class="ttc" id="aopendal_8h_html_a590096ddcd0245b474880bae76c2137d"><div class="ttname"><a href="opendal_8h.html#a590096ddcd0245b474880bae76c2137d">opendal_result_lister_next</a></div><div class="ttdeci">struct opendal_result_lister_next opendal_result_lister_next</div><div class="ttdoc">The result type returned by opendal_lister_next(). The list entry is the list result of the list oper...</div></div>
+<div class="ttc" id="aopendal_8h_html_a606c20c489cac143082dc3870102f43a"><div class="ttname"><a href="opendal_8h.html#a606c20c489cac143082dc3870102f43a">opendal_result_list</a></div><div class="ttdeci">struct opendal_result_list opendal_result_list</div><div class="ttdoc">The result type returned by opendal_operator_list().</div></div>
 <div class="ttc" id="aopendal_8h_html_a65b0d0252adaf76f9ce2004299344de8"><div class="ttname"><a href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a></div><div class="ttdeci">struct Entry Entry</div><div class="ttdef"><b>Definition:</b> opendal.h:195</div></div>
 <div class="ttc" id="aopendal_8h_html_a6715be152766e5b8f840ce10cf9442c2"><div class="ttname"><a href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2">opendal_code</a></div><div class="ttdeci">opendal_code</div><div class="ttdoc">The error code for all opendal APIs in C binding.</div><div class="ttdef"><b>Definition:</b> opendal.h:33</div></div>
 <div class="ttc" id="aopendal_8h_html_a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b"><div class="ttname"><a href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b">OPENDAL_UNSUPPORTED</a></div><div class="ttdeci">@ OPENDAL_UNSUPPORTED</div><div class="ttdef"><b>Definition:</b> opendal.h:41</div></div>
@@ -297,66 +297,74 @@ $(function() {
 <div class="ttc" id="aopendal_8h_html_a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5"><div class="ttname"><a href="opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5">OPENDAL_CONFIG_INVALID</a></div><div class="ttdeci">@ OPENDAL_CONFIG_INVALID</div><div class="ttdef"><b>Definition:</b> opendal.h:45</div></div>
 <div class="ttc" id="aopendal_8h_html_a67b1457f2b1258551552dc383840f288"><div class="ttname"><a href="opendal_8h.html#a67b1457f2b1258551552dc383840f288">opendal_operator_options_new</a></div><div class="ttdeci">struct opendal_operator_options * opendal_operator_options_new(void)</div><div class="ttdoc">Construct a heap-allocated opendal_operator_options.</div></div>
 <div class="ttc" id="aopendal_8h_html_a68a7b0ae2b453dd9ba31ba0d572a4d5d"><div class="ttname"><a href="opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d">opendal_result_read</a></div><div class="ttdeci">struct opendal_result_read opendal_result_read</div><div class="ttdoc">The result type returned by opendal's read operation.</div></div>
-<div class="ttc" id="aopendal_8h_html_a76d4f0935961d0e49befd7719728fd16"><div class="ttname"><a href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal_operator_options</a></div><div class="ttdeci">struct opendal_operator_options opendal_operator_options</div><div class="ttdoc">The configuration for the initialization of opendal_operator_ptr.</div></div>
-<div class="ttc" id="aopendal_8h_html_a7712a472329fe04955dd86a213c78b37"><div class="ttname"><a href="opendal_8h.html#a7712a472329fe04955dd86a213c78b37">opendal_result_reader</a></div><div class="ttdeci">struct opendal_result_reader opendal_result_reader</div><div class="ttdoc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(),...</div></div>
-<div class="ttc" id="aopendal_8h_html_a7ef708841e8d9a0cebb64a983ef4d472"><div class="ttname"><a href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal_reader_free</a></div><div class="ttdeci">void opendal_reader_free(struct opendal_reader *ptr)</div></div>
-<div class="ttc" id="aopendal_8h_html_a844f3a690078c34af557ae83e1f1513f"><div class="ttname"><a href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f">opendal_operator_blocking_list</a></div><div class="ttdeci">struct opendal_result_list opendal_operator_blocking_list(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly list the objects in path.</div></div>
+<div class="ttc" id="aopendal_8h_html_a76d4f0935961d0e49befd7719728fd16"><div class="ttname"><a href="opendal_8h.html#a76d4f0935961d0e49befd7719728fd16">opendal_operator_options</a></div><div class="ttdeci">struct opendal_operator_options opendal_operator_options</div><div class="ttdoc">The configuration for the initialization of opendal_operator.</div></div>
+<div class="ttc" id="aopendal_8h_html_a7ef708841e8d9a0cebb64a983ef4d472"><div class="ttname"><a href="opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472">opendal_reader_free</a></div><div class="ttdeci">void opendal_reader_free(struct opendal_reader *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_reader.</div></div>
+<div class="ttc" id="aopendal_8h_html_a8429a4433316d9bf70cfffbbcb844a3d"><div class="ttname"><a href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d">opendal_lister_next</a></div><div class="ttdeci">struct opendal_result_lister_next opendal_lister_next(const struct opendal_lister *self)</div><div class="ttdoc">Return the next object to be listed.</div></div>
 <div class="ttc" id="aopendal_8h_html_a8900dddbbce980c3323cedd4f30c33ad"><div class="ttname"><a href="opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad">opendal_metadata_is_file</a></div><div class="ttdeci">bool opendal_metadata_is_file(const struct opendal_metadata *self)</div><div class="ttdoc">Return whether the path represents a file.</div></div>
 <div class="ttc" id="aopendal_8h_html_a8c11fb124aac4911b663122dbfa7d1fa"><div class="ttname"><a href="opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa">BlockingReader</a></div><div class="ttdeci">struct BlockingReader BlockingReader</div><div class="ttdef"><b>Definition:</b> opendal.h:151</div></div>
+<div class="ttc" id="aopendal_8h_html_a8d6a3d830761b215c3d03960b6153582"><div class="ttname"><a href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582">opendal_operator_stat</a></div><div class="ttdeci">struct opendal_result_stat opendal_operator_stat(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Stat the path, return its metadata.</div></div>
 <div class="ttc" id="aopendal_8h_html_a8ff66345b1c45c66920ef0ddfef739c5"><div class="ttname"><a href="opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5">opendal_metadata_free</a></div><div class="ttdeci">void opendal_metadata_free(struct opendal_metadata *ptr)</div><div class="ttdoc">Free the heap-allocated metadata used by opendal_metadata.</div></div>
-<div class="ttc" id="aopendal_8h_html_aae5d70fff7f6c87e07b8aa97e08e7191"><div class="ttname"><a href="opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191">opendal_operator_ptr</a></div><div class="ttdeci">struct opendal_operator_ptr opendal_operator_ptr</div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div></div>
+<div class="ttc" id="aopendal_8h_html_aaa2109178eeaabde28bf8ba7e3110ed5"><div class="ttname"><a href="opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5">opendal_entry_name</a></div><div class="ttdeci">char * opendal_entry_name(const struct opendal_entry *self)</div><div class="ttdoc">Name of entry.</div></div>
+<div class="ttc" id="aopendal_8h_html_ab1419180b377316e27416b742bcc059f"><div class="ttname"><a href="opendal_8h.html#ab1419180b377316e27416b742bcc059f">opendal_operator_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_read(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
 <div class="ttc" id="aopendal_8h_html_aba7687efb3e2f74800e93aee4eede6cc"><div class="ttname"><a href="opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc">opendal_error</a></div><div class="ttdeci">struct opendal_error opendal_error</div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div></div>
 <div class="ttc" id="aopendal_8h_html_ac8cb949fb37f83dfcbe78976eaa29409"><div class="ttname"><a href="opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409">opendal_metadata_is_dir</a></div><div class="ttdeci">bool opendal_metadata_is_dir(const struct opendal_metadata *self)</div><div class="ttdoc">Return whether the path represents a directory.</div></div>
 <div class="ttc" id="aopendal_8h_html_ac8e9a9da0f04cb80848e7e42c3b90235"><div class="ttname"><a href="opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235">opendal_metadata_content_length</a></div><div class="ttdeci">uint64_t opendal_metadata_content_length(const struct opendal_metadata *self)</div><div class="ttdoc">Return the content_length of the metadata.</div></div>
-<div class="ttc" id="aopendal_8h_html_ac9b6091ec4c8aa0333727b34de3fa845"><div class="ttname"><a href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845">opendal_list_entry_name</a></div><div class="ttdeci">char * opendal_list_entry_name(const struct opendal_list_entry *self)</div><div class="ttdoc">Name of entry.</div></div>
-<div class="ttc" id="aopendal_8h_html_ae10ef4bd17ee529fbfa8ab6ed9d0e3a4"><div class="ttname"><a href="opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4">opendal_reader_read</a></div><div class="ttdeci">struct opendal_result_reader_read opendal_reader_read(const struct opendal_reader *self, uint8_t *buf, uintptr_t len)</div></div>
-<div class="ttc" id="aopendal_8h_html_ae5a3bf403cdf78d5c5b1fa9f623f0d80"><div class="ttname"><a href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80">opendal_operator_is_exist</a></div><div class="ttdeci">struct opendal_result_is_exist opendal_operator_is_exist(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Check whether the path exists.</div></div>
-<div class="ttc" id="aopendal_8h_html_ae8fc63885af34e53afbb075dfed39732"><div class="ttname"><a href="opendal_8h.html#ae8fc63885af34e53afbb075dfed39732">opendal_operator_blocking_read</a></div><div class="ttdeci">struct opendal_result_read opendal_operator_blocking_read(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
-<div class="ttc" id="aopendal_8h_html_aea5253c2bbe9438349eebb68a18a82ea"><div class="ttname"><a href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea">opendal_bytes_free</a></div><div class="ttdeci">void opendal_bytes_free(struct opendal_bytes *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_bytes.</div></div>
-<div class="ttc" id="aopendal_8h_html_aefa1285911f7cf00837e69ba29d2efd3"><div class="ttname"><a href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3">opendal_operator_stat</a></div><div class="ttdeci">struct opendal_result_stat opendal_operator_stat(const struct opendal_operator_ptr *ptr, const char *path)</div><div class="ttdoc">Stat the path, return its metadata.</div></div>
+<div class="ttc" id="aopendal_8h_html_aca8d6d56223c55277146afe9ca226944"><div class="ttname"><a href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944">opendal_operator_reader</a></div><div class="ttdeci">struct opendal_result_operator_reader opendal_operator_reader(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly read the data from path.</div></div>
+<div class="ttc" id="aopendal_8h_html_acc6c32aa41963ac67e612dc47f7edb46"><div class="ttname"><a href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46">opendal_operator_is_exist</a></div><div class="ttdeci">struct opendal_result_is_exist opendal_operator_is_exist(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Check whether the path exists.</div></div>
+<div class="ttc" id="aopendal_8h_html_ad21a0a160ee32cfa90e2e0ca1e1da0dc"><div class="ttname"><a href="opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc">opendal_operator_delete</a></div><div class="ttdeci">struct opendal_error * opendal_operator_delete(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly delete the object in path.</div></div>
+<div class="ttc" id="aopendal_8h_html_adba027eb1460c828ff32e87f0ceb338a"><div class="ttname"><a href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a">opendal_bytes_free</a></div><div class="ttdeci">void opendal_bytes_free(struct opendal_bytes *bs)</div><div class="ttdoc">Frees the heap memory used by the opendal_bytes.</div></div>
+<div class="ttc" id="aopendal_8h_html_ae16e33ed9b7d8a3791f38a4fd5d877c8"><div class="ttname"><a href="opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8">opendal_result_operator_reader</a></div><div class="ttdeci">struct opendal_result_operator_reader opendal_result_operator_reader</div><div class="ttdoc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(),...</div></div>
+<div class="ttc" id="aopendal_8h_html_ae712985c1de6bc0bb35c85b3cadefab9"><div class="ttname"><a href="opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9">opendal_entry_path</a></div><div class="ttdeci">char * opendal_entry_path(const struct opendal_entry *self)</div><div class="ttdoc">Path of entry.</div></div>
+<div class="ttc" id="aopendal_8h_html_aee248f8b3afbb982fd0ad0baaa1159e3"><div class="ttname"><a href="opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3">opendal_lister_free</a></div><div class="ttdeci">void opendal_lister_free(const struct opendal_lister *p)</div><div class="ttdoc">Free the heap-allocated metadata used by opendal_lister.</div></div>
 <div class="ttc" id="aopendal_8h_html_af0acf7956915881ccd1f0874f309c682"><div class="ttname"><a href="opendal_8h.html#af0acf7956915881ccd1f0874f309c682">opendal_metadata</a></div><div class="ttdeci">struct opendal_metadata opendal_metadata</div><div class="ttdoc">Carries all metadata associated with a path.</div></div>
 <div class="ttc" id="aopendal_8h_html_af408af922875eb26c25cef4ddfdede02"><div class="ttname"><a href="opendal_8h.html#af408af922875eb26c25cef4ddfdede02">opendal_operator_options_set</a></div><div class="ttdeci">void opendal_operator_options_set(struct opendal_operator_options *self, const char *key, const char *value)</div><div class="ttdoc">Set a Key-Value pair inside opendal_operator_options.</div></div>
-<div class="ttc" id="aopendal_8h_html_afa415362bf713d7c7869225a7f50f4a5"><div class="ttname"><a href="opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5">opendal_list_entry_free</a></div><div class="ttdeci">void opendal_list_entry_free(struct opendal_list_entry *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_list_entry.</div></div>
+<div class="ttc" id="aopendal_8h_html_af70798853b9dbd5712006b5f9de831c9"><div class="ttname"><a href="opendal_8h.html#af70798853b9dbd5712006b5f9de831c9">opendal_entry</a></div><div class="ttdeci">struct opendal_entry opendal_entry</div><div class="ttdoc">opendal_list_entry is the entry under a path, which is listed from the opendal_lister</div></div>
+<div class="ttc" id="aopendal_8h_html_af8b6596a53263101e93b4d73e9eb928c"><div class="ttname"><a href="opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c">opendal_operator_write</a></div><div class="ttdeci">struct opendal_error * opendal_operator_write(const struct opendal_operator *op, const char *path, struct opendal_bytes bytes)</div><div class="ttdoc">Blockingly write raw bytes to path.</div></div>
+<div class="ttc" id="aopendal_8h_html_af8f2888ef406d9fc81af0015a904af9c"><div class="ttname"><a href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c">opendal_operator_list</a></div><div class="ttdeci">struct opendal_result_list opendal_operator_list(const struct opendal_operator *op, const char *path)</div><div class="ttdoc">Blockingly list the objects in path.</div></div>
+<div class="ttc" id="aopendal_8h_html_af9238bb47d83d4b8d98981122f3824bf"><div class="ttname"><a href="opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf">opendal_entry_free</a></div><div class="ttdeci">void opendal_entry_free(struct opendal_entry *ptr)</div><div class="ttdoc">Frees the heap memory used by the opendal_list_entry.</div></div>
 <div class="ttc" id="aopendal_8h_html_afbd6b36f0b084ca5fa251ebd5e317abf"><div class="ttname"><a href="opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf">opendal_result_is_exist</a></div><div class="ttdeci">struct opendal_result_is_exist opendal_result_is_exist</div><div class="ttdoc">The result type returned by opendal_operator_is_exist().</div></div>
-<div class="ttc" id="astructopendal__blocking__lister_html"><div class="ttname"><a href="structopendal__blocking__lister.html">opendal_blocking_lister</a></div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div><div class="ttdef"><b>Definition:</b> opendal.h:411</div></div>
-<div class="ttc" id="astructopendal__blocking__lister_html_abe85b5f87a529f81fb7542cdef536a7f"><div class="ttname"><a href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">opendal_blocking_lister::inner</a></div><div class="ttdeci">struct BlockingLister * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:412</div></div>
-<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:240</div></div>
-<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:248</div></div>
-<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:244</div></div>
-<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:270</div></div>
-<div class="ttc" id="astructopendal__error_html_a64095efcf3588a1871b14eab3041d0d4"><div class="ttname"><a href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">opendal_error::message</a></div><div class="ttdeci">struct opendal_bytes message</div><div class="ttdef"><b>Definition:</b> opendal.h:272</div></div>
-<div class="ttc" id="astructopendal__error_html_ac5ac4b16d49b767afdb29cf9b8115e53"><div class="ttname"><a href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">opendal_error::code</a></div><div class="ttdeci">enum opendal_code code</div><div class="ttdef"><b>Definition:</b> opendal.h:271</div></div>
-<div class="ttc" id="astructopendal__list__entry_html"><div class="ttname"><a href="structopendal__list__entry.html">opendal_list_entry</a></div><div class="ttdoc">opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister</div><div class="ttdef"><b>Definition:</b> opendal.h:441</div></div>
-<div class="ttc" id="astructopendal__list__entry_html_a23ad6b3ca61aa600ef6f3769f2479892"><div class="ttname"><a href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">opendal_list_entry::inner</a></div><div class="ttdeci">struct Entry * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:442</div></div>
-<div class="ttc" id="astructopendal__metadata_html"><div class="ttname"><a href="structopendal__metadata.html">opendal_metadata</a></div><div class="ttdoc">Carries all metadata associated with a path.</div><div class="ttdef"><b>Definition:</b> opendal.h:376</div></div>
-<div class="ttc" id="astructopendal__metadata_html_afadf4e2bbfa3ee699d3c3d9c0a96a404"><div class="ttname"><a href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">opendal_metadata::inner</a></div><div class="ttdeci">struct Metadata * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:381</div></div>
-<div class="ttc" id="astructopendal__operator__options_html"><div class="ttname"><a href="structopendal__operator__options.html">opendal_operator_options</a></div><div class="ttdoc">The configuration for the initialization of opendal_operator_ptr.</div><div class="ttdef"><b>Definition:</b> opendal.h:302</div></div>
-<div class="ttc" id="astructopendal__operator__options_html_a0b4a1a2cd9074140b04836b822a04645"><div class="ttname"><a href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">opendal_operator_options::inner</a></div><div class="ttdeci">struct HashMap_String__String * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:307</div></div>
-<div class="ttc" id="astructopendal__operator__ptr_html"><div class="ttname"><a href="structopendal__operator__ptr.html">opendal_operator_ptr</a></div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
-<div class="ttc" id="astructopendal__operator__ptr_html_a17b619ae01bb6471f51f8501ab18dd9b"><div class="ttname"><a href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">opendal_operator_ptr::ptr</a></div><div class="ttdeci">const struct BlockingOperator * ptr</div><div class="ttdef"><b>Definition:</b> opendal.h:228</div></div>
-<div class="ttc" id="astructopendal__reader_html"><div class="ttname"><a href="structopendal__reader.html">opendal_reader</a></div><div class="ttdef"><b>Definition:</b> opendal.h:329</div></div>
-<div class="ttc" id="astructopendal__reader_html_a25070270d288274fc2fcb1e38d389718"><div class="ttname"><a href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">opendal_reader::inner</a></div><div class="ttdeci">struct BlockingReader * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:330</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html"><div class="ttname"><a href="structopendal__result__is__exist.html">opendal_result_is_exist</a></div><div class="ttdoc">The result type returned by opendal_operator_is_exist().</div><div class="ttdef"><b>Definition:</b> opendal.h:354</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html_a6dc61502ab68ba25bcd56b09a215de6c"><div class="ttname"><a href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:362</div></div>
-<div class="ttc" id="astructopendal__result__is__exist_html_abe145d68333ea78b438ef92a12d9d295"><div class="ttname"><a href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">opendal_result_is_exist::is_exist</a></div><div class="ttdeci">bool is_exist</div><div class="ttdef"><b>Definition:</b> opendal.h:358</div></div>
-<div class="ttc" id="astructopendal__result__list_html"><div class="ttname"><a href="structopendal__result__list.html">opendal_result_list</a></div><div class="ttdoc">The result type returned by opendal_operator_blocking_list().</div><div class="ttdef"><b>Definition:</b> opendal.h:422</div></div>
-<div class="ttc" id="astructopendal__result__list_html_a1388cb447f532ecd19ff9a13e09daced"><div class="ttname"><a href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">opendal_result_list::lister</a></div><div class="ttdeci">struct opendal_blocking_lister * lister</div><div class="ttdef"><b>Definition:</b> opendal.h:426</div></div>
-<div class="ttc" id="astructopendal__result__list_html_a874bfb5c9d016445698fb59d65b76ed2"><div class="ttname"><a href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:430</div></div>
-<div class="ttc" id="astructopendal__result__operator__new_html"><div class="ttname"><a href="structopendal__result__operator__new.html">opendal_result_operator_new</a></div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:287</div></div>
-<div class="ttc" id="astructopendal__result__operator__new_html_a1998b1bb97c81253564e0a9228759891"><div class="ttname"><a href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">opendal_result_operator_new::operator_ptr</a></div><div class="ttdeci">struct opendal_operator_ptr * operator_ptr</div><div class="ttdef"><b>Definition:</b> opendal.h:288</div></div>
-<div class="ttc" id="astructopendal__result__operator__new_html_a5ee50d6c74038806e57d12d1880ac520"><div class="ttname"><a href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">opendal_result_operator_new::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:289</div></div>
-<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:318</div></div>
-<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:326</div></div>
-<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:322</div></div>
-<div class="ttc" id="astructopendal__result__reader__read_html"><div class="ttname"><a href="structopendal__result__reader__read.html">opendal_result_reader_read</a></div><div class="ttdef"><b>Definition:</b> opendal.h:445</div></div>
-<div class="ttc" id="astructopendal__result__reader__read_html_a1279e7b3cb6beaf63da0f6ee9370ba36"><div class="ttname"><a href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">opendal_result_reader_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:447</div></div>
-<div class="ttc" id="astructopendal__result__reader__read_html_a5a513cafeacebef13f74fd50c30e9810"><div class="ttname"><a href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">opendal_result_reader_read::size</a></div><div class="ttdeci">uintptr_t size</div><div class="ttdef"><b>Definition:</b> opendal.h:446</div></div>
-<div class="ttc" id="astructopendal__result__reader_html"><div class="ttname"><a href="structopendal__result__reader.html">opendal_result_reader</a></div><div class="ttdoc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(),...</div><div class="ttdef"><b>Definition:</b> opendal.h:339</div></div>
-<div class="ttc" id="astructopendal__result__reader_html_a1c075185ae159ac377b3e971c359efc2"><div class="ttname"><a href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">opendal_result_reader::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:341</div></div>
-<div class="ttc" id="astructopendal__result__reader_html_ab2f72d683d38843ca9b429fc9a80272d"><div class="ttname"><a href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">opendal_result_reader::reader</a></div><div class="ttdeci">struct opendal_reader * reader</div><div class="ttdef"><b>Definition:</b> opendal.h:340</div></div>
-<div class="ttc" id="astructopendal__result__stat_html"><div class="ttname"><a href="structopendal__result__stat.html">opendal_result_stat</a></div><div class="ttdoc">The result type returned by opendal_operator_stat().</div><div class="ttdef"><b>Definition:</b> opendal.h:391</div></div>
-<div class="ttc" id="astructopendal__result__stat_html_a1d4d484d7bf50bc8e5d65dea5f6f2425"><div class="ttname"><a href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat::meta</a></div><div class="ttdeci">struct opendal_metadata * meta</div><div class="ttdef"><b>Definition:</b> opendal.h:395</div></div>
-<div class="ttc" id="astructopendal__result__stat_html_a657eee3bfdf805036f169d94ee70dce9"><div class="ttname"><a href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:399</div></div>
+<div class="ttc" id="astructopendal__bytes_html"><div class="ttname"><a href="structopendal__bytes.html">opendal_bytes</a></div><div class="ttdoc">opendal_bytes carries raw-bytes with its length</div><div class="ttdef"><b>Definition:</b> opendal.h:219</div></div>
+<div class="ttc" id="astructopendal__bytes_html_a16abed2ad211c076650d1ea81772b851"><div class="ttname"><a href="structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851">opendal_bytes::len</a></div><div class="ttdeci">uintptr_t len</div><div class="ttdef"><b>Definition:</b> opendal.h:227</div></div>
+<div class="ttc" id="astructopendal__bytes_html_af7a7f99a262f8a3912f4d1cddb798c86"><div class="ttname"><a href="structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86">opendal_bytes::data</a></div><div class="ttdeci">const uint8_t * data</div><div class="ttdef"><b>Definition:</b> opendal.h:223</div></div>
+<div class="ttc" id="astructopendal__entry_html"><div class="ttname"><a href="structopendal__entry.html">opendal_entry</a></div><div class="ttdoc">opendal_list_entry is the entry under a path, which is listed from the opendal_lister</div><div class="ttdef"><b>Definition:</b> opendal.h:262</div></div>
+<div class="ttc" id="astructopendal__entry_html_aa26d5cb8f16b95ee2f3b91f22254e597"><div class="ttname"><a href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">opendal_entry::inner</a></div><div class="ttdeci">struct Entry * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:263</div></div>
+<div class="ttc" id="astructopendal__error_html"><div class="ttname"><a href="structopendal__error.html">opendal_error</a></div><div class="ttdoc">The opendal error type for C binding, containing an error code and corresponding error message.</div><div class="ttdef"><b>Definition:</b> opendal.h:249</div></div>
+<div class="ttc" id="astructopendal__error_html_a64095efcf3588a1871b14eab3041d0d4"><div class="ttname"><a href="structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4">opendal_error::message</a></div><div class="ttdeci">struct opendal_bytes message</div><div class="ttdef"><b>Definition:</b> opendal.h:251</div></div>
+<div class="ttc" id="astructopendal__error_html_ac5ac4b16d49b767afdb29cf9b8115e53"><div class="ttname"><a href="structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53">opendal_error::code</a></div><div class="ttdeci">enum opendal_code code</div><div class="ttdef"><b>Definition:</b> opendal.h:250</div></div>
+<div class="ttc" id="astructopendal__lister_html"><div class="ttname"><a href="structopendal__lister.html">opendal_lister</a></div><div class="ttdoc">BlockingLister is designed to list entries at given path in a blocking manner.</div><div class="ttdef"><b>Definition:</b> opendal.h:293</div></div>
+<div class="ttc" id="astructopendal__lister_html_a50387dc1691da04cd020cc67df2c4295"><div class="ttname"><a href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">opendal_lister::inner</a></div><div class="ttdeci">struct BlockingLister * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:294</div></div>
+<div class="ttc" id="astructopendal__metadata_html"><div class="ttname"><a href="structopendal__metadata.html">opendal_metadata</a></div><div class="ttdoc">Carries all metadata associated with a path.</div><div class="ttdef"><b>Definition:</b> opendal.h:308</div></div>
+<div class="ttc" id="astructopendal__metadata_html_afadf4e2bbfa3ee699d3c3d9c0a96a404"><div class="ttname"><a href="structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404">opendal_metadata::inner</a></div><div class="ttdeci">struct Metadata * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:313</div></div>
+<div class="ttc" id="astructopendal__operator__options_html"><div class="ttname"><a href="structopendal__operator__options.html">opendal_operator_options</a></div><div class="ttdoc">The configuration for the initialization of opendal_operator.</div><div class="ttdef"><b>Definition:</b> opendal.h:370</div></div>
+<div class="ttc" id="astructopendal__operator__options_html_a0b4a1a2cd9074140b04836b822a04645"><div class="ttname"><a href="structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645">opendal_operator_options::inner</a></div><div class="ttdeci">struct HashMap_String__String * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:375</div></div>
+<div class="ttc" id="astructopendal__operator_html"><div class="ttname"><a href="structopendal__operator.html">opendal_operator</a></div><div class="ttdoc">Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...</div><div class="ttdef"><b>Definition:</b> opendal.h:329</div></div>
+<div class="ttc" id="astructopendal__operator_html_a81ea292736bd2733dd8e2b0d149305fe"><div class="ttname"><a href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">opendal_operator::ptr</a></div><div class="ttdeci">const struct BlockingOperator * ptr</div><div class="ttdef"><b>Definition:</b> opendal.h:334</div></div>
+<div class="ttc" id="astructopendal__reader_html"><div class="ttname"><a href="structopendal__reader.html">opendal_reader</a></div><div class="ttdoc">The result type returned by opendal's reader operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:403</div></div>
+<div class="ttc" id="astructopendal__reader_html_a25070270d288274fc2fcb1e38d389718"><div class="ttname"><a href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">opendal_reader::inner</a></div><div class="ttdeci">struct BlockingReader * inner</div><div class="ttdef"><b>Definition:</b> opendal.h:404</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html"><div class="ttname"><a href="structopendal__result__is__exist.html">opendal_result_is_exist</a></div><div class="ttdoc">The result type returned by opendal_operator_is_exist().</div><div class="ttdef"><b>Definition:</b> opendal.h:434</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html_a6dc61502ab68ba25bcd56b09a215de6c"><div class="ttname"><a href="structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c">opendal_result_is_exist::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:442</div></div>
+<div class="ttc" id="astructopendal__result__is__exist_html_abe145d68333ea78b438ef92a12d9d295"><div class="ttname"><a href="structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295">opendal_result_is_exist::is_exist</a></div><div class="ttdeci">bool is_exist</div><div class="ttdef"><b>Definition:</b> opendal.h:438</div></div>
+<div class="ttc" id="astructopendal__result__list_html"><div class="ttname"><a href="structopendal__result__list.html">opendal_result_list</a></div><div class="ttdoc">The result type returned by opendal_operator_list().</div><div class="ttdef"><b>Definition:</b> opendal.h:470</div></div>
+<div class="ttc" id="astructopendal__result__list_html_a54b9b09c29f8d867da187c32e362398a"><div class="ttname"><a href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">opendal_result_list::lister</a></div><div class="ttdeci">struct opendal_lister * lister</div><div class="ttdef"><b>Definition:</b> opendal.h:474</div></div>
+<div class="ttc" id="astructopendal__result__list_html_a874bfb5c9d016445698fb59d65b76ed2"><div class="ttname"><a href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">opendal_result_list::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:478</div></div>
+<div class="ttc" id="astructopendal__result__lister__next_html"><div class="ttname"><a href="structopendal__result__lister__next.html">opendal_result_lister_next</a></div><div class="ttdoc">The result type returned by opendal_lister_next(). The list entry is the list result of the list oper...</div><div class="ttdef"><b>Definition:</b> opendal.h:273</div></div>
+<div class="ttc" id="astructopendal__result__lister__next_html_a24546e0cde0fa8ca5c5da488769d79ea"><div class="ttname"><a href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">opendal_result_lister_next::entry</a></div><div class="ttdeci">struct opendal_entry * entry</div><div class="ttdef"><b>Definition:</b> opendal.h:277</div></div>
+<div class="ttc" id="astructopendal__result__lister__next_html_ac92e3fafbc77789c19a6ec03e8e53a10"><div class="ttname"><a href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">opendal_result_lister_next::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:281</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html"><div class="ttname"><a href="structopendal__result__operator__new.html">opendal_result_operator_new</a></div><div class="ttdoc">The result type returned by opendal_operator_new() operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:349</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html_a4e358aad13b4c71dc7a9a812191371c6"><div class="ttname"><a href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">opendal_result_operator_new::op</a></div><div class="ttdeci">struct opendal_operator * op</div><div class="ttdef"><b>Definition:</b> opendal.h:353</div></div>
+<div class="ttc" id="astructopendal__result__operator__new_html_a5ee50d6c74038806e57d12d1880ac520"><div class="ttname"><a href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">opendal_result_operator_new::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:357</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html"><div class="ttname"><a href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></div><div class="ttdoc">The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(),...</div><div class="ttdef"><b>Definition:</b> opendal.h:413</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html_a9bd6c401ef87b4b6456423fa11079b91"><div class="ttname"><a href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">opendal_result_operator_reader::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:421</div></div>
+<div class="ttc" id="astructopendal__result__operator__reader_html_a9ed8dec94126ab5b74dc63a87ca5839d"><div class="ttname"><a href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">opendal_result_operator_reader::reader</a></div><div class="ttdeci">struct opendal_reader * reader</div><div class="ttdef"><b>Definition:</b> opendal.h:417</div></div>
+<div class="ttc" id="astructopendal__result__read_html"><div class="ttname"><a href="structopendal__result__read.html">opendal_result_read</a></div><div class="ttdoc">The result type returned by opendal's read operation.</div><div class="ttdef"><b>Definition:</b> opendal.h:386</div></div>
+<div class="ttc" id="astructopendal__result__read_html_a6cd0e4e83ed4509856de0d1e6b83e2f2"><div class="ttname"><a href="structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2">opendal_result_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:394</div></div>
+<div class="ttc" id="astructopendal__result__read_html_ad8ca467bcbe6d1768e15fcf64fe78e9f"><div class="ttname"><a href="structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f">opendal_result_read::data</a></div><div class="ttdeci">struct opendal_bytes * data</div><div class="ttdef"><b>Definition:</b> opendal.h:390</div></div>
+<div class="ttc" id="astructopendal__result__reader__read_html"><div class="ttname"><a href="structopendal__result__reader__read.html">opendal_result_reader_read</a></div><div class="ttdoc">The is the result type returned by opendal_reader_read(). The result type contains a size field,...</div><div class="ttdef"><b>Definition:</b> opendal.h:486</div></div>
+<div class="ttc" id="astructopendal__result__reader__read_html_a1279e7b3cb6beaf63da0f6ee9370ba36"><div class="ttname"><a href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">opendal_result_reader_read::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:494</div></div>
+<div class="ttc" id="astructopendal__result__reader__read_html_a5a513cafeacebef13f74fd50c30e9810"><div class="ttname"><a href="structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810">opendal_result_reader_read::size</a></div><div class="ttdeci">uintptr_t size</div><div class="ttdef"><b>Definition:</b> opendal.h:490</div></div>
+<div class="ttc" id="astructopendal__result__stat_html"><div class="ttname"><a href="structopendal__result__stat.html">opendal_result_stat</a></div><div class="ttdoc">The result type returned by opendal_operator_stat().</div><div class="ttdef"><b>Definition:</b> opendal.h:452</div></div>
+<div class="ttc" id="astructopendal__result__stat_html_a1d4d484d7bf50bc8e5d65dea5f6f2425"><div class="ttname"><a href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">opendal_result_stat::meta</a></div><div class="ttdeci">struct opendal_metadata * meta</div><div class="ttdef"><b>Definition:</b> opendal.h:456</div></div>
+<div class="ttc" id="astructopendal__result__stat_html_a657eee3bfdf805036f169d94ee70dce9"><div class="ttname"><a href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">opendal_result_stat::error</a></div><div class="ttdeci">struct opendal_error * error</div><div class="ttdef"><b>Definition:</b> opendal.h:460</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/search/all_3.js b/docs/c/search/all_3.js
index 036672d8b..1ec362bab 100644
--- a/docs/c/search/all_3.js
+++ b/docs/c/search/all_3.js
@@ -1,5 +1,6 @@
 var searchData=
 [
-  ['entry_4',['Entry',['../opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8',1,'opendal.h']]],
-  ['error_5',['error',['../structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520',1,'opendal_result_operator_new::error()'],['../structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2',1,'opendal_result_read::error()'],['../structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2',1,'opendal_result_reader::error()'],['../structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c',1,'opendal_result_is_exist::error()'],['../structo [...]
+  ['entry_4',['entry',['../structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea',1,'opendal_result_lister_next']]],
+  ['entry_5',['Entry',['../opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8',1,'opendal.h']]],
+  ['error_6',['error',['../structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10',1,'opendal_result_lister_next::error()'],['../structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520',1,'opendal_result_operator_new::error()'],['../structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2',1,'opendal_result_read::error()'],['../structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91',1,'opendal_result_operator_reade [...]
 ];
diff --git a/docs/c/search/all_4.js b/docs/c/search/all_4.js
index e6b5ae024..5dfa16c8f 100644
--- a/docs/c/search/all_4.js
+++ b/docs/c/search/all_4.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['inner_6',['inner',['../structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645',1,'opendal_operator_options::inner()'],['../structopendal__reader.html#a25070270d288274fc2fcb1e38d389718',1,'opendal_reader::inner()'],['../structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404',1,'opendal_metadata::inner()'],['../structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f',1,'opendal_blocking_lister::inner()'],['../structopendal__list__entry.html#a23ad [...]
-  ['is_5fexist_7',['is_exist',['../structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295',1,'opendal_result_is_exist']]]
+  ['inner_7',['inner',['../structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597',1,'opendal_entry::inner()'],['../structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295',1,'opendal_lister::inner()'],['../structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404',1,'opendal_metadata::inner()'],['../structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645',1,'opendal_operator_options::inner()'],['../structopendal__reader.html#a25070270d288274fc2fcb1e38d3897 [...]
+  ['is_5fexist_8',['is_exist',['../structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295',1,'opendal_result_is_exist']]]
 ];
diff --git a/docs/c/search/all_5.js b/docs/c/search/all_5.js
index cb6ea6a13..41b1e9e2d 100644
--- a/docs/c/search/all_5.js
+++ b/docs/c/search/all_5.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['len_8',['len',['../structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851',1,'opendal_bytes']]],
-  ['lister_9',['lister',['../structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced',1,'opendal_result_list']]]
+  ['len_9',['len',['../structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851',1,'opendal_bytes']]],
+  ['lister_10',['lister',['../structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a',1,'opendal_result_list']]]
 ];
diff --git a/docs/c/search/all_6.js b/docs/c/search/all_6.js
index efb0c800b..bf96c833c 100644
--- a/docs/c/search/all_6.js
+++ b/docs/c/search/all_6.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['message_10',['message',['../structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4',1,'opendal_error']]],
-  ['meta_11',['meta',['../structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425',1,'opendal_result_stat']]]
+  ['message_11',['message',['../structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4',1,'opendal_error']]],
+  ['meta_12',['meta',['../structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425',1,'opendal_result_stat']]]
 ];
diff --git a/docs/c/search/all_7.js b/docs/c/search/all_7.js
index 77bdf38c0..c41595963 100644
--- a/docs/c/search/all_7.js
+++ b/docs/c/search/all_7.js
@@ -1,57 +1,58 @@
 var searchData=
 [
-  ['opendal_20c_20binding_20_28wip_29_12',['OpenDAL C Binding (WIP)',['../index.html',1,'']]],
-  ['opendal_2eh_13',['opendal.h',['../opendal_8h.html',1,'']]],
-  ['opendal_5falready_5fexists_14',['OPENDAL_ALREADY_EXISTS',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a8f0a65852b0b02a0a3c73f7382607d67',1,'opendal.h']]],
-  ['opendal_5fblocking_5flister_15',['opendal_blocking_lister',['../structopendal__blocking__lister.html',1,'opendal_blocking_lister'],['../opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44',1,'opendal_blocking_lister():&#160;opendal.h']]],
-  ['opendal_5fbytes_16',['opendal_bytes',['../structopendal__bytes.html',1,'opendal_bytes'],['../opendal_8h.html#a4117acdec0983ce12962491960847381',1,'opendal_bytes():&#160;opendal.h']]],
-  ['opendal_5fbytes_5ffree_17',['opendal_bytes_free',['../opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea',1,'opendal.h']]],
-  ['opendal_5fcode_18',['opendal_code',['../opendal_8h.html#a333cc71b98ca4ce17183c1b4263ddd1f',1,'opendal_code():&#160;opendal.h'],['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2',1,'opendal_code():&#160;opendal.h']]],
-  ['opendal_5fconfig_5finvalid_19',['OPENDAL_CONFIG_INVALID',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5',1,'opendal.h']]],
-  ['opendal_5ferror_20',['opendal_error',['../structopendal__error.html',1,'opendal_error'],['../opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc',1,'opendal_error():&#160;opendal.h']]],
-  ['opendal_5ferror_5ffree_21',['opendal_error_free',['../opendal_8h.html#a4a8d92df21f5473762677afd9af5f714',1,'opendal.h']]],
-  ['opendal_5fis_5fa_5fdirectory_22',['OPENDAL_IS_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a74508dd984ae3f13a700a8952ca03361',1,'opendal.h']]],
-  ['opendal_5fis_5fsame_5ffile_23',['OPENDAL_IS_SAME_FILE',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2aa2ade9f6ea9d1ad5a6f328a73217e536',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_24',['opendal_list_entry',['../opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33',1,'opendal_list_entry():&#160;opendal.h'],['../structopendal__list__entry.html',1,'opendal_list_entry']]],
-  ['opendal_5flist_5fentry_5ffree_25',['opendal_list_entry_free',['../opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_5fname_26',['opendal_list_entry_name',['../opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_5fpath_27',['opendal_list_entry_path',['../opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0',1,'opendal.h']]],
-  ['opendal_5flister_5ffree_28',['opendal_lister_free',['../opendal_8h.html#a25e2bd426163636455d6ba2e82547db7',1,'opendal.h']]],
-  ['opendal_5flister_5fnext_29',['opendal_lister_next',['../opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c',1,'opendal.h']]],
-  ['opendal_5fmetadata_30',['opendal_metadata',['../structopendal__metadata.html',1,'opendal_metadata'],['../opendal_8h.html#af0acf7956915881ccd1f0874f309c682',1,'opendal_metadata():&#160;opendal.h']]],
-  ['opendal_5fmetadata_5fcontent_5flength_31',['opendal_metadata_content_length',['../opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235',1,'opendal.h']]],
-  ['opendal_5fmetadata_5ffree_32',['opendal_metadata_free',['../opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5',1,'opendal.h']]],
-  ['opendal_5fmetadata_5fis_5fdir_33',['opendal_metadata_is_dir',['../opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409',1,'opendal.h']]],
-  ['opendal_5fmetadata_5fis_5ffile_34',['opendal_metadata_is_file',['../opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad',1,'opendal.h']]],
-  ['opendal_5fnot_5fa_5fdirectory_35',['OPENDAL_NOT_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ad8f1a6410599cec2a213685324560555',1,'opendal.h']]],
-  ['opendal_5fnot_5ffound_36',['OPENDAL_NOT_FOUND',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a549e63735c8104369fd9230b441ebbf1',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fdelete_37',['opendal_operator_blocking_delete',['../opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5flist_38',['opendal_operator_blocking_list',['../opendal_8h.html#a844f3a690078c34af557ae83e1f1513f',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fread_39',['opendal_operator_blocking_read',['../opendal_8h.html#ae8fc63885af34e53afbb075dfed39732',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5freader_40',['opendal_operator_blocking_reader',['../opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fwrite_41',['opendal_operator_blocking_write',['../opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9',1,'opendal.h']]],
-  ['opendal_5foperator_5ffree_42',['opendal_operator_free',['../opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def',1,'opendal.h']]],
-  ['opendal_5foperator_5fis_5fexist_43',['opendal_operator_is_exist',['../opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80',1,'opendal.h']]],
+  ['op_13',['op',['../structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6',1,'opendal_result_operator_new']]],
+  ['opendal_20c_20binding_20_28wip_29_14',['OpenDAL C Binding (WIP)',['../index.html',1,'']]],
+  ['opendal_2eh_15',['opendal.h',['../opendal_8h.html',1,'']]],
+  ['opendal_5falready_5fexists_16',['OPENDAL_ALREADY_EXISTS',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a8f0a65852b0b02a0a3c73f7382607d67',1,'opendal.h']]],
+  ['opendal_5fbytes_17',['opendal_bytes',['../structopendal__bytes.html',1,'opendal_bytes'],['../opendal_8h.html#a4117acdec0983ce12962491960847381',1,'opendal_bytes():&#160;opendal.h']]],
+  ['opendal_5fbytes_5ffree_18',['opendal_bytes_free',['../opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a',1,'opendal.h']]],
+  ['opendal_5fcode_19',['opendal_code',['../opendal_8h.html#a333cc71b98ca4ce17183c1b4263ddd1f',1,'opendal_code():&#160;opendal.h'],['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2',1,'opendal_code():&#160;opendal.h']]],
+  ['opendal_5fconfig_5finvalid_20',['OPENDAL_CONFIG_INVALID',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5',1,'opendal.h']]],
+  ['opendal_5fentry_21',['opendal_entry',['../structopendal__entry.html',1,'opendal_entry'],['../opendal_8h.html#af70798853b9dbd5712006b5f9de831c9',1,'opendal_entry():&#160;opendal.h']]],
+  ['opendal_5fentry_5ffree_22',['opendal_entry_free',['../opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf',1,'opendal.h']]],
+  ['opendal_5fentry_5fname_23',['opendal_entry_name',['../opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5',1,'opendal.h']]],
+  ['opendal_5fentry_5fpath_24',['opendal_entry_path',['../opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9',1,'opendal.h']]],
+  ['opendal_5ferror_25',['opendal_error',['../structopendal__error.html',1,'opendal_error'],['../opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc',1,'opendal_error():&#160;opendal.h']]],
+  ['opendal_5ferror_5ffree_26',['opendal_error_free',['../opendal_8h.html#a4a8d92df21f5473762677afd9af5f714',1,'opendal.h']]],
+  ['opendal_5fis_5fa_5fdirectory_27',['OPENDAL_IS_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a74508dd984ae3f13a700a8952ca03361',1,'opendal.h']]],
+  ['opendal_5fis_5fsame_5ffile_28',['OPENDAL_IS_SAME_FILE',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2aa2ade9f6ea9d1ad5a6f328a73217e536',1,'opendal.h']]],
+  ['opendal_5flister_29',['opendal_lister',['../opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68',1,'opendal_lister():&#160;opendal.h'],['../structopendal__lister.html',1,'opendal_lister']]],
+  ['opendal_5flister_5ffree_30',['opendal_lister_free',['../opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3',1,'opendal.h']]],
+  ['opendal_5flister_5fnext_31',['opendal_lister_next',['../opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d',1,'opendal.h']]],
+  ['opendal_5fmetadata_32',['opendal_metadata',['../structopendal__metadata.html',1,'opendal_metadata'],['../opendal_8h.html#af0acf7956915881ccd1f0874f309c682',1,'opendal_metadata():&#160;opendal.h']]],
+  ['opendal_5fmetadata_5fcontent_5flength_33',['opendal_metadata_content_length',['../opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235',1,'opendal.h']]],
+  ['opendal_5fmetadata_5ffree_34',['opendal_metadata_free',['../opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5',1,'opendal.h']]],
+  ['opendal_5fmetadata_5fis_5fdir_35',['opendal_metadata_is_dir',['../opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409',1,'opendal.h']]],
+  ['opendal_5fmetadata_5fis_5ffile_36',['opendal_metadata_is_file',['../opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad',1,'opendal.h']]],
+  ['opendal_5fnot_5fa_5fdirectory_37',['OPENDAL_NOT_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ad8f1a6410599cec2a213685324560555',1,'opendal.h']]],
+  ['opendal_5fnot_5ffound_38',['OPENDAL_NOT_FOUND',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a549e63735c8104369fd9230b441ebbf1',1,'opendal.h']]],
+  ['opendal_5foperator_39',['opendal_operator',['../opendal_8h.html#a07642e228c04606083f49cbe02a626ca',1,'opendal_operator():&#160;opendal.h'],['../structopendal__operator.html',1,'opendal_operator']]],
+  ['opendal_5foperator_5fdelete_40',['opendal_operator_delete',['../opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc',1,'opendal.h']]],
+  ['opendal_5foperator_5ffree_41',['opendal_operator_free',['../opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855',1,'opendal.h']]],
+  ['opendal_5foperator_5fis_5fexist_42',['opendal_operator_is_exist',['../opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46',1,'opendal.h']]],
+  ['opendal_5foperator_5flist_43',['opendal_operator_list',['../opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c',1,'opendal.h']]],
   ['opendal_5foperator_5fnew_44',['opendal_operator_new',['../opendal_8h.html#a3b32f655689a122d2b6feff169fac442',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_45',['opendal_operator_options',['../structopendal__operator__options.html',1,'opendal_operator_options'],['../opendal_8h.html#a76d4f0935961d0e49befd7719728fd16',1,'opendal_operator_options():&#160;opendal.h']]],
   ['opendal_5foperator_5foptions_5ffree_46',['opendal_operator_options_free',['../opendal_8h.html#a1d65b173b087b2abca126de2e951b412',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_5fnew_47',['opendal_operator_options_new',['../opendal_8h.html#a67b1457f2b1258551552dc383840f288',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_5fset_48',['opendal_operator_options_set',['../opendal_8h.html#af408af922875eb26c25cef4ddfdede02',1,'opendal.h']]],
-  ['opendal_5foperator_5fptr_49',['opendal_operator_ptr',['../structopendal__operator__ptr.html',1,'opendal_operator_ptr'],['../opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191',1,'opendal_operator_ptr():&#160;opendal.h']]],
-  ['opendal_5foperator_5fstat_50',['opendal_operator_stat',['../opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3',1,'opendal.h']]],
-  ['opendal_5fpermission_5fdenied_51',['OPENDAL_PERMISSION_DENIED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7d8ddf01b6fc55e87b7a89e04e5b3681',1,'opendal.h']]],
-  ['opendal_5frate_5flimited_52',['OPENDAL_RATE_LIMITED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ae78f8c2cde8d2a3888e12e3894ae5d71',1,'opendal.h']]],
-  ['opendal_5freader_53',['opendal_reader',['../structopendal__reader.html',1,'opendal_reader'],['../opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100',1,'opendal_reader():&#160;opendal.h']]],
-  ['opendal_5freader_5ffree_54',['opendal_reader_free',['../opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472',1,'opendal.h']]],
-  ['opendal_5freader_5fread_55',['opendal_reader_read',['../opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4',1,'opendal.h']]],
-  ['opendal_5fresult_5fis_5fexist_56',['opendal_result_is_exist',['../opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf',1,'opendal_result_is_exist():&#160;opendal.h'],['../structopendal__result__is__exist.html',1,'opendal_result_is_exist']]],
-  ['opendal_5fresult_5flist_57',['opendal_result_list',['../structopendal__result__list.html',1,'opendal_result_list'],['../opendal_8h.html#a606c20c489cac143082dc3870102f43a',1,'opendal_result_list():&#160;opendal.h']]],
-  ['opendal_5fresult_5foperator_5fnew_58',['opendal_result_operator_new',['../structopendal__result__operator__new.html',1,'opendal_result_operator_new'],['../opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5',1,'opendal_result_operator_new():&#160;opendal.h']]],
-  ['opendal_5fresult_5fread_59',['opendal_result_read',['../structopendal__result__read.html',1,'opendal_result_read'],['../opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d',1,'opendal_result_read():&#160;opendal.h']]],
-  ['opendal_5fresult_5freader_60',['opendal_result_reader',['../structopendal__result__reader.html',1,'opendal_result_reader'],['../opendal_8h.html#a7712a472329fe04955dd86a213c78b37',1,'opendal_result_reader():&#160;opendal.h']]],
-  ['opendal_5fresult_5freader_5fread_61',['opendal_result_reader_read',['../structopendal__result__reader__read.html',1,'opendal_result_reader_read'],['../opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff',1,'opendal_result_reader_read():&#160;opendal.h']]],
-  ['opendal_5fresult_5fstat_62',['opendal_result_stat',['../structopendal__result__stat.html',1,'opendal_result_stat'],['../opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0',1,'opendal_result_stat():&#160;opendal.h']]],
-  ['opendal_5funexpected_63',['OPENDAL_UNEXPECTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7b638bc0d885a22a64305563add5c535',1,'opendal.h']]],
-  ['opendal_5funsupported_64',['OPENDAL_UNSUPPORTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b',1,'opendal.h']]],
-  ['operator_5fptr_65',['operator_ptr',['../structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891',1,'opendal_result_operator_new']]]
+  ['opendal_5foperator_5fread_49',['opendal_operator_read',['../opendal_8h.html#ab1419180b377316e27416b742bcc059f',1,'opendal.h']]],
+  ['opendal_5foperator_5freader_50',['opendal_operator_reader',['../opendal_8h.html#aca8d6d56223c55277146afe9ca226944',1,'opendal.h']]],
+  ['opendal_5foperator_5fstat_51',['opendal_operator_stat',['../opendal_8h.html#a8d6a3d830761b215c3d03960b6153582',1,'opendal.h']]],
+  ['opendal_5foperator_5fwrite_52',['opendal_operator_write',['../opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c',1,'opendal.h']]],
+  ['opendal_5fpermission_5fdenied_53',['OPENDAL_PERMISSION_DENIED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7d8ddf01b6fc55e87b7a89e04e5b3681',1,'opendal.h']]],
+  ['opendal_5frate_5flimited_54',['OPENDAL_RATE_LIMITED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ae78f8c2cde8d2a3888e12e3894ae5d71',1,'opendal.h']]],
+  ['opendal_5freader_55',['opendal_reader',['../opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100',1,'opendal_reader():&#160;opendal.h'],['../structopendal__reader.html',1,'opendal_reader']]],
+  ['opendal_5freader_5ffree_56',['opendal_reader_free',['../opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472',1,'opendal.h']]],
+  ['opendal_5freader_5fread_57',['opendal_reader_read',['../opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e',1,'opendal.h']]],
+  ['opendal_5fresult_5fis_5fexist_58',['opendal_result_is_exist',['../opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf',1,'opendal_result_is_exist():&#160;opendal.h'],['../structopendal__result__is__exist.html',1,'opendal_result_is_exist']]],
+  ['opendal_5fresult_5flist_59',['opendal_result_list',['../opendal_8h.html#a606c20c489cac143082dc3870102f43a',1,'opendal_result_list():&#160;opendal.h'],['../structopendal__result__list.html',1,'opendal_result_list']]],
+  ['opendal_5fresult_5flister_5fnext_60',['opendal_result_lister_next',['../structopendal__result__lister__next.html',1,'opendal_result_lister_next'],['../opendal_8h.html#a590096ddcd0245b474880bae76c2137d',1,'opendal_result_lister_next():&#160;opendal.h']]],
+  ['opendal_5fresult_5foperator_5fnew_61',['opendal_result_operator_new',['../structopendal__result__operator__new.html',1,'opendal_result_operator_new'],['../opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5',1,'opendal_result_operator_new():&#160;opendal.h']]],
+  ['opendal_5fresult_5foperator_5freader_62',['opendal_result_operator_reader',['../opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8',1,'opendal_result_operator_reader():&#160;opendal.h'],['../structopendal__result__operator__reader.html',1,'opendal_result_operator_reader']]],
+  ['opendal_5fresult_5fread_63',['opendal_result_read',['../opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d',1,'opendal_result_read():&#160;opendal.h'],['../structopendal__result__read.html',1,'opendal_result_read']]],
+  ['opendal_5fresult_5freader_5fread_64',['opendal_result_reader_read',['../opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff',1,'opendal_result_reader_read():&#160;opendal.h'],['../structopendal__result__reader__read.html',1,'opendal_result_reader_read']]],
+  ['opendal_5fresult_5fstat_65',['opendal_result_stat',['../structopendal__result__stat.html',1,'opendal_result_stat'],['../opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0',1,'opendal_result_stat():&#160;opendal.h']]],
+  ['opendal_5funexpected_66',['OPENDAL_UNEXPECTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7b638bc0d885a22a64305563add5c535',1,'opendal.h']]],
+  ['opendal_5funsupported_67',['OPENDAL_UNSUPPORTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/all_8.js b/docs/c/search/all_8.js
index 135840b27..f6b3d7050 100644
--- a/docs/c/search/all_8.js
+++ b/docs/c/search/all_8.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['ptr_66',['ptr',['../structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b',1,'opendal_operator_ptr']]]
+  ['ptr_68',['ptr',['../structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe',1,'opendal_operator']]]
 ];
diff --git a/docs/c/search/all_9.js b/docs/c/search/all_9.js
index 1845a365d..83a36c07b 100644
--- a/docs/c/search/all_9.js
+++ b/docs/c/search/all_9.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['reader_67',['reader',['../structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d',1,'opendal_result_reader']]],
-  ['readme_2emd_68',['README.md',['../README_8md.html',1,'']]]
+  ['reader_69',['reader',['../structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d',1,'opendal_result_operator_reader']]],
+  ['readme_2emd_70',['README.md',['../README_8md.html',1,'']]]
 ];
diff --git a/docs/c/search/all_a.js b/docs/c/search/all_a.js
index 91c9fdf5b..aed187d30 100644
--- a/docs/c/search/all_a.js
+++ b/docs/c/search/all_a.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['size_69',['size',['../structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810',1,'opendal_result_reader_read']]]
+  ['size_71',['size',['../structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810',1,'opendal_result_reader_read']]]
 ];
diff --git a/docs/c/search/all_b.js b/docs/c/search/all_b.js
index 08b84cdcc..d8c5f659c 100644
--- a/docs/c/search/all_b.js
+++ b/docs/c/search/all_b.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['todo_20list_70',['Todo List',['../todo.html',1,'']]]
+  ['todo_20list_72',['Todo List',['../todo.html',1,'']]]
 ];
diff --git a/docs/c/search/classes_0.js b/docs/c/search/classes_0.js
index c617368b9..d772b9841 100644
--- a/docs/c/search/classes_0.js
+++ b/docs/c/search/classes_0.js
@@ -1,18 +1,19 @@
 var searchData=
 [
-  ['opendal_5fblocking_5flister_71',['opendal_blocking_lister',['../structopendal__blocking__lister.html',1,'']]],
-  ['opendal_5fbytes_72',['opendal_bytes',['../structopendal__bytes.html',1,'']]],
-  ['opendal_5ferror_73',['opendal_error',['../structopendal__error.html',1,'']]],
-  ['opendal_5flist_5fentry_74',['opendal_list_entry',['../structopendal__list__entry.html',1,'']]],
-  ['opendal_5fmetadata_75',['opendal_metadata',['../structopendal__metadata.html',1,'']]],
-  ['opendal_5foperator_5foptions_76',['opendal_operator_options',['../structopendal__operator__options.html',1,'']]],
-  ['opendal_5foperator_5fptr_77',['opendal_operator_ptr',['../structopendal__operator__ptr.html',1,'']]],
-  ['opendal_5freader_78',['opendal_reader',['../structopendal__reader.html',1,'']]],
-  ['opendal_5fresult_5fis_5fexist_79',['opendal_result_is_exist',['../structopendal__result__is__exist.html',1,'']]],
-  ['opendal_5fresult_5flist_80',['opendal_result_list',['../structopendal__result__list.html',1,'']]],
-  ['opendal_5fresult_5foperator_5fnew_81',['opendal_result_operator_new',['../structopendal__result__operator__new.html',1,'']]],
-  ['opendal_5fresult_5fread_82',['opendal_result_read',['../structopendal__result__read.html',1,'']]],
-  ['opendal_5fresult_5freader_83',['opendal_result_reader',['../structopendal__result__reader.html',1,'']]],
-  ['opendal_5fresult_5freader_5fread_84',['opendal_result_reader_read',['../structopendal__result__reader__read.html',1,'']]],
-  ['opendal_5fresult_5fstat_85',['opendal_result_stat',['../structopendal__result__stat.html',1,'']]]
+  ['opendal_5fbytes_73',['opendal_bytes',['../structopendal__bytes.html',1,'']]],
+  ['opendal_5fentry_74',['opendal_entry',['../structopendal__entry.html',1,'']]],
+  ['opendal_5ferror_75',['opendal_error',['../structopendal__error.html',1,'']]],
+  ['opendal_5flister_76',['opendal_lister',['../structopendal__lister.html',1,'']]],
+  ['opendal_5fmetadata_77',['opendal_metadata',['../structopendal__metadata.html',1,'']]],
+  ['opendal_5foperator_78',['opendal_operator',['../structopendal__operator.html',1,'']]],
+  ['opendal_5foperator_5foptions_79',['opendal_operator_options',['../structopendal__operator__options.html',1,'']]],
+  ['opendal_5freader_80',['opendal_reader',['../structopendal__reader.html',1,'']]],
+  ['opendal_5fresult_5fis_5fexist_81',['opendal_result_is_exist',['../structopendal__result__is__exist.html',1,'']]],
+  ['opendal_5fresult_5flist_82',['opendal_result_list',['../structopendal__result__list.html',1,'']]],
+  ['opendal_5fresult_5flister_5fnext_83',['opendal_result_lister_next',['../structopendal__result__lister__next.html',1,'']]],
+  ['opendal_5fresult_5foperator_5fnew_84',['opendal_result_operator_new',['../structopendal__result__operator__new.html',1,'']]],
+  ['opendal_5fresult_5foperator_5freader_85',['opendal_result_operator_reader',['../structopendal__result__operator__reader.html',1,'']]],
+  ['opendal_5fresult_5fread_86',['opendal_result_read',['../structopendal__result__read.html',1,'']]],
+  ['opendal_5fresult_5freader_5fread_87',['opendal_result_reader_read',['../structopendal__result__reader__read.html',1,'']]],
+  ['opendal_5fresult_5fstat_88',['opendal_result_stat',['../structopendal__result__stat.html',1,'']]]
 ];
diff --git a/docs/c/search/enums_0.js b/docs/c/search/enums_0.js
index f6e634a35..51485b8ab 100644
--- a/docs/c/search/enums_0.js
+++ b/docs/c/search/enums_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['opendal_5fcode_145',['opendal_code',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2',1,'opendal.h']]]
+  ['opendal_5fcode_150',['opendal_code',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/enumvalues_0.js b/docs/c/search/enumvalues_0.js
index e6e6c6352..a37220211 100644
--- a/docs/c/search/enumvalues_0.js
+++ b/docs/c/search/enumvalues_0.js
@@ -1,13 +1,13 @@
 var searchData=
 [
-  ['opendal_5falready_5fexists_146',['OPENDAL_ALREADY_EXISTS',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a8f0a65852b0b02a0a3c73f7382607d67',1,'opendal.h']]],
-  ['opendal_5fconfig_5finvalid_147',['OPENDAL_CONFIG_INVALID',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5',1,'opendal.h']]],
-  ['opendal_5fis_5fa_5fdirectory_148',['OPENDAL_IS_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a74508dd984ae3f13a700a8952ca03361',1,'opendal.h']]],
-  ['opendal_5fis_5fsame_5ffile_149',['OPENDAL_IS_SAME_FILE',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2aa2ade9f6ea9d1ad5a6f328a73217e536',1,'opendal.h']]],
-  ['opendal_5fnot_5fa_5fdirectory_150',['OPENDAL_NOT_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ad8f1a6410599cec2a213685324560555',1,'opendal.h']]],
-  ['opendal_5fnot_5ffound_151',['OPENDAL_NOT_FOUND',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a549e63735c8104369fd9230b441ebbf1',1,'opendal.h']]],
-  ['opendal_5fpermission_5fdenied_152',['OPENDAL_PERMISSION_DENIED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7d8ddf01b6fc55e87b7a89e04e5b3681',1,'opendal.h']]],
-  ['opendal_5frate_5flimited_153',['OPENDAL_RATE_LIMITED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ae78f8c2cde8d2a3888e12e3894ae5d71',1,'opendal.h']]],
-  ['opendal_5funexpected_154',['OPENDAL_UNEXPECTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7b638bc0d885a22a64305563add5c535',1,'opendal.h']]],
-  ['opendal_5funsupported_155',['OPENDAL_UNSUPPORTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b',1,'opendal.h']]]
+  ['opendal_5falready_5fexists_151',['OPENDAL_ALREADY_EXISTS',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a8f0a65852b0b02a0a3c73f7382607d67',1,'opendal.h']]],
+  ['opendal_5fconfig_5finvalid_152',['OPENDAL_CONFIG_INVALID',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2af0fb62173ba6973b328c3342a95f53b5',1,'opendal.h']]],
+  ['opendal_5fis_5fa_5fdirectory_153',['OPENDAL_IS_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a74508dd984ae3f13a700a8952ca03361',1,'opendal.h']]],
+  ['opendal_5fis_5fsame_5ffile_154',['OPENDAL_IS_SAME_FILE',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2aa2ade9f6ea9d1ad5a6f328a73217e536',1,'opendal.h']]],
+  ['opendal_5fnot_5fa_5fdirectory_155',['OPENDAL_NOT_A_DIRECTORY',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ad8f1a6410599cec2a213685324560555',1,'opendal.h']]],
+  ['opendal_5fnot_5ffound_156',['OPENDAL_NOT_FOUND',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a549e63735c8104369fd9230b441ebbf1',1,'opendal.h']]],
+  ['opendal_5fpermission_5fdenied_157',['OPENDAL_PERMISSION_DENIED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7d8ddf01b6fc55e87b7a89e04e5b3681',1,'opendal.h']]],
+  ['opendal_5frate_5flimited_158',['OPENDAL_RATE_LIMITED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2ae78f8c2cde8d2a3888e12e3894ae5d71',1,'opendal.h']]],
+  ['opendal_5funexpected_159',['OPENDAL_UNEXPECTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a7b638bc0d885a22a64305563add5c535',1,'opendal.h']]],
+  ['opendal_5funsupported_160',['OPENDAL_UNSUPPORTED',['../opendal_8h.html#a6715be152766e5b8f840ce10cf9442c2a0dba9d7c18383f0eabb4801319becb6b',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/files_0.js b/docs/c/search/files_0.js
index 178f2a9c2..61e846eda 100644
--- a/docs/c/search/files_0.js
+++ b/docs/c/search/files_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['opendal_2eh_86',['opendal.h',['../opendal_8h.html',1,'']]]
+  ['opendal_2eh_89',['opendal.h',['../opendal_8h.html',1,'']]]
 ];
diff --git a/docs/c/search/files_1.js b/docs/c/search/files_1.js
index e0810633e..7a1487725 100644
--- a/docs/c/search/files_1.js
+++ b/docs/c/search/files_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['readme_2emd_87',['README.md',['../README_8md.html',1,'']]]
+  ['readme_2emd_90',['README.md',['../README_8md.html',1,'']]]
 ];
diff --git a/docs/c/search/functions_0.js b/docs/c/search/functions_0.js
index e8b4b2eb8..b1022c024 100644
--- a/docs/c/search/functions_0.js
+++ b/docs/c/search/functions_0.js
@@ -1,28 +1,28 @@
 var searchData=
 [
-  ['opendal_5fbytes_5ffree_88',['opendal_bytes_free',['../opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea',1,'opendal.h']]],
-  ['opendal_5ferror_5ffree_89',['opendal_error_free',['../opendal_8h.html#a4a8d92df21f5473762677afd9af5f714',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_5ffree_90',['opendal_list_entry_free',['../opendal_8h.html#afa415362bf713d7c7869225a7f50f4a5',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_5fname_91',['opendal_list_entry_name',['../opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_5fpath_92',['opendal_list_entry_path',['../opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0',1,'opendal.h']]],
-  ['opendal_5flister_5ffree_93',['opendal_lister_free',['../opendal_8h.html#a25e2bd426163636455d6ba2e82547db7',1,'opendal.h']]],
-  ['opendal_5flister_5fnext_94',['opendal_lister_next',['../opendal_8h.html#a191fdabb43a5173bcb00fbb3f615070c',1,'opendal.h']]],
-  ['opendal_5fmetadata_5fcontent_5flength_95',['opendal_metadata_content_length',['../opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235',1,'opendal.h']]],
-  ['opendal_5fmetadata_5ffree_96',['opendal_metadata_free',['../opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5',1,'opendal.h']]],
-  ['opendal_5fmetadata_5fis_5fdir_97',['opendal_metadata_is_dir',['../opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409',1,'opendal.h']]],
-  ['opendal_5fmetadata_5fis_5ffile_98',['opendal_metadata_is_file',['../opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fdelete_99',['opendal_operator_blocking_delete',['../opendal_8h.html#a2ceeec46dfb498f1b6c9f1138d820977',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5flist_100',['opendal_operator_blocking_list',['../opendal_8h.html#a844f3a690078c34af557ae83e1f1513f',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fread_101',['opendal_operator_blocking_read',['../opendal_8h.html#ae8fc63885af34e53afbb075dfed39732',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5freader_102',['opendal_operator_blocking_reader',['../opendal_8h.html#a6285d4da17f5f873bc7a8edd7301fb81',1,'opendal.h']]],
-  ['opendal_5foperator_5fblocking_5fwrite_103',['opendal_operator_blocking_write',['../opendal_8h.html#a39c13941f26a7a1bbb0b52cbb7af61b9',1,'opendal.h']]],
-  ['opendal_5foperator_5ffree_104',['opendal_operator_free',['../opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def',1,'opendal.h']]],
-  ['opendal_5foperator_5fis_5fexist_105',['opendal_operator_is_exist',['../opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80',1,'opendal.h']]],
+  ['opendal_5fbytes_5ffree_91',['opendal_bytes_free',['../opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a',1,'opendal.h']]],
+  ['opendal_5fentry_5ffree_92',['opendal_entry_free',['../opendal_8h.html#af9238bb47d83d4b8d98981122f3824bf',1,'opendal.h']]],
+  ['opendal_5fentry_5fname_93',['opendal_entry_name',['../opendal_8h.html#aaa2109178eeaabde28bf8ba7e3110ed5',1,'opendal.h']]],
+  ['opendal_5fentry_5fpath_94',['opendal_entry_path',['../opendal_8h.html#ae712985c1de6bc0bb35c85b3cadefab9',1,'opendal.h']]],
+  ['opendal_5ferror_5ffree_95',['opendal_error_free',['../opendal_8h.html#a4a8d92df21f5473762677afd9af5f714',1,'opendal.h']]],
+  ['opendal_5flister_5ffree_96',['opendal_lister_free',['../opendal_8h.html#aee248f8b3afbb982fd0ad0baaa1159e3',1,'opendal.h']]],
+  ['opendal_5flister_5fnext_97',['opendal_lister_next',['../opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d',1,'opendal.h']]],
+  ['opendal_5fmetadata_5fcontent_5flength_98',['opendal_metadata_content_length',['../opendal_8h.html#ac8e9a9da0f04cb80848e7e42c3b90235',1,'opendal.h']]],
+  ['opendal_5fmetadata_5ffree_99',['opendal_metadata_free',['../opendal_8h.html#a8ff66345b1c45c66920ef0ddfef739c5',1,'opendal.h']]],
+  ['opendal_5fmetadata_5fis_5fdir_100',['opendal_metadata_is_dir',['../opendal_8h.html#ac8cb949fb37f83dfcbe78976eaa29409',1,'opendal.h']]],
+  ['opendal_5fmetadata_5fis_5ffile_101',['opendal_metadata_is_file',['../opendal_8h.html#a8900dddbbce980c3323cedd4f30c33ad',1,'opendal.h']]],
+  ['opendal_5foperator_5fdelete_102',['opendal_operator_delete',['../opendal_8h.html#ad21a0a160ee32cfa90e2e0ca1e1da0dc',1,'opendal.h']]],
+  ['opendal_5foperator_5ffree_103',['opendal_operator_free',['../opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855',1,'opendal.h']]],
+  ['opendal_5foperator_5fis_5fexist_104',['opendal_operator_is_exist',['../opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46',1,'opendal.h']]],
+  ['opendal_5foperator_5flist_105',['opendal_operator_list',['../opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c',1,'opendal.h']]],
   ['opendal_5foperator_5fnew_106',['opendal_operator_new',['../opendal_8h.html#a3b32f655689a122d2b6feff169fac442',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_5ffree_107',['opendal_operator_options_free',['../opendal_8h.html#a1d65b173b087b2abca126de2e951b412',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_5fnew_108',['opendal_operator_options_new',['../opendal_8h.html#a67b1457f2b1258551552dc383840f288',1,'opendal.h']]],
   ['opendal_5foperator_5foptions_5fset_109',['opendal_operator_options_set',['../opendal_8h.html#af408af922875eb26c25cef4ddfdede02',1,'opendal.h']]],
-  ['opendal_5foperator_5fstat_110',['opendal_operator_stat',['../opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3',1,'opendal.h']]],
-  ['opendal_5freader_5ffree_111',['opendal_reader_free',['../opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472',1,'opendal.h']]],
-  ['opendal_5freader_5fread_112',['opendal_reader_read',['../opendal_8h.html#ae10ef4bd17ee529fbfa8ab6ed9d0e3a4',1,'opendal.h']]]
+  ['opendal_5foperator_5fread_110',['opendal_operator_read',['../opendal_8h.html#ab1419180b377316e27416b742bcc059f',1,'opendal.h']]],
+  ['opendal_5foperator_5freader_111',['opendal_operator_reader',['../opendal_8h.html#aca8d6d56223c55277146afe9ca226944',1,'opendal.h']]],
+  ['opendal_5foperator_5fstat_112',['opendal_operator_stat',['../opendal_8h.html#a8d6a3d830761b215c3d03960b6153582',1,'opendal.h']]],
+  ['opendal_5foperator_5fwrite_113',['opendal_operator_write',['../opendal_8h.html#af8b6596a53263101e93b4d73e9eb928c',1,'opendal.h']]],
+  ['opendal_5freader_5ffree_114',['opendal_reader_free',['../opendal_8h.html#a7ef708841e8d9a0cebb64a983ef4d472',1,'opendal.h']]],
+  ['opendal_5freader_5fread_115',['opendal_reader_read',['../opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/pages_0.js b/docs/c/search/pages_0.js
index 2b43e5d8c..e273f1c14 100644
--- a/docs/c/search/pages_0.js
+++ b/docs/c/search/pages_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['opendal_20c_20binding_20_28wip_29_156',['OpenDAL C Binding (WIP)',['../index.html',1,'']]]
+  ['opendal_20c_20binding_20_28wip_29_161',['OpenDAL C Binding (WIP)',['../index.html',1,'']]]
 ];
diff --git a/docs/c/search/pages_1.js b/docs/c/search/pages_1.js
index e9ea0eb18..d48f5f8ae 100644
--- a/docs/c/search/pages_1.js
+++ b/docs/c/search/pages_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['todo_20list_157',['Todo List',['../todo.html',1,'']]]
+  ['todo_20list_162',['Todo List',['../todo.html',1,'']]]
 ];
diff --git a/docs/c/search/typedefs_0.js b/docs/c/search/typedefs_0.js
index 67d4ac5d2..6eb0ee43e 100644
--- a/docs/c/search/typedefs_0.js
+++ b/docs/c/search/typedefs_0.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['blockinglister_126',['BlockingLister',['../opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c',1,'opendal.h']]],
-  ['blockingreader_127',['BlockingReader',['../opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa',1,'opendal.h']]]
+  ['blockinglister_130',['BlockingLister',['../opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c',1,'opendal.h']]],
+  ['blockingreader_131',['BlockingReader',['../opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/typedefs_1.js b/docs/c/search/typedefs_1.js
index 9113e12af..99a34abc8 100644
--- a/docs/c/search/typedefs_1.js
+++ b/docs/c/search/typedefs_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['entry_128',['Entry',['../opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8',1,'opendal.h']]]
+  ['entry_132',['Entry',['../opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/typedefs_2.js b/docs/c/search/typedefs_2.js
index 221c60d0b..d4e1215cc 100644
--- a/docs/c/search/typedefs_2.js
+++ b/docs/c/search/typedefs_2.js
@@ -1,19 +1,20 @@
 var searchData=
 [
-  ['opendal_5fblocking_5flister_129',['opendal_blocking_lister',['../opendal_8h.html#a0b698963d36cbe398ba4bd4e61195e44',1,'opendal.h']]],
-  ['opendal_5fbytes_130',['opendal_bytes',['../opendal_8h.html#a4117acdec0983ce12962491960847381',1,'opendal.h']]],
-  ['opendal_5fcode_131',['opendal_code',['../opendal_8h.html#a333cc71b98ca4ce17183c1b4263ddd1f',1,'opendal.h']]],
-  ['opendal_5ferror_132',['opendal_error',['../opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc',1,'opendal.h']]],
-  ['opendal_5flist_5fentry_133',['opendal_list_entry',['../opendal_8h.html#a3d3583cbe9b8b5281ddbc3c4f78dca33',1,'opendal.h']]],
-  ['opendal_5fmetadata_134',['opendal_metadata',['../opendal_8h.html#af0acf7956915881ccd1f0874f309c682',1,'opendal.h']]],
-  ['opendal_5foperator_5foptions_135',['opendal_operator_options',['../opendal_8h.html#a76d4f0935961d0e49befd7719728fd16',1,'opendal.h']]],
-  ['opendal_5foperator_5fptr_136',['opendal_operator_ptr',['../opendal_8h.html#aae5d70fff7f6c87e07b8aa97e08e7191',1,'opendal.h']]],
-  ['opendal_5freader_137',['opendal_reader',['../opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100',1,'opendal.h']]],
-  ['opendal_5fresult_5fis_5fexist_138',['opendal_result_is_exist',['../opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf',1,'opendal.h']]],
-  ['opendal_5fresult_5flist_139',['opendal_result_list',['../opendal_8h.html#a606c20c489cac143082dc3870102f43a',1,'opendal.h']]],
-  ['opendal_5fresult_5foperator_5fnew_140',['opendal_result_operator_new',['../opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5',1,'opendal.h']]],
-  ['opendal_5fresult_5fread_141',['opendal_result_read',['../opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d',1,'opendal.h']]],
-  ['opendal_5fresult_5freader_142',['opendal_result_reader',['../opendal_8h.html#a7712a472329fe04955dd86a213c78b37',1,'opendal.h']]],
-  ['opendal_5fresult_5freader_5fread_143',['opendal_result_reader_read',['../opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff',1,'opendal.h']]],
-  ['opendal_5fresult_5fstat_144',['opendal_result_stat',['../opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0',1,'opendal.h']]]
+  ['opendal_5fbytes_133',['opendal_bytes',['../opendal_8h.html#a4117acdec0983ce12962491960847381',1,'opendal.h']]],
+  ['opendal_5fcode_134',['opendal_code',['../opendal_8h.html#a333cc71b98ca4ce17183c1b4263ddd1f',1,'opendal.h']]],
+  ['opendal_5fentry_135',['opendal_entry',['../opendal_8h.html#af70798853b9dbd5712006b5f9de831c9',1,'opendal.h']]],
+  ['opendal_5ferror_136',['opendal_error',['../opendal_8h.html#aba7687efb3e2f74800e93aee4eede6cc',1,'opendal.h']]],
+  ['opendal_5flister_137',['opendal_lister',['../opendal_8h.html#a581e3ab221c9b3ed82e0a2eb0ba37f68',1,'opendal.h']]],
+  ['opendal_5fmetadata_138',['opendal_metadata',['../opendal_8h.html#af0acf7956915881ccd1f0874f309c682',1,'opendal.h']]],
+  ['opendal_5foperator_139',['opendal_operator',['../opendal_8h.html#a07642e228c04606083f49cbe02a626ca',1,'opendal.h']]],
+  ['opendal_5foperator_5foptions_140',['opendal_operator_options',['../opendal_8h.html#a76d4f0935961d0e49befd7719728fd16',1,'opendal.h']]],
+  ['opendal_5freader_141',['opendal_reader',['../opendal_8h.html#a1f2a071a20d13757ba9cd5fde09c1100',1,'opendal.h']]],
+  ['opendal_5fresult_5fis_5fexist_142',['opendal_result_is_exist',['../opendal_8h.html#afbd6b36f0b084ca5fa251ebd5e317abf',1,'opendal.h']]],
+  ['opendal_5fresult_5flist_143',['opendal_result_list',['../opendal_8h.html#a606c20c489cac143082dc3870102f43a',1,'opendal.h']]],
+  ['opendal_5fresult_5flister_5fnext_144',['opendal_result_lister_next',['../opendal_8h.html#a590096ddcd0245b474880bae76c2137d',1,'opendal.h']]],
+  ['opendal_5fresult_5foperator_5fnew_145',['opendal_result_operator_new',['../opendal_8h.html#a1c2ddf5212cda7243c1138f55b9cdbc5',1,'opendal.h']]],
+  ['opendal_5fresult_5foperator_5freader_146',['opendal_result_operator_reader',['../opendal_8h.html#ae16e33ed9b7d8a3791f38a4fd5d877c8',1,'opendal.h']]],
+  ['opendal_5fresult_5fread_147',['opendal_result_read',['../opendal_8h.html#a68a7b0ae2b453dd9ba31ba0d572a4d5d',1,'opendal.h']]],
+  ['opendal_5fresult_5freader_5fread_148',['opendal_result_reader_read',['../opendal_8h.html#a1fc707d831b5e91edd1a34c0f08805ff',1,'opendal.h']]],
+  ['opendal_5fresult_5fstat_149',['opendal_result_stat',['../opendal_8h.html#a07f3f83aa0b650a09986291e47a8ddb0',1,'opendal.h']]]
 ];
diff --git a/docs/c/search/variables_0.js b/docs/c/search/variables_0.js
index 2dafc4df9..170a6aa73 100644
--- a/docs/c/search/variables_0.js
+++ b/docs/c/search/variables_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['code_113',['code',['../structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53',1,'opendal_error']]]
+  ['code_116',['code',['../structopendal__error.html#ac5ac4b16d49b767afdb29cf9b8115e53',1,'opendal_error']]]
 ];
diff --git a/docs/c/search/variables_1.js b/docs/c/search/variables_1.js
index baa2cb792..ed72ec8fe 100644
--- a/docs/c/search/variables_1.js
+++ b/docs/c/search/variables_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['data_114',['data',['../structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86',1,'opendal_bytes::data()'],['../structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f',1,'opendal_result_read::data()']]]
+  ['data_117',['data',['../structopendal__bytes.html#af7a7f99a262f8a3912f4d1cddb798c86',1,'opendal_bytes::data()'],['../structopendal__result__read.html#ad8ca467bcbe6d1768e15fcf64fe78e9f',1,'opendal_result_read::data()']]]
 ];
diff --git a/docs/c/search/variables_2.js b/docs/c/search/variables_2.js
index 3dcb4acd9..912595155 100644
--- a/docs/c/search/variables_2.js
+++ b/docs/c/search/variables_2.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['error_115',['error',['../structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520',1,'opendal_result_operator_new::error()'],['../structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2',1,'opendal_result_read::error()'],['../structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2',1,'opendal_result_reader::error()'],['../structopendal__result__is__exist.html#a6dc61502ab68ba25bcd56b09a215de6c',1,'opendal_result_is_exist::error()'],['../struc [...]
+  ['entry_118',['entry',['../structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea',1,'opendal_result_lister_next']]],
+  ['error_119',['error',['../structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10',1,'opendal_result_lister_next::error()'],['../structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520',1,'opendal_result_operator_new::error()'],['../structopendal__result__read.html#a6cd0e4e83ed4509856de0d1e6b83e2f2',1,'opendal_result_read::error()'],['../structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91',1,'opendal_result_operator_rea [...]
 ];
diff --git a/docs/c/search/variables_3.js b/docs/c/search/variables_3.js
index 40eb1f312..762075913 100644
--- a/docs/c/search/variables_3.js
+++ b/docs/c/search/variables_3.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['inner_116',['inner',['../structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645',1,'opendal_operator_options::inner()'],['../structopendal__reader.html#a25070270d288274fc2fcb1e38d389718',1,'opendal_reader::inner()'],['../structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404',1,'opendal_metadata::inner()'],['../structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f',1,'opendal_blocking_lister::inner()'],['../structopendal__list__entry.html#a23 [...]
-  ['is_5fexist_117',['is_exist',['../structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295',1,'opendal_result_is_exist']]]
+  ['inner_120',['inner',['../structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597',1,'opendal_entry::inner()'],['../structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295',1,'opendal_lister::inner()'],['../structopendal__metadata.html#afadf4e2bbfa3ee699d3c3d9c0a96a404',1,'opendal_metadata::inner()'],['../structopendal__operator__options.html#a0b4a1a2cd9074140b04836b822a04645',1,'opendal_operator_options::inner()'],['../structopendal__reader.html#a25070270d288274fc2fcb1e38d38 [...]
+  ['is_5fexist_121',['is_exist',['../structopendal__result__is__exist.html#abe145d68333ea78b438ef92a12d9d295',1,'opendal_result_is_exist']]]
 ];
diff --git a/docs/c/search/variables_4.js b/docs/c/search/variables_4.js
index b8a879d8a..33632c1e4 100644
--- a/docs/c/search/variables_4.js
+++ b/docs/c/search/variables_4.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['len_118',['len',['../structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851',1,'opendal_bytes']]],
-  ['lister_119',['lister',['../structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced',1,'opendal_result_list']]]
+  ['len_122',['len',['../structopendal__bytes.html#a16abed2ad211c076650d1ea81772b851',1,'opendal_bytes']]],
+  ['lister_123',['lister',['../structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a',1,'opendal_result_list']]]
 ];
diff --git a/docs/c/search/variables_5.js b/docs/c/search/variables_5.js
index 225fdb2b8..d69377221 100644
--- a/docs/c/search/variables_5.js
+++ b/docs/c/search/variables_5.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['message_120',['message',['../structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4',1,'opendal_error']]],
-  ['meta_121',['meta',['../structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425',1,'opendal_result_stat']]]
+  ['message_124',['message',['../structopendal__error.html#a64095efcf3588a1871b14eab3041d0d4',1,'opendal_error']]],
+  ['meta_125',['meta',['../structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425',1,'opendal_result_stat']]]
 ];
diff --git a/docs/c/search/variables_6.js b/docs/c/search/variables_6.js
index 5a1a01655..f6c1be811 100644
--- a/docs/c/search/variables_6.js
+++ b/docs/c/search/variables_6.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['operator_5fptr_122',['operator_ptr',['../structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891',1,'opendal_result_operator_new']]]
+  ['op_126',['op',['../structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6',1,'opendal_result_operator_new']]]
 ];
diff --git a/docs/c/search/variables_7.js b/docs/c/search/variables_7.js
index b598e6eda..ab9f92d0d 100644
--- a/docs/c/search/variables_7.js
+++ b/docs/c/search/variables_7.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['ptr_123',['ptr',['../structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b',1,'opendal_operator_ptr']]]
+  ['ptr_127',['ptr',['../structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe',1,'opendal_operator']]]
 ];
diff --git a/docs/c/search/variables_8.js b/docs/c/search/variables_8.js
index 5b38e62a4..0c146ff23 100644
--- a/docs/c/search/variables_8.js
+++ b/docs/c/search/variables_8.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['reader_124',['reader',['../structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d',1,'opendal_result_reader']]]
+  ['reader_128',['reader',['../structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d',1,'opendal_result_operator_reader']]]
 ];
diff --git a/docs/c/search/variables_9.js b/docs/c/search/variables_9.js
index e79e8a7e8..9a1224752 100644
--- a/docs/c/search/variables_9.js
+++ b/docs/c/search/variables_9.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['size_125',['size',['../structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810',1,'opendal_result_reader_read']]]
+  ['size_129',['size',['../structopendal__result__reader__read.html#a5a513cafeacebef13f74fd50c30e9810',1,'opendal_result_reader_read']]]
 ];
diff --git a/docs/c/structopendal__bytes.html b/docs/c/structopendal__bytes.html
index 7b7bfe131..7fcc0a7e4 100644
--- a/docs/c/structopendal__bytes.html
+++ b/docs/c/structopendal__bytes.html
@@ -85,8 +85,8 @@ Public Attributes</h2></td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p><a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> carries raw-bytes with its length </p>
-<p>The <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> type is a C-compatible substitute for Vec type in Rust, it has to be manually freed. You have to call <a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the heap memory to avoid memory leak.</p>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#aea5253c2bbe9438349eebb68a18a82ea" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free</a> </dd></dl>
+<p>The <a class="el" href="structopendal__bytes.html" title="opendal_bytes carries raw-bytes with its length">opendal_bytes</a> type is a C-compatible substitute for Vec type in Rust, it has to be manually freed. You have to call <a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free()</a> to free the heap memory to avoid memory leak.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#adba027eb1460c828ff32e87f0ceb338a" title="Frees the heap memory used by the opendal_bytes.">opendal_bytes_free</a> </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="af7a7f99a262f8a3912f4d1cddb798c86"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#af7a7f99a262f8a3912f4d1cddb798c86">&#9670;&nbsp;</a></span>data</h2>
diff --git a/docs/c/structopendal__list__entry-members.html b/docs/c/structopendal__entry-members.html
similarity index 89%
rename from docs/c/structopendal__list__entry-members.html
rename to docs/c/structopendal__entry-members.html
index 60d2a5a5b..e6caef8d7 100644
--- a/docs/c/structopendal__list__entry-members.html
+++ b/docs/c/structopendal__entry-members.html
@@ -64,13 +64,13 @@ $(function() {
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">opendal_list_entry Member List</div>  </div>
+<div class="title">opendal_entry Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="structopendal__list__entry.html">opendal_list_entry</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="structopendal__entry.html">opendal_entry</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">inner</a></td><td class="entry"><a class="el" href="structopendal__list__entry.html">opendal_list_entry</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">inner</a></td><td class="entry"><a class="el" href="structopendal__entry.html">opendal_entry</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__list__entry.html b/docs/c/structopendal__entry.html
similarity index 64%
rename from docs/c/structopendal__list__entry.html
rename to docs/c/structopendal__entry.html
index 83719e52e..bcf845646 100644
--- a/docs/c/structopendal__list__entry.html
+++ b/docs/c/structopendal__entry.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>OpenDAL C Binding: opendal_list_entry Struct Reference</title>
+<title>OpenDAL C Binding: opendal_entry Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -65,38 +65,38 @@ $(function() {
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="structopendal__list__entry-members.html">List of all members</a>  </div>
+<a href="structopendal__entry-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">opendal_list_entry Struct Reference</div>  </div>
+<div class="title">opendal_entry Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p><a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a> is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a>  
- <a href="structopendal__list__entry.html#details">More...</a></p>
+<p>opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a>  
+ <a href="structopendal__entry.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:a23ad6b3ca61aa600ef6f3769f2479892"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__list__entry.html#a23ad6b3ca61aa600ef6f3769f2479892">inner</a></td></tr>
-<tr class="separator:a23ad6b3ca61aa600ef6f3769f2479892"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa26d5cb8f16b95ee2f3b91f22254e597"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__entry.html#aa26d5cb8f16b95ee2f3b91f22254e597">inner</a></td></tr>
+<tr class="separator:aa26d5cb8f16b95ee2f3b91f22254e597"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="structopendal__list__entry.html" title="opendal_list_entry is the entry under a path, which is listed from the opendal_blocking_lister">opendal_list_entry</a> is the entry under a path, which is listed from the <a class="el" href="structopendal__blocking__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_blocking_lister</a> </p>
-<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </dd>
+<div class="textblock"><p>opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a> </p>
+<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </dd>
 <dd>
-<a class="el" href="opendal_8h.html#a3a9984872f04ae478af91a15e1af0af0" title="Path of entry.">opendal_list_entry_path()</a> </dd>
+opendal_list_entry_path() </dd>
 <dd>
-<a class="el" href="opendal_8h.html#ac9b6091ec4c8aa0333727b34de3fa845" title="Name of entry.">opendal_list_entry_name()</a> </dd></dl>
+opendal_list_entry_name() </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
-<a id="a23ad6b3ca61aa600ef6f3769f2479892"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a23ad6b3ca61aa600ef6f3769f2479892">&#9670;&nbsp;</a></span>inner</h2>
+<a id="aa26d5cb8f16b95ee2f3b91f22254e597"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa26d5cb8f16b95ee2f3b91f22254e597">&#9670;&nbsp;</a></span>inner</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a>* opendal_list_entry::inner</td>
+          <td class="memname">struct <a class="el" href="opendal_8h.html#a65b0d0252adaf76f9ce2004299344de8">Entry</a>* opendal_entry::inner</td>
         </tr>
       </table>
 </div><div class="memdoc">
diff --git a/docs/c/structopendal__operator__ptr-members.html b/docs/c/structopendal__lister-members.html
similarity index 89%
rename from docs/c/structopendal__operator__ptr-members.html
rename to docs/c/structopendal__lister-members.html
index 7e6b7a820..b28b9a503 100644
--- a/docs/c/structopendal__operator__ptr-members.html
+++ b/docs/c/structopendal__lister-members.html
@@ -64,13 +64,13 @@ $(function() {
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">opendal_operator_ptr Member List</div>  </div>
+<div class="title">opendal_lister Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="structopendal__lister.html">opendal_lister</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">ptr</a></td><td class="entry"><a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">inner</a></td><td class="entry"><a class="el" href="structopendal__lister.html">opendal_lister</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__blocking__lister.html b/docs/c/structopendal__lister.html
similarity index 80%
rename from docs/c/structopendal__blocking__lister.html
rename to docs/c/structopendal__lister.html
index b00d05bdd..32f53a523 100644
--- a/docs/c/structopendal__blocking__lister.html
+++ b/docs/c/structopendal__lister.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>OpenDAL C Binding: opendal_blocking_lister Struct Reference</title>
+<title>OpenDAL C Binding: opendal_lister Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -65,35 +65,35 @@ $(function() {
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="structopendal__blocking__lister-members.html">List of all members</a>  </div>
+<a href="structopendal__lister-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">opendal_blocking_lister Struct Reference</div>  </div>
+<div class="title">opendal_lister Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
 <p>BlockingLister is designed to list entries at given path in a blocking manner.  
- <a href="structopendal__blocking__lister.html#details">More...</a></p>
+ <a href="structopendal__lister.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:abe85b5f87a529f81fb7542cdef536a7f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">inner</a></td></tr>
-<tr class="separator:abe85b5f87a529f81fb7542cdef536a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50387dc1691da04cd020cc67df2c4295"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__lister.html#a50387dc1691da04cd020cc67df2c4295">inner</a></td></tr>
+<tr class="separator:a50387dc1691da04cd020cc67df2c4295"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>BlockingLister is designed to list entries at given path in a blocking manner. </p>
 <p>Users can construct Lister by <code>blocking_list</code> or <code>blocking_scan</code>(currently not supported in C binding)</p>
-<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a> </dd></dl>
+<p>For examples, please see the comment section of <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a> </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
-<a id="abe85b5f87a529f81fb7542cdef536a7f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abe85b5f87a529f81fb7542cdef536a7f">&#9670;&nbsp;</a></span>inner</h2>
+<a id="a50387dc1691da04cd020cc67df2c4295"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50387dc1691da04cd020cc67df2c4295">&#9670;&nbsp;</a></span>inner</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a>* opendal_blocking_lister::inner</td>
+          <td class="memname">struct <a class="el" href="opendal_8h.html#a03ea17a7d09e319825d05a1d9f5d933c">BlockingLister</a>* opendal_lister::inner</td>
         </tr>
       </table>
 </div><div class="memdoc">
diff --git a/docs/c/structopendal__blocking__lister-members.html b/docs/c/structopendal__operator-members.html
similarity index 88%
rename from docs/c/structopendal__blocking__lister-members.html
rename to docs/c/structopendal__operator-members.html
index 58c7b5d14..70908cbae 100644
--- a/docs/c/structopendal__blocking__lister-members.html
+++ b/docs/c/structopendal__operator-members.html
@@ -64,13 +64,13 @@ $(function() {
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">opendal_blocking_lister Member List</div>  </div>
+<div class="title">opendal_operator Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="structopendal__operator.html">opendal_operator</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structopendal__blocking__lister.html#abe85b5f87a529f81fb7542cdef536a7f">inner</a></td><td class="entry"><a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">ptr</a></td><td class="entry"><a class="el" href="structopendal__operator.html">opendal_operator</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__operator__ptr.html b/docs/c/structopendal__operator.html
similarity index 79%
rename from docs/c/structopendal__operator__ptr.html
rename to docs/c/structopendal__operator.html
index 0773972eb..b48b3249d 100644
--- a/docs/c/structopendal__operator__ptr.html
+++ b/docs/c/structopendal__operator.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>OpenDAL C Binding: opendal_operator_ptr Struct Reference</title>
+<title>OpenDAL C Binding: opendal_operator Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -65,38 +65,38 @@ $(function() {
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="structopendal__operator__ptr-members.html">List of all members</a>  </div>
+<a href="structopendal__operator-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">opendal_operator_ptr Struct Reference</div>  </div>
+<div class="title">opendal_operator Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
 <p>Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL.  
- <a href="structopendal__operator__ptr.html#details">More...</a></p>
+ <a href="structopendal__operator.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:a17b619ae01bb6471f51f8501ab18dd9b"><td class="memItemLeft" align="right" valign="top">const struct BlockingOperator *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__operator__ptr.html#a17b619ae01bb6471f51f8501ab18dd9b">ptr</a></td></tr>
-<tr class="separator:a17b619ae01bb6471f51f8501ab18dd9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81ea292736bd2733dd8e2b0d149305fe"><td class="memItemLeft" align="right" valign="top">const struct BlockingOperator *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__operator.html#a81ea292736bd2733dd8e2b0d149305fe">ptr</a></td></tr>
+<tr class="separator:a81ea292736bd2733dd8e2b0d149305fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces provided by OpenDAL. </p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> This function construct the operator </dd>
 <dd>
-<a class="el" href="opendal_8h.html#a3e038035b4339e19f24e1aa8ef678def" title="Free the heap-allocated operator pointed by opendal_operator_ptr.">opendal_operator_free</a> This function frees the heap memory of the operator</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> actually owns a pointer to a opendal::BlockingOperator, which is inside the Rust core code.</dd></dl>
+<a class="el" href="opendal_8h.html#a04d551eea4b6248d96c9ce9278d27855" title="Free the heap-allocated operator pointed by opendal_operator.">opendal_operator_free</a> This function frees the heap memory of the operator</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> actually owns a pointer to a opendal::BlockingOperator, which is inside the Rust core code.</dd></dl>
 <dl class="section remark"><dt>Remarks</dt><dd>You may use the field <code>ptr</code> to check whether this is a NULL operator. </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
-<a id="a17b619ae01bb6471f51f8501ab18dd9b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a17b619ae01bb6471f51f8501ab18dd9b">&#9670;&nbsp;</a></span>ptr</h2>
+<a id="a81ea292736bd2733dd8e2b0d149305fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81ea292736bd2733dd8e2b0d149305fe">&#9670;&nbsp;</a></span>ptr</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">const struct BlockingOperator* opendal_operator_ptr::ptr</td>
+          <td class="memname">const struct BlockingOperator* opendal_operator::ptr</td>
         </tr>
       </table>
 </div><div class="memdoc">
diff --git a/docs/c/structopendal__operator__options.html b/docs/c/structopendal__operator__options.html
index 703d154ac..fa308410c 100644
--- a/docs/c/structopendal__operator__options.html
+++ b/docs/c/structopendal__operator__options.html
@@ -71,7 +71,7 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
-<p>The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>.  
+<p>The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>.  
  <a href="structopendal__operator__options.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
@@ -82,9 +82,9 @@ Public Attributes</h2></td></tr>
 <tr class="separator:a0b4a1a2cd9074140b04836b822a04645"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The configuration for the initialization of <a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a>. </p>
+<div class="textblock"><p>The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a>. </p>
 <dl class="section note"><dt>Note</dt><dd>This is also a heap-allocated struct, please free it after you use it</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> has an example of using <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator_ptr.">opendal_operator_options</a> </dd>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new</a> has an example of using <a class="el" href="structopendal__operator__options.html" title="The configuration for the initialization of opendal_operator.">opendal_operator_options</a> </dd>
 <dd>
 <a class="el" href="opendal_8h.html#a67b1457f2b1258551552dc383840f288" title="Construct a heap-allocated opendal_operator_options.">opendal_operator_options_new</a> This function construct the operator </dd>
 <dd>
diff --git a/docs/c/structopendal__reader.html b/docs/c/structopendal__reader.html
index 26a15a042..890768dec 100644
--- a/docs/c/structopendal__reader.html
+++ b/docs/c/structopendal__reader.html
@@ -71,6 +71,9 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
+<p>The result type returned by opendal's reader operation.  
+ <a href="structopendal__reader.html#details">More...</a></p>
+
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
@@ -78,7 +81,10 @@ Public Attributes</h2></td></tr>
 <tr class="memitem:a25070270d288274fc2fcb1e38d389718"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="opendal_8h.html#a8c11fb124aac4911b663122dbfa7d1fa">BlockingReader</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__reader.html#a25070270d288274fc2fcb1e38d389718">inner</a></td></tr>
 <tr class="separator:a25070270d288274fc2fcb1e38d389718"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<h2 class="groupheader">Member Data Documentation</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The result type returned by opendal's reader operation. </p>
+<dl class="section note"><dt>Note</dt><dd>The <a class="el" href="structopendal__reader.html" title="The result type returned by opendal&#39;s reader operation.">opendal_reader</a> actually owns a pointer to a opendal::BlockingReader, which is inside the Rust core code. </dd></dl>
+</div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a25070270d288274fc2fcb1e38d389718"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a25070270d288274fc2fcb1e38d389718">&#9670;&nbsp;</a></span>inner</h2>
 
diff --git a/docs/c/structopendal__result__is__exist.html b/docs/c/structopendal__result__is__exist.html
index 76ae6a5aa..793998031 100644
--- a/docs/c/structopendal__result__is__exist.html
+++ b/docs/c/structopendal__result__is__exist.html
@@ -71,7 +71,7 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  
+<p>The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>.  
  <a href="structopendal__result__is__exist.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
@@ -84,9 +84,9 @@ Public Attributes</h2></td></tr>
 <tr class="separator:a6dc61502ab68ba25bcd56b09a215de6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a>, the field <code>is_exist</code> contains whether the path exists, and the field <code>error</code> contains the corresponding error. If successful, the <code>error</code> field is null.</p>
-<dl class="section note"><dt>Note</dt><dd>If the <a class="el" href="opendal_8h.html#ae5a3bf403cdf78d5c5b1fa9f623f0d80" title="Check whether the path exists.">opendal_operator_is_exist()</a> fails, the <code>is_exist</code> field will be set to false. </dd></dl>
+<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a>, the field <code>is_exist</code> contains whether the path exists, and the field <code>error</code> contains the corresponding error. If successful, the <code>error</code> field is null.</p>
+<dl class="section note"><dt>Note</dt><dd>If the <a class="el" href="opendal_8h.html#acc6c32aa41963ac67e612dc47f7edb46" title="Check whether the path exists.">opendal_operator_is_exist()</a> fails, the <code>is_exist</code> field will be set to false. </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a6dc61502ab68ba25bcd56b09a215de6c"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a6dc61502ab68ba25bcd56b09a215de6c">&#9670;&nbsp;</a></span>error</h2>
diff --git a/docs/c/structopendal__result__list-members.html b/docs/c/structopendal__result__list-members.html
index cfaced177..e5438315f 100644
--- a/docs/c/structopendal__result__list-members.html
+++ b/docs/c/structopendal__result__list-members.html
@@ -71,7 +71,7 @@ $(function() {
 <p>This is the complete list of members for <a class="el" href="structopendal__result__list.html">opendal_result_list</a>, including all inherited members.</p>
 <table class="directory">
   <tr class="even"><td class="entry"><a class="el" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a></td><td class="entry"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">lister</a></td><td class="entry"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">lister</a></td><td class="entry"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__result__list.html b/docs/c/structopendal__result__list.html
index f3f16b42f..006566f8d 100644
--- a/docs/c/structopendal__result__list.html
+++ b/docs/c/structopendal__result__list.html
@@ -71,21 +71,21 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>.  
+<p>The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>.  
  <a href="structopendal__result__list.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:a1388cb447f532ecd19ff9a13e09daced"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">lister</a></td></tr>
-<tr class="separator:a1388cb447f532ecd19ff9a13e09daced"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54b9b09c29f8d867da187c32e362398a"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__lister.html">opendal_lister</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__list.html#a54b9b09c29f8d867da187c32e362398a">lister</a></td></tr>
+<tr class="separator:a54b9b09c29f8d867da187c32e362398a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a874bfb5c9d016445698fb59d65b76ed2"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a></td></tr>
 <tr class="separator:a874bfb5c9d016445698fb59d65b76ed2"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#a844f3a690078c34af557ae83e1f1513f" title="Blockingly list the objects in path.">opendal_operator_blocking_list()</a>, the field <code>lister</code> contains the lister of the path, which is an iterator of the objects under the path. the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blockingly list the objects in path.">opendal_operator_list()</a>, the field <code>lister</code> contains the lister of the path, which is an iterator of the objects under the path. the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
 </div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a874bfb5c9d016445698fb59d65b76ed2"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a874bfb5c9d016445698fb59d65b76ed2">&#9670;&nbsp;</a></span>error</h2>
@@ -102,14 +102,14 @@ Public Attributes</h2></td></tr>
 
 </div>
 </div>
-<a id="a1388cb447f532ecd19ff9a13e09daced"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1388cb447f532ecd19ff9a13e09daced">&#9670;&nbsp;</a></span>lister</h2>
+<a id="a54b9b09c29f8d867da187c32e362398a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54b9b09c29f8d867da187c32e362398a">&#9670;&nbsp;</a></span>lister</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__blocking__lister.html">opendal_blocking_lister</a>* opendal_result_list::lister</td>
+          <td class="memname">struct <a class="el" href="structopendal__lister.html">opendal_lister</a>* opendal_result_list::lister</td>
         </tr>
       </table>
 </div><div class="memdoc">
diff --git a/docs/c/structopendal__result__reader-members.html b/docs/c/structopendal__result__lister__next-members.html
similarity index 83%
rename from docs/c/structopendal__result__reader-members.html
rename to docs/c/structopendal__result__lister__next-members.html
index a618ca7e5..784d0ecfe 100644
--- a/docs/c/structopendal__result__reader-members.html
+++ b/docs/c/structopendal__result__lister__next-members.html
@@ -64,14 +64,14 @@ $(function() {
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">opendal_result_reader Member List</div>  </div>
+<div class="title">opendal_result_lister_next Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="structopendal__result__reader.html">opendal_result_reader</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">error</a></td><td class="entry"><a class="el" href="structopendal__result__reader.html">opendal_result_reader</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">reader</a></td><td class="entry"><a class="el" href="structopendal__result__reader.html">opendal_result_reader</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">entry</a></td><td class="entry"><a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">error</a></td><td class="entry"><a class="el" href="structopendal__result__lister__next.html">opendal_result_lister_next</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__result__reader.html b/docs/c/structopendal__result__lister__next.html
similarity index 65%
rename from docs/c/structopendal__result__reader.html
rename to docs/c/structopendal__result__lister__next.html
index 6c4ec0d3c..f317a5c18 100644
--- a/docs/c/structopendal__result__reader.html
+++ b/docs/c/structopendal__result__lister__next.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>OpenDAL C Binding: opendal_result_reader Struct Reference</title>
+<title>OpenDAL C Binding: opendal_result_lister_next Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -65,52 +65,55 @@ $(function() {
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="structopendal__result__reader-members.html">List of all members</a>  </div>
+<a href="structopendal__result__lister__next-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">opendal_result_reader Struct Reference</div>  </div>
+<div class="title">opendal_result_lister_next Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> represents whether the stat operation is successful.  
- <a href="structopendal__result__reader.html#details">More...</a></p>
+<p>The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list result of the list operation, the error field is the error code and error message. If the operation succeeds, the error should be NULL.  
+ <a href="structopendal__result__lister__next.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:ab2f72d683d38843ca9b429fc9a80272d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__reader.html#ab2f72d683d38843ca9b429fc9a80272d">reader</a></td></tr>
-<tr class="separator:ab2f72d683d38843ca9b429fc9a80272d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c075185ae159ac377b3e971c359efc2"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__reader.html#a1c075185ae159ac377b3e971c359efc2">error</a></td></tr>
-<tr class="separator:a1c075185ae159ac377b3e971c359efc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24546e0cde0fa8ca5c5da488769d79ea"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__entry.html">opendal_entry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__lister__next.html#a24546e0cde0fa8ca5c5da488769d79ea">entry</a></td></tr>
+<tr class="separator:a24546e0cde0fa8ca5c5da488769d79ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac92e3fafbc77789c19a6ec03e8e53a10"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__lister__next.html#ac92e3fafbc77789c19a6ec03e8e53a10">error</a></td></tr>
+<tr class="separator:ac92e3fafbc77789c19a6ec03e8e53a10"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The result type returned by opendal_operator_reader(). The result type for opendal_operator_reader(), the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> represents whether the stat operation is successful. </p>
+<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#a8429a4433316d9bf70cfffbbcb844a3d" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list result of the list operation, the error field is the error code and error message. If the operation succeeds, the error should be NULL. </p>
+<dl class="section note"><dt>Note</dt><dd>Please notice if the lister reaches the end, both the list_entry and error will be NULL. </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
-<a id="a1c075185ae159ac377b3e971c359efc2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c075185ae159ac377b3e971c359efc2">&#9670;&nbsp;</a></span>error</h2>
+<a id="a24546e0cde0fa8ca5c5da488769d79ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24546e0cde0fa8ca5c5da488769d79ea">&#9670;&nbsp;</a></span>entry</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_result_reader::error</td>
+          <td class="memname">struct <a class="el" href="structopendal__entry.html">opendal_entry</a>* opendal_result_lister_next::entry</td>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The next object name </p>
 
 </div>
 </div>
-<a id="ab2f72d683d38843ca9b429fc9a80272d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab2f72d683d38843ca9b429fc9a80272d">&#9670;&nbsp;</a></span>reader</h2>
+<a id="ac92e3fafbc77789c19a6ec03e8e53a10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac92e3fafbc77789c19a6ec03e8e53a10">&#9670;&nbsp;</a></span>error</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__reader.html">opendal_reader</a>* opendal_result_reader::reader</td>
+          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_result_lister_next::error</td>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The error, if ok, it is null </p>
 
 </div>
 </div>
diff --git a/docs/c/structopendal__result__operator__new-members.html b/docs/c/structopendal__result__operator__new-members.html
index 6603bf01a..da8ab6b75 100644
--- a/docs/c/structopendal__result__operator__new-members.html
+++ b/docs/c/structopendal__result__operator__new-members.html
@@ -71,7 +71,7 @@ $(function() {
 <p>This is the complete list of members for <a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a>, including all inherited members.</p>
 <table class="directory">
   <tr class="even"><td class="entry"><a class="el" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">error</a></td><td class="entry"><a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">operator_ptr</a></td><td class="entry"><a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">op</a></td><td class="entry"><a class="el" href="structopendal__result__operator__new.html">opendal_result_operator_new</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__result__operator__new.html b/docs/c/structopendal__result__operator__new.html
index bbfa4dc67..778bab0b8 100644
--- a/docs/c/structopendal__result__operator__new.html
+++ b/docs/c/structopendal__result__operator__new.html
@@ -78,17 +78,17 @@ $(function() {
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:a1998b1bb97c81253564e0a9228759891"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__new.html#a1998b1bb97c81253564e0a9228759891">operator_ptr</a></td></tr>
-<tr class="separator:a1998b1bb97c81253564e0a9228759891"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e358aad13b4c71dc7a9a812191371c6"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__operator.html">opendal_operator</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__new.html#a4e358aad13b4c71dc7a9a812191371c6">op</a></td></tr>
+<tr class="separator:a4e358aad13b4c71dc7a9a812191371c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a5ee50d6c74038806e57d12d1880ac520"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__new.html#a5ee50d6c74038806e57d12d1880ac520">error</a></td></tr>
 <tr class="separator:a5ee50d6c74038806e57d12d1880ac520"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation. </p>
-<p>If the init logic is successful, the <code>operator_ptr</code> field will be set to a valid pointer, and the <code>error</code> field will be set to null. If the init logic fails, the <code>operator_ptr</code> field will be set to null, and the <code>error</code> field will be set to a valid pointer with error code and error message.</p>
+<p>If the init logic is successful, the <code>op</code> field will be set to a valid pointer, and the <code>error</code> field will be set to null. If the init logic fails, the <code>op</code> field will be set to null, and the <code>error</code> field will be set to a valid pointer with error code and error message.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> </dd>
 <dd>
-<a class="el" href="structopendal__operator__ptr.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator_ptr</a> </dd>
+<a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents a operator that provides the unified interfaces...">opendal_operator</a> </dd>
 <dd>
 <a class="el" href="structopendal__error.html" title="The opendal error type for C binding, containing an error code and corresponding error message.">opendal_error</a> </dd></dl>
 </div><h2 class="groupheader">Member Data Documentation</h2>
@@ -103,20 +103,22 @@ Public Attributes</h2></td></tr>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The error pointer for error. </p>
 
 </div>
 </div>
-<a id="a1998b1bb97c81253564e0a9228759891"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1998b1bb97c81253564e0a9228759891">&#9670;&nbsp;</a></span>operator_ptr</h2>
+<a id="a4e358aad13b4c71dc7a9a812191371c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e358aad13b4c71dc7a9a812191371c6">&#9670;&nbsp;</a></span>op</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__operator__ptr.html">opendal_operator_ptr</a>* opendal_result_operator_new::operator_ptr</td>
+          <td class="memname">struct <a class="el" href="structopendal__operator.html">opendal_operator</a>* opendal_result_operator_new::op</td>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The pointer for operator. </p>
 
 </div>
 </div>
diff --git a/docs/c/structopendal__result__list-members.html b/docs/c/structopendal__result__operator__reader-members.html
similarity index 82%
copy from docs/c/structopendal__result__list-members.html
copy to docs/c/structopendal__result__operator__reader-members.html
index cfaced177..f7cbb7184 100644
--- a/docs/c/structopendal__result__list-members.html
+++ b/docs/c/structopendal__result__operator__reader-members.html
@@ -64,14 +64,14 @@ $(function() {
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">opendal_result_list Member List</div>  </div>
+<div class="title">opendal_result_operator_reader Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="structopendal__result__list.html">opendal_result_list</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structopendal__result__list.html#a874bfb5c9d016445698fb59d65b76ed2">error</a></td><td class="entry"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structopendal__result__list.html#a1388cb447f532ecd19ff9a13e09daced">lister</a></td><td class="entry"><a class="el" href="structopendal__result__list.html">opendal_result_list</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">error</a></td><td class="entry"><a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">reader</a></td><td class="entry"><a class="el" href="structopendal__result__operator__reader.html">opendal_result_operator_reader</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/c/structopendal__result__stat.html b/docs/c/structopendal__result__operator__reader.html
similarity index 63%
copy from docs/c/structopendal__result__stat.html
copy to docs/c/structopendal__result__operator__reader.html
index 507ffe179..498a0d34b 100644
--- a/docs/c/structopendal__result__stat.html
+++ b/docs/c/structopendal__result__operator__reader.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>OpenDAL C Binding: opendal_result_stat Struct Reference</title>
+<title>OpenDAL C Binding: opendal_result_operator_reader Struct Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -65,36 +65,35 @@ $(function() {
 <div class="header">
   <div class="summary">
 <a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="structopendal__result__stat-members.html">List of all members</a>  </div>
+<a href="structopendal__result__operator__reader-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">opendal_result_stat Struct Reference</div>  </div>
+<div class="title">opendal_result_operator_reader Struct Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  
- <a href="structopendal__result__stat.html#details">More...</a></p>
+<p>The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>, the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field <code>code</code> repres [...]
+ <a href="structopendal__result__operator__reader.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
 Public Attributes</h2></td></tr>
-<tr class="memitem:a1d4d484d7bf50bc8e5d65dea5f6f2425"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__stat.html#a1d4d484d7bf50bc8e5d65dea5f6f2425">meta</a></td></tr>
-<tr class="separator:a1d4d484d7bf50bc8e5d65dea5f6f2425"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a657eee3bfdf805036f169d94ee70dce9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__stat.html#a657eee3bfdf805036f169d94ee70dce9">error</a></td></tr>
-<tr class="separator:a657eee3bfdf805036f169d94ee70dce9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ed8dec94126ab5b74dc63a87ca5839d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__reader.html">opendal_reader</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__reader.html#a9ed8dec94126ab5b74dc63a87ca5839d">reader</a></td></tr>
+<tr class="separator:a9ed8dec94126ab5b74dc63a87ca5839d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9bd6c401ef87b4b6456423fa11079b91"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__operator__reader.html#a9bd6c401ef87b4b6456423fa11079b91">error</a></td></tr>
+<tr class="separator:a9bd6c401ef87b4b6456423fa11079b91"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>, the field <code>meta</code> contains the metadata of the path, the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>. The result type for <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blockingly read the data from path.">opendal_operator_reader()</a>, the field <code>reader</code> contains the reader of the path, which is an iterator of the objects under the path. the field < [...]
 </div><h2 class="groupheader">Member Data Documentation</h2>
-<a id="a657eee3bfdf805036f169d94ee70dce9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a657eee3bfdf805036f169d94ee70dce9">&#9670;&nbsp;</a></span>error</h2>
+<a id="a9bd6c401ef87b4b6456423fa11079b91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9bd6c401ef87b4b6456423fa11079b91">&#9670;&nbsp;</a></span>error</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_result_stat::error</td>
+          <td class="memname">struct <a class="el" href="structopendal__error.html">opendal_error</a>* opendal_result_operator_reader::error</td>
         </tr>
       </table>
 </div><div class="memdoc">
@@ -102,18 +101,18 @@ Public Attributes</h2></td></tr>
 
 </div>
 </div>
-<a id="a1d4d484d7bf50bc8e5d65dea5f6f2425"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1d4d484d7bf50bc8e5d65dea5f6f2425">&#9670;&nbsp;</a></span>meta</h2>
+<a id="a9ed8dec94126ab5b74dc63a87ca5839d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ed8dec94126ab5b74dc63a87ca5839d">&#9670;&nbsp;</a></span>reader</h2>
 
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">struct <a class="el" href="structopendal__metadata.html">opendal_metadata</a>* opendal_result_stat::meta</td>
+          <td class="memname">struct <a class="el" href="structopendal__reader.html">opendal_reader</a>* opendal_result_operator_reader::reader</td>
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The metadata output of the stat </p>
+<p>The pointer for <a class="el" href="structopendal__reader.html" title="The result type returned by opendal&#39;s reader operation.">opendal_reader</a> </p>
 
 </div>
 </div>
diff --git a/docs/c/structopendal__result__reader__read.html b/docs/c/structopendal__result__reader__read.html
index 79dee3c48..57a889e30 100644
--- a/docs/c/structopendal__result__reader__read.html
+++ b/docs/c/structopendal__result__reader__read.html
@@ -71,6 +71,9 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
+<p>The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size field, which is the size of the data read, which is zero on error. The error field is the error code and error message.  
+ <a href="structopendal__result__reader__read.html#details">More...</a></p>
+
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
@@ -80,7 +83,9 @@ Public Attributes</h2></td></tr>
 <tr class="memitem:a1279e7b3cb6beaf63da0f6ee9370ba36"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structopendal__error.html">opendal_error</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structopendal__result__reader__read.html#a1279e7b3cb6beaf63da0f6ee9370ba36">error</a></td></tr>
 <tr class="separator:a1279e7b3cb6beaf63da0f6ee9370ba36"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
-<h2 class="groupheader">Member Data Documentation</h2>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>The is the result type returned by <a class="el" href="opendal_8h.html#a1a2ea5159526b724de9724dd905d2d3e" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size field, which is the size of the data read, which is zero on error. The error field is the error code and error message. </p>
+</div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a1279e7b3cb6beaf63da0f6ee9370ba36"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a1279e7b3cb6beaf63da0f6ee9370ba36">&#9670;&nbsp;</a></span>error</h2>
 
@@ -92,6 +97,7 @@ Public Attributes</h2></td></tr>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The error, if ok, it is null </p>
 
 </div>
 </div>
@@ -106,6 +112,7 @@ Public Attributes</h2></td></tr>
         </tr>
       </table>
 </div><div class="memdoc">
+<p>The read size if succeed. </p>
 
 </div>
 </div>
diff --git a/docs/c/structopendal__result__stat.html b/docs/c/structopendal__result__stat.html
index 507ffe179..74f3a9449 100644
--- a/docs/c/structopendal__result__stat.html
+++ b/docs/c/structopendal__result__stat.html
@@ -71,7 +71,7 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 
-<p>The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  
+<p>The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>.  
  <a href="structopendal__result__stat.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="opendal_8h_source.html">opendal.h</a>&gt;</code></p>
@@ -84,8 +84,8 @@ Public Attributes</h2></td></tr>
 <tr class="separator:a657eee3bfdf805036f169d94ee70dce9"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>. </p>
-<p>The result type for <a class="el" href="opendal_8h.html#aefa1285911f7cf00837e69ba29d2efd3" title="Stat the path, return its metadata.">opendal_operator_stat()</a>, the field <code>meta</code> contains the metadata of the path, the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
+<div class="textblock"><p>The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>. </p>
+<p>The result type for <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a>, the field <code>meta</code> contains the metadata of the path, the field <code>error</code> represents whether the stat operation is successful. If successful, the <code>error</code> field is null. </p>
 </div><h2 class="groupheader">Member Data Documentation</h2>
 <a id="a657eee3bfdf805036f169d94ee70dce9"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#a657eee3bfdf805036f169d94ee70dce9">&#9670;&nbsp;</a></span>error</h2>
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index dae4fb0fd..9713f9caf 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Services | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 1c8551818..899e34b9f 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-10-21 03:53:43 </i>
+<i style="float:right;">Last updated 2023-10-21 04:08:05 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index b5b79f3cb..8586eee6f 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-10-21 03:53:43 </i>
+<i style="float:right;">Last updated 2023-10-21 04:08:05 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index 39c4c7338..f6f6ad289 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-10-21 03:53:43 </i>
+<i style="float:right;">Last updated 2023-10-21 04:08:05 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index a79bbb9bd..126e058b0 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/e48968b/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index ed6b817ef..7a5003db1 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/e48968b/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -53,7 +53,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 4f57c4ca0..9dee15933 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/e48968b/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -57,7 +57,7 @@ thing internally.</p>
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index a19e120a2..f90cb39a6 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/e48968b/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -63,7 +63,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -73,7 +73,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -83,7 +83,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -93,7 +93,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -103,7 +103,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -114,7 +114,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="isDirectory" class="tsd-anchor"></a>
@@ -126,7 +126,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -136,7 +136,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index 9cf8e6f34..39bca4dc0 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/e48968b/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/c7bfe23/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -79,7 +79,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type tsd-kind-class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a>
@@ -104,7 +104,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>check</span><a href="#check" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -117,7 +117,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -136,7 +136,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -155,7 +155,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -172,7 +172,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -189,7 +189,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -207,7 +207,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -224,7 +224,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -241,7 +241,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -258,7 +258,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -277,7 +277,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -296,7 +296,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -316,7 +316,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -336,7 +336,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/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/c7bfe23/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -356,7 +356,7 @@
 <h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -373,7 +373,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -390,7 +390,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -408,7 +408,7 @@
 <h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -426,7 +426,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -446,7 +446,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -466,7 +466,7 @@
 <h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -485,7 +485,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -504,7 +504,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -527,7 +527,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -544,7 +544,7 @@
 <h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -563,7 +563,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -582,7 +582,7 @@
 <h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/c7bfe23/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 5fa152e34..3d76991f2 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/e48968b/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/c7bfe23/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/e48968b/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/c7bfe23/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">method</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>HTTP method of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/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/c7bfe23/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
 <div class="tsd-comment tsd-typography"><p>URL of this request.</p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/e48968b/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/c7bfe23/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index bd0e814da..e9749f488 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Welcome to Apache OpenDAL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 53cd2427f..042094567 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -168,13 +168,13 @@
                                 <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                                <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_type">content_type</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
@@ -189,13 +189,13 @@
                     <a class="class" href="#PresignedRequest">PresignedRequest</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#PresignedRequest.headers">headers</a>
+                                <a class="variable" href="#PresignedRequest.method">method</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.url">url</a>
+                                <a class="variable" href="#PresignedRequest.headers">headers</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.method">method</a>
+                                <a class="variable" href="#PresignedRequest.url">url</a>
                         </li>
                 </ul>
 
@@ -937,41 +937,41 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_length" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_length</span><span class="annotation">: int</span>
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_length"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>Content length of this entry.</p>
+            <div class="docstring"><p>Content Type of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.content_length" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_length</span><span class="annotation">: int</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_length"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>Content length of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_type" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_type"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>Content Type of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
@@ -1013,41 +1013,41 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="PresignedRequest.headers" class="classattr">
+                            <div id="PresignedRequest.method" class="classattr">
                                 <div class="attr variable">
-            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
+            <span class="name">method</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.headers"></a>
+    <a class="headerlink" href="#PresignedRequest.method"></a>
     
-            <div class="docstring"><p>Return the HTTP headers of this request.</p>
+            <div class="docstring"><p>Return the HTTP method of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.url" class="classattr">
+                            <div id="PresignedRequest.headers" class="classattr">
                                 <div class="attr variable">
-            <span class="name">url</span><span class="annotation">: str</span>
+            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.url"></a>
+    <a class="headerlink" href="#PresignedRequest.headers"></a>
     
-            <div class="docstring"><p>Return the URL of this request.</p>
+            <div class="docstring"><p>Return the HTTP headers of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.method" class="classattr">
+                            <div id="PresignedRequest.url" class="classattr">
                                 <div class="attr variable">
-            <span class="name">method</span><span class="annotation">: str</span>
+            <span class="name">url</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.method"></a>
+    <a class="headerlink" href="#PresignedRequest.url"></a>
     
-            <div class="docstring"><p>Return the HTTP method of this request.</p>
+            <div class="docstring"><p>Return the URL of this request.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index 36cb84fc0..08bd1f9bc 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/quickstart/index.html b/docs/quickstart/index.html
index b24daa0fb..f7245990c 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Quickstart | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/quickstart"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/atomicserver/index.html b/docs/services/atomicserver/index.html
index 25182c412..aab8bbfa4 100644
--- a/docs/services/atomicserver/index.html
+++ b/docs/services/atomicserver/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">AtomicServer | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/atomicserver"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index f5264a43e..de1a41748 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azblob | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azblob"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azdls/index.html b/docs/services/azdls/index.html
index 00674b3f9..4a15f09c5 100644
--- a/docs/services/azdls/index.html
+++ b/docs/services/azdls/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azdls | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azdls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cacache/index.html b/docs/services/cacache/index.html
index 79644be33..20e3b84ec 100644
--- a/docs/services/cacache/index.html
+++ b/docs/services/cacache/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Cacache | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cacache"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index a0dac7154..c8ede909a 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">COS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cos"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/d1/index.html b/docs/services/d1/index.html
index e726b18f6..5d28db1fc 100644
--- a/docs/services/d1/index.html
+++ b/docs/services/d1/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">D1 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/d1"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 6b53229a8..ebd812dad 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">DashMap | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dashmap"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dropbox/index.html b/docs/services/dropbox/index.html
index 686a7be38..79f151c2e 100644
--- a/docs/services/dropbox/index.html
+++ b/docs/services/dropbox/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Dropbox | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dropbox"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -15,8 +15,8 @@ Please notice its expiration.</li></ul><h4 class="anchor anchorWithStickyNavbar_
 please provide the following fields:</p><ul><li><code>refresh_token</code>: set the refresh_token for dropbox api</li><li><code>client_id</code>: set the client_id for dropbox api</li><li><code>client_secret</code>: set the client_secret for dropbox api</li></ul><p>OpenDAL is a library, it cannot do the first step of OAuth2 for you.
 You need to get authorization code from user by calling Dropbox&#x27;s authorize url
 and exchange it for refresh token.</p><p>Please refer to <a href="https://www.dropbox.com/developers/reference/oauth-guide" target="_blank" rel="noopener noreferrer">Dropbox OAuth2 Guide</a>
-for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/etcd/index.html b/docs/services/etcd/index.html
index 62acba7e8..9f6aec72a 100644
--- a/docs/services/etcd/index.html
+++ b/docs/services/etcd/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Etcd | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/etcd"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/foundationdb/index.html b/docs/services/foundationdb/index.html
index a644300f7..d9df4b2c4 100644
--- a/docs/services/foundationdb/index.html
+++ b/docs/services/foundationdb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FoundationDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/foundationdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index 65a653399..bf4ba3671 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Fs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/fs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index 33ba1673c..a0b072cc2 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gcs/index.html b/docs/services/gcs/index.html
index dba8f9ac1..782b8da22 100644
--- a/docs/services/gcs/index.html
+++ b/docs/services/gcs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gcs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gcs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gdrive/index.html b/docs/services/gdrive/index.html
index c127b27a0..7cedc5ba3 100644
--- a/docs/services/gdrive/index.html
+++ b/docs/services/gdrive/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gdrive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gdrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -16,8 +16,8 @@ please provide the following fields:</p><ul><li><code>refresh_token</code>: set
 You need to get authorization code from user by calling GoogleDrive&#x27;s authorize url
 and exchange it for refresh token.</p><p>Make sure you have enabled Google Drive API in your Google Cloud Console.
 And your OAuth scope contains <code>https://www.googleapis.com/auth/drive</code>.</p><p>Please refer to <a href="https://developers.google.com/identity/protocols/oauth2/" target="_blank" rel="noopener noreferrer">GoogleDrive OAuth2 Flow</a>
-for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ghac/index.html b/docs/services/ghac/index.html
index 9ac861ebe..0b43489d8 100644
--- a/docs/services/ghac/index.html
+++ b/docs/services/ghac/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">GHAC | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ghac"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 configure the URL and credentials, or that the following environment has been setup correctly:</p><ul><li><code>ACTIONS_CACHE_URL</code></li><li><code>ACTIONS_RUNTIME_TOKEN</code></li></ul><p>They can be exposed by following action:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code cla [...]
 We provide a <code>enable_create_simulation()</code> to support this operation but may result unexpected side effects.</p><p>Also, <code>ghac</code> is a cache service which means the data store inside could
-be automatically evicted at any time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the work dir for backend.</li></ul><p>Refer to <!-- -->[<code>GhacBuilder</code>]<!-- -->&#x27;s public API docs for more information.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a h [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+be automatically evicted at any time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the work dir for backend.</li></ul><p>Refer to <!-- -->[<code>GhacBuilder</code>]<!-- -->&#x27;s public API docs for more information.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a h [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index de60adf12..6b10c737d 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">HDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/hdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/http/index.html b/docs/services/http/index.html
index 40f858805..a29642f24 100644
--- a/docs/services/http/index.html
+++ b/docs/services/http/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">HTTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index a0c6de898..c9b904a26 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index bd6fc208d..80bb3699a 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPMFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipmfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/libsql/index.html b/docs/services/libsql/index.html
index c54f51a33..98a851baa 100644
--- a/docs/services/libsql/index.html
+++ b/docs/services/libsql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">LibSQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/libsql"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memcached/index.html b/docs/services/memcached/index.html
index 75cb77b56..ff0421a4c 100644
--- a/docs/services/memcached/index.html
+++ b/docs/services/memcached/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memcached | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memcached"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index dd39e7104..be562204e 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memory | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memory"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/moka/index.html b/docs/services/moka/index.html
index 45e7e1bd5..35fc13989 100644
--- a/docs/services/moka/index.html
+++ b/docs/services/moka/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Moka | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/moka"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/mysql/index.html b/docs/services/mysql/index.html
index cf7096ab9..733e33f9c 100644
--- a/docs/services/mysql/index.html
+++ b/docs/services/mysql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">MySQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/mysql"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/obs/index.html b/docs/services/obs/index.html
index f3cf49e8f..2b977db1c 100644
--- a/docs/services/obs/index.html
+++ b/docs/services/obs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Obs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/obs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/onedrive/index.html b/docs/services/onedrive/index.html
index 066197e24..cd8d363ea 100644
--- a/docs/services/onedrive/index.html
+++ b/docs/services/onedrive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OneDrive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/onedrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index b0a8dbdd9..1c57b0e19 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OSS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/oss"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/persy/index.html b/docs/services/persy/index.html
index f204a1326..42cc6d716 100644
--- a/docs/services/persy/index.html
+++ b/docs/services/persy/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Persy | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/persy"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/postgresql/index.html b/docs/services/postgresql/index.html
index 79ec5f274..85c5ca8d3 100644
--- a/docs/services/postgresql/index.html
+++ b/docs/services/postgresql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">PostgreSQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/postgresql"><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="curren [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redb/index.html b/docs/services/redb/index.html
index 3882d678d..468c98027 100644
--- a/docs/services/redb/index.html
+++ b/docs/services/redb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Redb | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index 74a44a6e3..935bd0be8 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Redis | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redis"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index d63917ea5..551c772d8 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,7 +5,7 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">RocksDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/rocksdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -13,8 +13,8 @@
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 issues. It is advisable to follow the steps provided in the <a href="https://github.com/facebook/rocksdb/blob/main/INSTALL.md" target="_blank" rel="noopener noreferrer"><code>INSTALL</code></a>
 file to build rocksdb, rather than relying on system libraries that
-may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index fbbc70910..ad7427b1e 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">S3 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/s3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index 6612b1b12..559cef94e 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">SFTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index a74d2707f..65a5c3520 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Sled | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sled"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sqlite/index.html b/docs/services/sqlite/index.html
index 09aa84141..e44c015b4 100644
--- a/docs/services/sqlite/index.html
+++ b/docs/services/sqlite/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Sqlite | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sqlite"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/supabase/index.html b/docs/services/supabase/index.html
index 0f86fdd17..f15cc678d 100644
--- a/docs/services/supabase/index.html
+++ b/docs/services/supabase/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Supabase | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/supabase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 service_role_key(Secret key). The former one can only write public resources while the latter one
-can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/tikv/index.html b/docs/services/tikv/index.html
index 7dec486cf..a34c150d8 100644
--- a/docs/services/tikv/index.html
+++ b/docs/services/tikv/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">TiKV | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/tikv"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/vercel_artifacts/index.html b/docs/services/vercel_artifacts/index.html
index 577274f3f..38f29e027 100644
--- a/docs/services/vercel_artifacts/index.html
+++ b/docs/services/vercel_artifacts/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Vercel Artifacts | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/vercel_artifacts"><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" con [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/wasabi/index.html b/docs/services/wasabi/index.html
index 44afaef8d..55836b6bd 100644
--- a/docs/services/wasabi/index.html
+++ b/docs/services/wasabi/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Wasabi | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/wasabi"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webdav/index.html b/docs/services/webdav/index.html
index 5248f8477..6737c7dc1 100644
--- a/docs/services/webdav/index.html
+++ b/docs/services/webdav/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebDAV | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webdav"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index 694a8d331..2b5fbd644 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebHDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webhdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index ad30b1005..1e199549a 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Download | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/download"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 91ca230ff..aa5a20db0 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.5afca37a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.2d1180dd.js" as="script">
 <link rel="preload" href="/assets/js/main.81133b52.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
-<script src="/assets/js/runtime~main.5afca37a.js"></script>
+<script src="/assets/js/runtime~main.2d1180dd.js"></script>
 <script src="/assets/js/main.81133b52.js"></script>
 </body>
 </html>
\ No newline at end of file