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 2024/07/03 03:27:24 UTC
(opendal) branch gh-pages updated: deploy: a58e802f914a60bb8174718d42d031b98f217468
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/opendal.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 475f254a90 deploy: a58e802f914a60bb8174718d42d031b98f217468
475f254a90 is described below
commit 475f254a90bff294a42e83634111f9a7ac8747a5
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Wed Jul 3 03:27:18 2024 +0000
deploy: a58e802f914a60bb8174718d42d031b98f217468
---
404.html | 2 +-
assets/js/{main.0d9f5821.js => main.20117305.js} | 4 +-
...js.LICENSE.txt => main.20117305.js.LICENSE.txt} | 0
blog/apache-opendal-graduated/index.html | 2 +-
.../index.html | 2 +-
.../index.html | 2 +-
blog/archive/index.html | 2 +-
blog/how-opendal-read-data/index.html | 2 +-
blog/index.html | 2 +-
blog/opendal-access-data-freely/index.html | 2 +-
blog/opendal-entered-apache-incubator/index.html | 2 +-
blog/owo-1/index.html | 2 +-
blog/tags/announcement/index.html | 2 +-
blog/tags/index.html | 2 +-
blog/tags/internal/index.html | 2 +-
blog/tags/owo/index.html | 2 +-
community/category/committers/index.html | 2 +-
community/category/events/index.html | 2 +-
community/category/pmc-members/index.html | 2 +-
community/category/reference/index.html | 2 +-
community/category/release/index.html | 2 +-
community/committers/onboarding/index.html | 2 +-
.../request_for_adding_secrets/index.html | 2 +-
community/events/gsoc-proposal-guide/index.html | 2 +-
community/events/ospp-proposal-guide/index.html | 2 +-
community/index.html | 2 +-
community/maturity/index.html | 2 +-
community/pmc_members/board-reporting/index.html | 2 +-
.../pmc_members/nominate-committer/index.html | 2 +-
.../pmc_members/nominate-pmc-member/index.html | 2 +-
community/pmc_members/onboarding/index.html | 2 +-
community/release/index.html | 2 +-
.../reference/generate_release_note/index.html | 2 +-
community/release/reference/setup_gpg/index.html | 2 +-
community/release/verify/index.html | 2 +-
community/security/index.html | 2 +-
docs/binding-java/index.html | 2 +-
docs/binding-nodejs/index.html | 2 +-
docs/binding-python/index.html | 2 +-
docs/dav-server/index.html | 2 +-
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/BlockingReader.html | 4 +-
docs/nodejs/classes/BlockingWriter.html | 8 +-
docs/nodejs/classes/Capability.html | 74 +--
docs/nodejs/classes/Entry.html | 4 +-
docs/nodejs/classes/ExternalObject.html | 4 +-
docs/nodejs/classes/Layer.html | 2 +-
docs/nodejs/classes/Lister.html | 4 +-
docs/nodejs/classes/Metadata.html | 18 +-
docs/nodejs/classes/Operator.html | 64 +--
docs/nodejs/classes/Reader.html | 6 +-
docs/nodejs/classes/RetryLayer.html | 14 +-
docs/nodejs/classes/Writer.html | 8 +-
docs/nodejs/interfaces/ListOptions.html | 4 +-
docs/nodejs/interfaces/PresignedRequest.html | 8 +-
docs/nodejs/interfaces/WriteOptions.html | 12 +-
docs/nodejs/interfaces/WriterOptions.html | 12 +-
.../object_store_opendal/struct.OpendalStore.html | 32 +-
docs/object-store-opendal/search-index.js | 2 +-
.../src/object_store_opendal/store.rs.html | 58 +--
docs/object-store/index.html | 2 +-
docs/overview/index.html | 2 +-
docs/python/opendal.html | 477 +++++++++--------
docs/python/search.js | 2 +-
docs/quickstart/index.html | 2 +-
docs/rust-core/index.html | 2 +-
docs/rust/opendal/all.html | 2 +-
docs/rust/opendal/enum.EntryMode.html | 2 +-
docs/rust/opendal/enum.Metakey.html | 4 +-
docs/rust/opendal/enum.Scheme.html | 7 +-
docs/rust/opendal/layers/struct.MetricsLayer.html | 4 +-
docs/rust/opendal/operator_functions/index.html | 2 +-
.../operator_functions/struct.FunctionDelete.html | 6 +-
.../operator_functions/struct.FunctionList.html | 12 +-
.../operator_functions/struct.FunctionLister.html | 12 +-
.../operator_functions/struct.FunctionRead.html | 6 +-
.../operator_functions/struct.FunctionReader.html | 16 +-
.../operator_functions/struct.FunctionStat.html | 10 +-
.../operator_functions/struct.FunctionWrite.html | 22 +-
.../operator_functions/struct.FunctionWriter.html | 27 +-
.../operator_futures/struct.OperatorFuture.html | 4 +-
.../opendal/operator_futures/type.FutureWrite.html | 4 +-
.../operator_futures/type.FutureWriter.html | 4 +-
docs/rust/opendal/raw/enum.FourWays.html | 8 +-
docs/rust/opendal/raw/enum.Operation.html | 9 +-
docs/rust/opendal/raw/enum.PresignOperation.html | 2 +-
docs/rust/opendal/raw/enum.TwoWays.html | 2 +-
docs/rust/opendal/raw/index.html | 2 +-
docs/rust/opendal/raw/oio/enum.ListOperation.html | 9 +-
docs/rust/opendal/raw/oio/enum.ReadOperation.html | 7 +-
docs/rust/opendal/raw/oio/enum.WriteOperation.html | 7 +-
docs/rust/opendal/raw/oio/index.html | 3 +-
docs/rust/opendal/raw/oio/sidebar-items.js | 2 +-
...rarchyLister.html => struct.ChunkedWriter.html} | 28 +-
docs/rust/opendal/raw/oio/struct.FlatLister.html | 6 +-
.../opendal/raw/oio/struct.HierarchyLister.html | 2 +-
docs/rust/opendal/raw/oio/struct.PrefixLister.html | 4 +-
docs/rust/opendal/raw/oio/struct.QueueBuf.html | 17 +-
docs/rust/opendal/raw/oio/trait.BlockingRead.html | 2 +-
docs/rust/opendal/raw/oio/trait.List.html | 2 +-
docs/rust/opendal/raw/oio/trait.Read.html | 2 +-
docs/rust/opendal/raw/oio/trait.Write.html | 2 +-
.../write/chunked_write/struct.ChunkedWriter.html | 11 +
docs/rust/opendal/raw/ops/struct.OpWriter.html | 11 -
docs/rust/opendal/raw/sidebar-items.js | 2 +-
.../rust/opendal/raw/struct.BytesContentRange.html | 4 +-
docs/rust/opendal/raw/struct.BytesRange.html | 2 +-
docs/rust/opendal/raw/struct.HttpBody.html | 4 +-
docs/rust/opendal/raw/struct.OpCopy.html | 6 +-
docs/rust/opendal/raw/struct.OpRename.html | 6 +-
docs/rust/opendal/raw/struct.OpWrite.html | 36 +-
docs/rust/opendal/raw/struct.OpWriter.html | 123 -----
docs/rust/opendal/raw/trait.Layer.html | 2 +-
docs/rust/opendal/services/struct.AliyunDrive.html | 18 +-
.../opendal/services/struct.AliyunDriveConfig.html | 6 +-
docs/rust/opendal/struct.BlockingOperator.html | 56 +-
docs/rust/opendal/struct.BlockingWriter.html | 28 +-
docs/rust/opendal/struct.Buffer.html | 20 +-
docs/rust/opendal/struct.Error.html | 2 +-
docs/rust/opendal/struct.Operator.html | 40 +-
docs/rust/opendal/struct.StdWriter.html | 6 +-
docs/rust/opendal/struct.Writer.html | 14 +-
docs/rust/opendal/trait.Builder.html | 2 +-
docs/rust/search-index.js | 2 +-
docs/rust/search.desc/opendal/opendal-desc-0-.js | 2 +-
docs/rust/src-files.js | 2 +-
docs/rust/src/opendal/layers/complete.rs.html | 64 ++-
docs/rust/src/opendal/layers/metrics.rs.html | 76 +--
docs/rust/src/opendal/lib.rs.html | 2 +-
.../rust/src/opendal/raw/oio/buf/queue_buf.rs.html | 26 +-
.../oio/write/chunked_write.rs.html} | 566 ++++-----------------
docs/rust/src/opendal/raw/oio/write/mod.rs.html | 6 +
docs/rust/src/opendal/raw/ops.rs.html | 68 +--
.../opendal/services/aliyun_drive/backend.rs.html | 14 +-
.../src/opendal/services/aliyun_drive/core.rs.html | 2 +
.../opendal/services/aliyun_drive/writer.rs.html | 284 ++++++++---
.../types/blocking_write/blocking_writer.rs.html | 74 +--
.../types/blocking_write/std_writer.rs.html | 6 +-
.../{context/read.rs.html => context.rs.html} | 2 +-
docs/rust/src/opendal/types/context/mod.rs.html | 45 --
docs/rust/src/opendal/types/mod.rs.html | 4 +-
.../types/operator/blocking_operator.rs.html | 28 +-
.../src/opendal/types/operator/operator.rs.html | 28 +-
.../types/operator/operator_functions.rs.html | 106 +---
.../types/operator/operator_futures.rs.html | 32 +-
.../src/opendal/types/write/buffer_sink.rs.html | 50 +-
.../types/write/futures_async_writer.rs.html | 34 +-
.../opendal/types/write/futures_bytes_sink.rs.html | 34 +-
docs/rust/src/opendal/types/write/writer.rs.html | 36 +-
docs/rust/trait.impl/core/clone/trait.Clone.js | 2 +-
docs/rust/trait.impl/core/default/trait.Default.js | 2 +-
docs/rust/trait.impl/core/fmt/trait.Debug.js | 2 +-
docs/rust/trait.impl/core/marker/trait.Freeze.js | 2 +-
docs/rust/trait.impl/core/marker/trait.Send.js | 2 +-
docs/rust/trait.impl/core/marker/trait.Sync.js | 2 +-
docs/rust/trait.impl/core/marker/trait.Unpin.js | 2 +-
.../core/panic/unwind_safe/trait.RefUnwindSafe.js | 2 +-
.../core/panic/unwind_safe/trait.UnwindSafe.js | 2 +-
docs/rust/type.impl/alloc/sync/struct.Arc.js | 2 +-
docs/unftp-sbe-opendal/search-index.js | 2 +-
.../unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js | 2 +-
.../src/unftp_sbe_opendal/lib.rs.html | 86 ----
.../unftp-sbe-opendal/unftp_sbe_opendal/index.html | 39 +-
.../unftp_sbe_opendal/struct.OpendalMetadata.html | 8 +-
.../unftp_sbe_opendal/struct.OpendalStorage.html | 18 +-
download/index.html | 4 +-
index.html | 2 +-
lunr-index-1719919260560.json | 1 -
lunr-index-1719977199931.json | 1 +
lunr-index.json | 2 +-
search-doc-1719919260560.json | 1 -
search-doc-1719977199931.json | 1 +
search-doc.json | 2 +-
176 files changed, 1327 insertions(+), 2029 deletions(-)
diff --git a/404.html b/404.html
index 71bc8f4fe7..72bc58e600 100644
--- a/404.html
+++ b/404.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tr [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/assets/js/main.0d9f5821.js b/assets/js/main.20117305.js
similarity index 99%
rename from assets/js/main.0d9f5821.js
rename to assets/js/main.20117305.js
index 7e0ccb2e44..a89d6348eb 100644
--- a/assets/js/main.0d9f5821.js
+++ b/assets/js/main.20117305.js
@@ -1,2 +1,2 @@
-/*! For license information please see main.0d9f5821.js.LICENSE.txt */
-(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8792],{4649:(e,t,n)=>{var r={"./prism-groovy":2600,"./prism-java":1330,"./prism-rust":8432};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=4649},6527:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(758);var r=n(2059),o=n.n(r),a=n(4054);con [...]
\ No newline at end of file
+/*! For license information please see main.20117305.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8792],{4649:(e,t,n)=>{var r={"./prism-groovy":2600,"./prism-java":1330,"./prism-rust":8432};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=4649},6527:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(758);var r=n(2059),o=n.n(r),a=n(4054);con [...]
\ No newline at end of file
diff --git a/assets/js/main.0d9f5821.js.LICENSE.txt b/assets/js/main.20117305.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.0d9f5821.js.LICENSE.txt
rename to assets/js/main.20117305.js.LICENSE.txt
diff --git a/blog/apache-opendal-graduated/index.html b/blog/apache-opendal-graduated/index.html
index b6342f24e7..a1a4c0391e 100644
--- a/blog/apache-opendal-graduated/index.html
+++ b/blog/apache-opendal-graduated/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Apache OpenDAL™ is now Graduated | 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/apache-opendal-graduated"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_t [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/apache-opendal-participates-in-gsoc-2024/index.html b/blog/apache-opendal-participates-in-gsoc-2024/index.html
index 0eb0715ea3..0648b0fa8f 100644
--- a/blog/apache-opendal-participates-in-gsoc-2024/index.html
+++ b/blog/apache-opendal-participates-in-gsoc-2024/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Apache OpenDAL™ participates in Google Summer of Code 2024 | 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/apache-opendal-participates-in-gsoc-2024"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="e [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/apache-opendal-participates-in-ospp-2024/index.html b/blog/apache-opendal-participates-in-ospp-2024/index.html
index 2eaaa52d09..be7f8ba361 100644
--- a/blog/apache-opendal-participates-in-ospp-2024/index.html
+++ b/blog/apache-opendal-participates-in-ospp-2024/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Apache OpenDAL™ participates in Open Source Promotion Plan 2024 | 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/apache-opendal-participates-in-ospp-2024"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" conte [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 42bf2a90bb..90bdcb9644 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index a701cb71ae..467c8fef1f 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Apache 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/index.html b/blog/index.html
index 9f5c584173..adf3a37554 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="o [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 1627d3fc82..9602d27413 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Apache OpenDAL™: 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusau [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index 52ac719ea4..c31da6b61a 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
index ed5a421901..b7f80557d7 100644
--- a/blog/owo-1/index.html
+++ b/blog/owo-1/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><met [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 13f2f0e917..53535a5aee 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">5 posts tagged with "announcement" | 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 514fbd1c67..bda2eac4d8 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" proper [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index aecda7053a..da4156dde5 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">One post tagged with "internal" | 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lang [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
index 87ac579a0d..4dd4b0aa33 100644
--- a/blog/tags/owo/index.html
+++ b/blog/tags/owo/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">One post tagged with "owo" | 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" cont [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
index 28d84b5962..84d555f996 100644
--- a/community/category/committers/index.html
+++ b/community/category/committers/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/events/index.html b/community/category/events/index.html
index df65a9b55f..bb14f9c71b 100644
--- a/community/category/events/index.html
+++ b/community/category/events/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Events | 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/events"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/pmc-members/index.html b/community/category/pmc-members/index.html
index f9daaab283..31e0d00bf6 100644
--- a/community/category/pmc-members/index.html
+++ b/community/category/pmc-members/index.html
@@ -6,7 +6,7 @@
<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/pmc-members"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
index 0d37b8f209..637c1aca5b 100644
--- a/community/category/reference/index.html
+++ b/community/category/reference/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/category/release/index.html b/community/category/release/index.html
index c34685d6e1..9fa65a6352 100644
--- a/community/category/release/index.html
+++ b/community/category/release/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/release"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/committers/onboarding/index.html b/community/committers/onboarding/index.html
index f275bb1782..cecd1254e1 100644
--- a/community/committers/onboarding/index.html
+++ b/community/committers/onboarding/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">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/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/committers/request_for_adding_secrets/index.html b/community/committers/request_for_adding_secrets/index.html
index 2e52343ca9..d21f4b8a49 100644
--- a/community/committers/request_for_adding_secrets/index.html
+++ b/community/committers/request_for_adding_secrets/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Request for adding secrets | 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/request_for_adding_secrets"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name=" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/events/gsoc-proposal-guide/index.html b/community/events/gsoc-proposal-guide/index.html
index e5b5374eb6..0f02de020a 100644
--- a/community/events/gsoc-proposal-guide/index.html
+++ b/community/events/gsoc-proposal-guide/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">GSoC Project Proposal Guidance | 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/events/gsoc-proposal-guide"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/events/ospp-proposal-guide/index.html b/community/events/ospp-proposal-guide/index.html
index ae0edc5e90..84adb9d870 100644
--- a/community/events/ospp-proposal-guide/index.html
+++ b/community/events/ospp-proposal-guide/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">OSPP Project Proposal Guidance | 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/events/ospp-proposal-guide"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/index.html b/community/index.html
index 60fac0c9ba..0aa84e83d5 100644
--- a/community/index.html
+++ b/community/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/maturity/index.html b/community/maturity/index.html
index 4cac1cac75..22d85a8371 100644
--- a/community/maturity/index.html
+++ b/community/maturity/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Maturity | 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/maturity"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/board-reporting/index.html b/community/pmc_members/board-reporting/index.html
index 7d1b40b436..a3388867ed 100644
--- a/community/pmc_members/board-reporting/index.html
+++ b/community/pmc_members/board-reporting/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Board reporting | 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/pmc_members/board-reporting"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" c [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/nominate-committer/index.html b/community/pmc_members/nominate-committer/index.html
index 8e73c52a8f..06ee47a20c 100644
--- a/community/pmc_members/nominate-committer/index.html
+++ b/community/pmc_members/nominate-committer/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Nominate Committer | 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/pmc_members/nominate-committer"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:langu [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/nominate-pmc-member/index.html b/community/pmc_members/nominate-pmc-member/index.html
index d86d197fa8..69d0af4fb5 100644
--- a/community/pmc_members/nominate-pmc-member/index.html
+++ b/community/pmc_members/nominate-pmc-member/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Nominate PMC Member | 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/pmc_members/nominate-pmc-member"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lan [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/pmc_members/onboarding/index.html b/community/pmc_members/onboarding/index.html
index 57cdfe400c..524d0baee1 100644
--- a/community/pmc_members/onboarding/index.html
+++ b/community/pmc_members/onboarding/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">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/pmc_members/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/index.html b/community/release/index.html
index 844ff82c66..7120065c46 100644
--- a/community/release/index.html
+++ b/community/release/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Create a 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/release/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/reference/generate_release_note/index.html b/community/release/reference/generate_release_note/index.html
index fe1e75058c..10dc642288 100644
--- a/community/release/reference/generate_release_note/index.html
+++ b/community/release/reference/generate_release_note/index.html
@@ -6,7 +6,7 @@
<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/release/reference/generate_release_note"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="doc [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/reference/setup_gpg/index.html b/community/release/reference/setup_gpg/index.html
index 3346802608..fe93a410c3 100644
--- a/community/release/reference/setup_gpg/index.html
+++ b/community/release/reference/setup_gpg/index.html
@@ -6,7 +6,7 @@
<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/release/reference/setup_gpg"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" con [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/release/verify/index.html b/community/release/verify/index.html
index 26d9cf94ab..42570526b1 100644
--- a/community/release/verify/index.html
+++ b/community/release/verify/index.html
@@ -6,7 +6,7 @@
<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/release/verify"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" con [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/community/security/index.html b/community/security/index.html
index 0b8b68470d..a323783b25 100644
--- a/community/security/index.html
+++ b/community/security/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Security | 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/security"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-java/index.html b/docs/binding-java/index.html
index ae3ea18c26..e10fbfece6 100644
--- a/docs/binding-java/index.html
+++ b/docs/binding-java/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Java API | 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/binding-java"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-nodejs/index.html b/docs/binding-nodejs/index.html
index 6097b125dd..9dc95532ce 100644
--- a/docs/binding-nodejs/index.html
+++ b/docs/binding-nodejs/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Node.js API | 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/binding-nodejs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/binding-python/index.html b/docs/binding-python/index.html
index baea77aff8..35024bf4d0 100644
--- a/docs/binding-python/index.html
+++ b/docs/binding-python/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Python API | 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/binding-python"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/dav-server/index.html b/docs/dav-server/index.html
index 50a30e1087..9882128b51 100644
--- a/docs/dav-server/index.html
+++ b/docs/dav-server/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">WebDAV Integration | 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/dav-server"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 92ccbaf06a..e9c88262ba 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 2024-07-02 11:08:16 </i>
+<i style="float:right;">Last updated 2024-07-03 03:09:40 </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 ddfeeb64e3..b62cab428d 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 2024-07-02 11:08:16 </i>
+<i style="float:right;">Last updated 2024-07-03 03:09:40 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index 7294ccbaf4..608898daad 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 2024-07-02 11:08:16 </i>
+<i style="float:right;">Last updated 2024-07-03 03:09:40 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 56b803a036..337a71d5a5 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -1,5 +1,5 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingLister | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L706">generated.d.ts:706</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L706">generated.d.ts:706</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingLister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingReader.html b/docs/nodejs/classes/BlockingReader.html
index 87ba4974e1..dd76576e11 100644
--- a/docs/nodejs/classes/BlockingReader.html
+++ b/docs/nodejs/classes/BlockingReader.html
@@ -1,7 +1,7 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingReader | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L597">generated.d.ts:597</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L597">generated.d.ts:597</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingReader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
<a href="BlockingReader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingWriter.html b/docs/nodejs/classes/BlockingWriter.html
index e0f3da6e35..398b4b12d9 100644
--- a/docs/nodejs/classes/BlockingWriter.html
+++ b/docs/nodejs/classes/BlockingWriter.html
@@ -1,6 +1,6 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingWriter | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L618">generated.d.ts:618</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L618">generated.d.ts:618</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingWriter.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
<a href="BlockingWriter.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
<a href="BlockingWriter.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
<p>Close this writer.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writerSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span><br/><span class="hl-5">writer</span><span class="hl-1 [...]
</code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L649">generated.d.ts:649</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L649">generated.d.ts:649</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
<p>&mut self in async napi methods should be marked as unsafe</p>
</blockquote>
<p>Write bytes into this writer.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span> [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Capability.html b/docs/nodejs/classes/Capability.html
index 2fef2e3710..2719b5c09d 100644
--- a/docs/nodejs/classes/Capability.html
+++ b/docs/nodejs/classes/Capability.html
@@ -7,7 +7,7 @@
<li>What's current Operator max supports batch operations count.</li>
</ul>
<p>Add fields of Capabilities to be public and can be accessed directly.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Capability.html#batch" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch</span></a>
<a href="Capability.html#batchDelete" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Delete</span></a>
<a href="Capability.html#batchMaxOperations" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Max<wbr/>Operations</span></a>
@@ -45,43 +45,43 @@
<a href="Capability.html#writeWithContentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Disposition</span></a>
<a href="Capability.html#writeWithContentType" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Type</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Cap [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L196">generated.d.ts:196</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L198">generated.d.ts:198</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L200">generated.d.ts:200</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L202">generated.d.ts:202</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L176">generated.d.ts:176</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="#create [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L172">generated.d.ts:172</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L174">generated.d.ts:174</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L180">generated.d.ts:180</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L182">generated.d.ts:182</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L186">generated.d.ts:186</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L184">generated.d.ts:184</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L188">generated.d.ts:188</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="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L190">generated.d.ts:190</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="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L192">generated.d.ts:192</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="# [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L194">generated.d.ts:194</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Matc [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/ [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>Wit [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L178">generated.d.ts:178</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="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Matc [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</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="P [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span> [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L196">generated.d.ts:196</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L198">generated.d.ts:198</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L200">generated.d.ts:200</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L202">generated.d.ts:202</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L176">generated.d.ts:176</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="#create [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L172">generated.d.ts:172</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L174">generated.d.ts:174</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L180">generated.d.ts:180</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L182">generated.d.ts:182</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L186">generated.d.ts:186</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L184">generated.d.ts:184</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L188">generated.d.ts:188</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="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L190">generated.d.ts:190</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="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L192">generated.d.ts:192</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="# [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L194">generated.d.ts:194</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Matc [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/ [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>Wit [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L178">generated.d.ts:178</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="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Matc [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</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="P [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span> [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align< [...]
<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L164">generated.d.ts:164</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L164">generated.d.ts:164</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L152">generated.d.ts:152</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L152">generated.d.ts:152</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" [...]
<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L158">generated.d.ts:158</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L158">generated.d.ts:158</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L170">generated.d.ts:170</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L146">generated.d.ts:146</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/ [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Conten [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L170">generated.d.ts:170</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L146">generated.d.ts:146</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/ [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Conten [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index 8e5dd538cb..3e5533c322 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -1,5 +1,5 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Entry | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../ [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L566">generated.d.ts:566</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L566">generated.d.ts:566</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Entry.html#path" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>path</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ent [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L568">generated.d.ts:568</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L568">generated.d.ts:568</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/ExternalObject.html b/docs/nodejs/classes/ExternalObject.html
index 283c609c58..3c2302867d 100644
--- a/docs/nodejs/classes/ExternalObject.html
+++ b/docs/nodejs/classes/ExternalObject.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="ExternalObject.html#reflection-5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span><em>Property</em></span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Layer.html b/docs/nodejs/classes/Layer.html
index c9c71c9da2..f5180672c1 100644
--- a/docs/nodejs/classes/Layer.html
+++ b/docs/nodejs/classes/Layer.html
@@ -1,3 +1,3 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Layer | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../ [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L710">generated.d.ts:710</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L710">generated.d.ts:710</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lay [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 1ed2b3191a..6339b84e59 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -1,10 +1,10 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Lister | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L691">generated.d.ts:691</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L691">generated.d.ts:691</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Lister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lis [...]
<p>&mut self in async napi methods should be marked as unsafe</p>
</blockquote>
<p>napi will make sure the function is safe, and we didn't do unsafe
things internally.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</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">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9 [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</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">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a5 [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index c271045552..e3d901ba24 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -1,5 +1,5 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Metadata | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L571">generated.d.ts:571</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L571">generated.d.ts:571</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Metadata.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Disposition</span></a>
<a href="Metadata.html#contentLength" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Length</span></a>
<a href="Metadata.html#contentMd5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Md5</span></a>
@@ -9,12 +9,12 @@
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Metadata.html#isDirectory" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>Directory</span></a>
<a href="Metadata.html#isFile" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>File</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Met [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L577">generated.d.ts:577</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L579">generated.d.ts:579</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L581">generated.d.ts:581</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L583">generated.d.ts:583</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L585">generated.d.ts:585</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L577">generated.d.ts:577</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L579">generated.d.ts:579</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L581">generated.d.ts:581</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L583">generated.d.ts:583</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L585">generated.d.ts:585</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
<p>We will output this time in RFC3339 format like <code>1996-12-19T16:39:57+08:00</code>.</p>
-</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L591">generated.d.ts:591</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L573">generated.d.ts:573</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 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L575">generated.d.ts:575</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
+</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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L591">generated.d.ts:591</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L573">generated.d.ts:573</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 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L575">generated.d.ts:575</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index 28fc7a9ba6..8ccc964824 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=" [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Operator.html#capability" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>capability</span></a>
<a href="Operator.html#check" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>check</span></a>
<a href="Operator.html#copy" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>copy</span></a>
@@ -33,38 +33,38 @@
And the options,
please refer to the documentation of the corresponding service for the corresponding parameters.
Note that the current options key is snake_case.</p>
-</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L211">generated.d.ts:211</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="capability" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>capability</span><a href="#capability" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBo [...]
-</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L213">generated.d.ts:213</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</ [...]
+</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L211">generated.d.ts:211</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="capability" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>capability</span><a href="#capability" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBo [...]
+</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L213">generated.d.ts:213</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</ [...]
<p>We will send a <code>list</code> request to the given path and return any errors we met.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">check</span><span class="hl-1">();</span>
</code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L256">generated.d.ts:256</a></li></ul></aside></li></ul></section><section class [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L256">generated.d.ts:256</a></li></ul></aside></li></ul></section><section class [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copy</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-2">"path/to/dest"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><span class="tsd-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><span class="tsd-s [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copySync</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-2">"path/to/dest"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDir</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDirSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generat [...]
<a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Delete not existing error won’t return errors.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">delete</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">deleteSync</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generat [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExist</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd- [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExistSync</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/gene [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol"><</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">></span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol"><</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">></span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
<p>This function will return an array of entries.</p>
<p>An error will be returned if given path doesn't end with <code>/</code>.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">);</span><br/ [...]
@@ -72,7 +72,7 @@ Note that the current options key is snake_case.</p>
<a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
<pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
<p>This function will return an array of entries.</p>
<p>An error will be returned if given path doesn't end with <code>/</code>.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">);</span><br/><span class="hl-4">for</span><span class="hl-1"> (</s [...]
@@ -80,45 +80,45 @@ Note that the current options key is snake_case.</p>
<a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
<pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true</span><span class="hl-1"> });</span><br/><span class= [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
<p>Unit of <code>expires</code> is seconds.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignRead</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
<p>Unit of <code>expires</code> is seconds.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignStat</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
<p>Unit of <code>expires</code> is seconds.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignWrite</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0 [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><a href="../i [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">read</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd- [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">readSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/gene [...]
<p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><a href="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">></span></h4>< [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><a href="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">></span></h4>< [...]
<p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
<a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
<a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">remove</span><span class="hl-1">([</span><span class="hl-2">"abc"</span><span class="hl-1">, </span><span class="hl-2">"def"</span><span class="hl-1">]);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&g [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&g [...]
<a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
<a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">removeAll</span><span class="hl-1">(</span><span class="hl-2">"path/to/dir/"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typ [...]
<p>It's similar to <code>mv</code> command.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">rename</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-2">"path/to/dest"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><span class="tsd-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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"><</span><span class="tsd-s [...]
<p>It's similar to <code>mv</code> command.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">renameSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-2">"path/to/dest"</span><span class="hl-1">);</span>
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
<a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Use stat if you:</p>
<ul>
<li>Want to detect the outside changes of a path.</li>
@@ -127,17 +127,17 @@ Note that the current options key is snake_case.</p>
<p>You may want to use <code>metadata</code> if you are working with entries returned by <code>Lister</code>. It’s highly possible that metadata you want has already been cached.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">stat</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span><br/><span c [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">></span></ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">></span></ [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">statSync</span><span class="hl-1">(</span><span class="hl-2">"test"</span><span class="hl-1">);</span><br/><span class="hl-4">if</span><span class="hl-1"> (</span><span [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">write</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><spa [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writeSync</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><span class="hl-2">"hello world"</span><span cla [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <s [...]
<p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type [...]
<p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><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><a href="../interfaces/WriterOptions.html" class="tsd-signature-type [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Reader.html b/docs/nodejs/classes/Reader.html
index c518efbf74..1ff7f43dba 100644
--- a/docs/nodejs/classes/Reader.html
+++ b/docs/nodejs/classes/Reader.html
@@ -1,11 +1,11 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Reader | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Reader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
<a href="Reader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Rea [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
<p>&mut self in async napi methods should be marked as unsafe</p>
</blockquote>
<p>Read bytes from this reader into given buffer.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</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"><</span><span class="tsd-signature-type">bigint</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</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"><</span><span class="tsd-signature-type">bigint</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/RetryLayer.html b/docs/nodejs/classes/RetryLayer.html
index 9676881cb4..8e6fa58b29 100644
--- a/docs/nodejs/classes/RetryLayer.html
+++ b/docs/nodejs/classes/RetryLayer.html
@@ -8,27 +8,27 @@ If the operation still failed, this layer will set error to
visit <a href="https://github.com/apache/opendal/issues/1223">this issue</a> for more details.</p>
<a id="md:examples" class="tsd-anchor"></a><h1><a href="#md:examples">Examples</a></h1><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">op</span><span class="hl-1"> = </span><span class="hl-6">new</span><span class="hl-1"> </span><span class="hl-0">Operator</span><span class="hl-1">(</span><span class="hl-2">"file"</span><span class="hl-1">, { </span><span class="hl-5">root:</span><span class="hl-1"> </span><spa [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L738">generated.d.ts:738</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"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L738">generated.d.ts:738</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"><h5 class="tsd-index-heading uppercase" ro [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="RetryLayer.html#factor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>factor</span></a>
<a href="RetryLayer.html#jitter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>jitter</span></a>
<a href="RetryLayer.html#maxDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Delay</span></a>
<a href="RetryLayer.html#maxTimes" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Times</span></a>
<a href="RetryLayer.html#minDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>min<wbr/>Delay</span></a>
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="RetryLayer.html#build" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>build</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
<a id="md:panics" class="tsd-anchor"></a><h1><a href="#md:panics">Panics</a></h1><p>This function will panic if the input factor is smaller than <code>1.0</code>.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated. [...]
<p>If jitter is enabled, ExponentialBackoff will add a random jitter in <code>[0, min_delay)</code>
to current delay.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated [...]
<p>Delay will not increase if the current delay is larger than max_delay.</p>
<a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
<li>The unit of max_delay is millisecond.</li>
</ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated. [...]
<p>Backoff will return <code>None</code> if max times are reached.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated. [...]
<a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
<li>The unit of min_delay is millisecond.</li>
</ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated. [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated. [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Writer.html b/docs/nodejs/classes/Writer.html
index 07b67b176a..68e10a75a0 100644
--- a/docs/nodejs/classes/Writer.html
+++ b/docs/nodejs/classes/Writer.html
@@ -1,6 +1,6 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Writer | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src=".. [...]
manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content [...]
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Writer.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
<a href="Writer.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
<a href="Writer.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
<p>Close this writer.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span> [...]
</code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside></li></ul></section><section class [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside></li></ul></section><section class [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
<p>&mut self in async napi methods should be marked as unsafe</p>
</blockquote>
<p>Write bytes into this writer.</p>
<a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">"path/to/file"</span><span class="hl-1">);</span> [...]
</code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><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"><</span><span class="tsd-signature-type [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/ListOptions.html b/docs/nodejs/interfaces/ListOptions.html
index ffed8f8db5..aeea0f651c 100644
--- a/docs/nodejs/interfaces/ListOptions.html
+++ b/docs/nodejs/interfaces/ListOptions.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async sr [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async sr [...]
<a href="ListOptions.html#recursive" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>recursive?</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index 2280158696..3b8df2c7df 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -1,8 +1,8 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>PresignedRequest | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script asy [...]
-</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span> </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol"><</span><span class=" [...]
+</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span> </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol"><</span><span class=" [...]
<a href="PresignedRequest.html#method" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>method</span></a>
<a href="PresignedRequest.html#url" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>url</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="headers" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>headers</span><a href="#headers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">headers</span><span class="tsd-signature-symbol">: [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg>< [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L96">generated.d.ts:96</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L98">generated.d.ts:98</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg>< [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L96">generated.d.ts:96</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 viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L98">generated.d.ts:98</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/WriteOptions.html b/docs/nodejs/interfaces/WriteOptions.html
index 19fc441b46..34be1ab1d5 100644
--- a/docs/nodejs/interfaces/WriteOptions.html
+++ b/docs/nodejs/interfaces/WriteOptions.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriteOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async s [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriteOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async s [...]
<a href="WriteOptions.html#cacheControl" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>cache<wbr/>Control?</span></a>
<a href="WriteOptions.html#chunk" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>chunk?</span></a>
<a href="WriteOptions.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>content<wbr/>Disposition?</span></a>
@@ -8,12 +8,12 @@
<li>It always appends content to the end of the file.</li>
<li>It will create file if the path does not exist.</li>
</ul>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L44">generated.d.ts:44</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L44">generated.d.ts:44</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
<p>If chunk is set, the data will be chunked by the underlying writer.</p>
<a id="md:note" class="tsd-anchor"></a><h2><a href="#md:note">NOTE</a></h2><p>A service could have their own minimum chunk size while perform write
operations like multipart uploads. So the chunk size may be larger than
the given buffer size.</p>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/WriterOptions.html b/docs/nodejs/interfaces/WriterOptions.html
index a45d49e78a..85b3f78b15 100644
--- a/docs/nodejs/interfaces/WriterOptions.html
+++ b/docs/nodejs/interfaces/WriterOptions.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriterOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>WriterOptions | Apache OpenDAL™ - v0.46.2</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async [...]
<a href="WriterOptions.html#cacheControl" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>cache<wbr/>Control?</span></a>
<a href="WriterOptions.html#chunk" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>chunk?</span></a>
<a href="WriterOptions.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>content<wbr/>Disposition?</span></a>
@@ -8,12 +8,12 @@
<li>It always appends content to the end of the file.</li>
<li>It will create file if the path does not exist.</li>
</ul>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L73">generated.d.ts:73</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L91">generated.d.ts:91</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L73">generated.d.ts:73</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="cacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>cache<wbr/>Control</span><a href="#cacheControl" aria-label="Permalink" class="tsd- [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L91">generated.d.ts:91</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="chunk" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>chunk</span><a href="#chunk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox=" [...]
<p>If chunk is set, the data will be chunked by the underlying writer.</p>
<a id="md:note" class="tsd-anchor"></a><h2><a href="#md:note">NOTE</a></h2><p>A service could have their own minimum chunk size while perform write
operations like multipart uploads. So the chunk size may be larger than
the given buffer size.</p>
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L85">generated.d.ts:85</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L89">generated.d.ts:89</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/c9c2bb2/bindings/nodejs/generated.d.ts#L87">generated.d.ts:87</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L85">generated.d.ts:85</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Disposition</span><a href="#contentDisposition" aria-label="Perm [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L89">generated.d.ts:89</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anc [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/a58e802/bindings/nodejs/generated.d.ts#L87">generated.d.ts:87</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/object-store-opendal/object_store_opendal/struct.OpendalStore.html b/docs/object-store-opendal/object_store_opendal/struct.OpendalStore.html
index bcb862e659..d2f37b7751 100644
--- a/docs/object-store-opendal/object_store_opendal/struct.OpendalStore.html
+++ b/docs/object-store-opendal/object_store_opendal/struct.OpendalStore.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpendalStore implements ObjectStore trait by using opendal."><title>OpendalStore in object_store_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf084 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpendalStore implements ObjectStore trait by using opendal."><title>OpendalStore in object_store_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf084 [...]
<p>This allows users to use opendal as an object store without extra cost.</p>
<p>Visit [<code>opendal::services</code>] for more information about supported services.</p>
@@ -45,15 +45,15 @@
<span class="macro">assert_eq!</span>(content, bytes);
}</code></pre></div>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpendalStore" class="impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#100-118">source</a><a href="#impl-OpendalStore" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpendalStore.html" title=" [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-OpendalStore" class="impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#120-129">source</a><a href="#impl-Debug-for-OpendalStore" class="anchor">§</a><h3 class="code-head [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpendalStore" class="impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#99-104">source</a><a href="#impl-OpendalStore" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpendalStore.html" title="s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-OpendalStore" class="impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#106-116">source</a><a href="#impl-Debug-for-OpendalStore" class="anchor">§</a><h3 class="code-head [...]
&'life0 self,
location: &'life1 Path,
bytes: PutPayload,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<PutResult>> + <a class="trait" href="https://do [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Save the provided bytes to the specified location <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.put_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#164-176">source</a><a href="#method.put_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_opts</a><'life0, 'life1, 'async_trait>(
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Save the provided bytes to the specified location <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.put_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#151-163">source</a><a href="#method.put_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_opts</a><'life0, 'life1, 'async_trait>(
&'life0 self,
_location: &'life1 Path,
_bytes: PutPayload,
@@ -61,33 +61,33 @@
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<PutResult>> + <a class="trait" href="https://do [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Save the provided <code>payload</code> to <code>location</code> with the given options</div></details><details class="toggle method-toggle" open><summary><section id="method.put_multipart" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#178-188">source</a><a href="#method.put_multipart" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_multipart< [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Save the provided <code>payload</code> to <code>location</code> with the given options</div></details><details class="toggle method-toggle" open><summary><section id="method.put_multipart" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#165-175">source</a><a href="#method.put_multipart" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_multipart< [...]
&'life0 self,
_location: &'life1 Path,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<<a class="struct" href="https://doc.rust-lang.org/nig [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a multipart upload <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.put_multipart_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#190-201">source</a><a href="#method.put_multipart_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_multipart_opts</a><'life0, 'life1, 'asyn [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a multipart upload <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.put_multipart_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#177-188">source</a><a href="#method.put_multipart_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">put_multipart_opts</a><'life0, 'life1, 'asyn [...]
&'life0 self,
_location: &'life1 Path,
_opts: PutMultipartOpts,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<<a class="struct" href="https://doc.rust-lang.org/nig [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a multipart upload with options <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#203-245">source</a><a href="#method.get" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get</a><'life0, 'life1, 'async_trait>(
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a multipart upload with options <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#190-232">source</a><a href="#method.get" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get</a><'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<GetResult>> + <a class="trait" href="https://do [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Return the bytes that are stored at the specified location.</div></details><details class="toggle method-toggle" open><summary><section id="method.get_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#247-258">source</a><a href="#method.get_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_opts</a><'life0, 'life1, 'async_trait>(
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Return the bytes that are stored at the specified location.</div></details><details class="toggle method-toggle" open><summary><section id="method.get_opts" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#234-245">source</a><a href="#method.get_opts" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_opts</a><'life0, 'life1, 'async_trait>(
&'life0 self,
_location: &'life1 Path,
_options: GetOptions,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<GetResult>> + <a class="trait" href="https://do [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a get request with options</div></details><details class="toggle method-toggle" open><summary><section id="method.get_range" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#260-271">source</a><a href="#method.get_range" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_range</a><'life0, 'life1, 'async_trait>(
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Perform a get request with options</div></details><details class="toggle method-toggle" open><summary><section id="method.get_range" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#247-258">source</a><a href="#method.get_range" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_range</a><'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>,
@@ -95,23 +95,23 @@
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Return the bytes that are stored at the specified location
-in the given byte range. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.head" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#273-288">source</a><a href="#method.head" class="anchor">§</a><h4 class="code-header">fn <a class="fn">head</a><'life0, 'life1, 'async_trait>(
+in the given byte range. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.head" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#260-275">source</a><a href="#method.head" class="anchor">§</a><h4 class="code-header">fn <a class="fn">head</a><'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<ObjectMeta>> + <a class="trait" href="https://d [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Return the metadata for the specified location</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#290-298">source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a><'life0, 'life1, 'async_trait>(
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Return the metadata for the specified location</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#277-285">source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a><'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<<a class="primitive" href="https://doc.rust-lang.org/ [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete the object at the specified location.</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#300-324">source</a><a href="#method.list" class="anchor">§</a><h4 class="code-header">fn <a class="fn">list</a>(&self, prefix: <a class="enum" href="https://doc.rust-lang.or [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete the object at the specified location.</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#287-311">source</a><a href="#method.list" class="anchor">§</a><h4 class="code-header">fn <a class="fn">list</a>(&self, prefix: <a class="enum" href="https://doc.rust-lang.or [...]
&self,
prefix: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&Path>,
offset: &Path,
-) -> BoxStream<'_, Result<ObjectMeta>></h4></section></summary><div class='docblock'>List all the objects with the given prefix and a location greater than <code>offset</code> <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.list_with_delimiter" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#368-398">source</a><a href="#method.list_with_delimiter" class="anchor">§</a> [...]
+) -> BoxStream<'_, Result<ObjectMeta>></h4></section></summary><div class='docblock'>List all the objects with the given prefix and a location greater than <code>offset</code> <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.list_with_delimiter" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#355-385">source</a><a href="#method.list_with_delimiter" class="anchor">§</a> [...]
&'life0 self,
prefix: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&'life1 Path>,
) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = Result<ListResult>> + <a class="trait" href="https://d [...]
@@ -119,7 +119,7 @@ in the given byte range. <a>Read more</a></div></details><details class="toggle
'life0: 'async_trait,
'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>List objects with the given prefix and an implementation specific
delimiter. Returns common prefixes (directories) in addition to object
-metadata. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#400-407">source</a><a href="#method.copy" class="anchor">§</a><h4 class="code-header">fn <a class="fn">copy</a><'life0, 'life1, 'life2, 'async_trait>(
+metadata. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#387-394">source</a><a href="#method.copy" class="anchor">§</a><h4 class="code-header">fn <a class="fn">copy</a><'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_from: &'life1 Path,
_to: &'life2 Path,
@@ -127,7 +127,7 @@ metadata. <a>Read more</a></div></details><details class="toggle method-toggle"
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
- 'life2: 'async_trait,</div></h4></section></summary><div class='docblock'>Copy an object from one path to another in the same object store. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#409-416">source</a><a href="#method.rename" class="anchor">§</a><h4 class="code-header">fn <a class="fn">rename</a><'life0, 'life1, 'l [...]
+ 'life2: 'async_trait,</div></h4></section></summary><div class='docblock'>Copy an object from one path to another in the same object store. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#396-403">source</a><a href="#method.rename" class="anchor">§</a><h4 class="code-header">fn <a class="fn">rename</a><'life0, 'life1, 'l [...]
&'life0 self,
_from: &'life1 Path,
_to: &'life2 Path,
@@ -135,7 +135,7 @@ metadata. <a>Read more</a></div></details><details class="toggle method-toggle"
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
- 'life2: 'async_trait,</div></h4></section></summary><div class='docblock'>Move an object from one path to another in the same object store. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.copy_if_not_exists" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#418-425">source</a><a href="#method.copy_if_not_exists" class="anchor">§</a><h4 class="code-header">fn <a class="fn">copy_if_ [...]
+ 'life2: 'async_trait,</div></h4></section></summary><div class='docblock'>Move an object from one path to another in the same object store. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.copy_if_not_exists" class="method trait-impl"><a class="src rightside" href="../src/object_store_opendal/store.rs.html#405-412">source</a><a href="#method.copy_if_not_exists" class="anchor">§</a><h4 class="code-header">fn <a class="fn">copy_if_ [...]
&'life0 self,
_from: &'life1 Path,
_to: &'life2 Path,
diff --git a/docs/object-store-opendal/search-index.js b/docs/object-store-opendal/search-index.js
index 7d6aedbeb4..4f1b3f1b2c 100644
--- a/docs/object-store-opendal/search-index.js
+++ b/docs/object-store-opendal/search-index.js
@@ -1 +1 @@
-var searchIndex=new Map(JSON.parse('[["object_store_opendal",{"t":"FNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["OpendalStore","borrow","borrow_mut","copy","copy_if_not_exists","delete","fmt","fmt","from","from","get","get_opts","get_range","head","into","list","list_with_delimiter","list_with_offset","new","put","put_multipart","put_multipart_opts","put_opts","rename","to_string","try_from","try_into","type_id"],"q":[[0,"object_store_opendal"],[28,"object_store_opendal::store"],[29,"object_store: [...]
\ No newline at end of file
+var searchIndex=new Map(JSON.parse('[["object_store_opendal",{"t":"FNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["OpendalStore","borrow","borrow_mut","copy","copy_if_not_exists","delete","fmt","fmt","from","from","get","get_opts","get_range","head","into","list","list_with_delimiter","list_with_offset","new","put","put_multipart","put_multipart_opts","put_opts","rename","to_string","try_from","try_into","type_id"],"q":[[0,"object_store_opendal"],[28,"object_store_opendal::store"],[29,"object_store: [...]
\ No newline at end of file
diff --git a/docs/object-store-opendal/src/object_store_opendal/store.rs.html b/docs/object-store-opendal/src/object_store_opendal/store.rs.html
index 21572ff012..5115cdccd7 100644
--- a/docs/object-store-opendal/src/object_store_opendal/store.rs.html
+++ b/docs/object-store-opendal/src/object_store_opendal/store.rs.html
@@ -530,19 +530,6 @@
<a href="#530" id="530">530</a>
<a href="#531" id="531">531</a>
<a href="#532" id="532">532</a>
-<a href="#533" id="533">533</a>
-<a href="#534" id="534">534</a>
-<a href="#535" id="535">535</a>
-<a href="#536" id="536">536</a>
-<a href="#537" id="537">537</a>
-<a href="#538" id="538">538</a>
-<a href="#539" id="539">539</a>
-<a href="#540" id="540">540</a>
-<a href="#541" id="541">541</a>
-<a href="#542" id="542">542</a>
-<a href="#543" id="543">543</a>
-<a href="#544" id="544">544</a>
-<a href="#545" id="545">545</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -560,7 +547,11 @@
// specific language governing permissions and limitations
// under the License.
-</span><span class="kw">use </span><span class="kw">crate</span>::utils::<span class="kw-2">*</span>;
+</span><span class="kw">use </span>std::fmt::{Debug, Display, Formatter};
+<span class="kw">use </span>std::future::IntoFuture;
+<span class="kw">use </span>std::ops::Range;
+
+<span class="kw">use </span><span class="kw">crate</span>::utils::<span class="kw-2">*</span>;
<span class="kw">use </span>async_trait::async_trait;
<span class="kw">use </span>bytes::Bytes;
<span class="kw">use </span>futures::stream::BoxStream;
@@ -579,12 +570,8 @@
<span class="kw">use </span>object_store::PutOptions;
<span class="kw">use </span>object_store::PutPayload;
<span class="kw">use </span>object_store::PutResult;
+<span class="kw">use </span>opendal::Operator;
<span class="kw">use </span>opendal::{Buffer, Metakey};
-<span class="kw">use </span>opendal::{Operator, OperatorInfo};
-<span class="kw">use </span>std::fmt::{Debug, Display, Formatter};
-<span class="kw">use </span>std::future::IntoFuture;
-<span class="kw">use </span>std::ops::Range;
-<span class="kw">use </span>std::sync::Arc;
<span class="doccomment">/// OpendalStore implements ObjectStore trait by using opendal.
///
@@ -638,37 +625,24 @@
/// }
/// ```
</span><span class="kw">pub struct </span>OpendalStore {
- info: Arc<OperatorInfo>,
inner: Operator,
}
<span class="kw">impl </span>OpendalStore {
<span class="doccomment">/// Create OpendalStore by given Operator.
</span><span class="kw">pub fn </span>new(op: Operator) -> <span class="self">Self </span>{
- <span class="self">Self </span>{
- info: op.info().into(),
- inner: op,
- }
- }
-
- <span class="doccomment">/// The metakey that requested by object_store, should align with its meta.
- </span><span class="attr">#[inline]
- </span><span class="kw">fn </span>metakey() -> flagset::FlagSet<Metakey> {
- Metakey::Mode
- | Metakey::LastModified
- | Metakey::ContentLength
- | Metakey::Etag
- | Metakey::Version
+ <span class="self">Self </span>{ inner: op }
}
}
<span class="kw">impl </span>Debug <span class="kw">for </span>OpendalStore {
<span class="kw">fn </span>fmt(<span class="kw-2">&</span><span class="self">self</span>, f: <span class="kw-2">&mut </span>Formatter<<span class="lifetime">'_</span>>) -> std::fmt::Result {
+ <span class="kw">let </span>info = <span class="self">self</span>.inner.info();
f.debug_struct(<span class="string">"OpendalStore"</span>)
- .field(<span class="string">"scheme"</span>, <span class="kw-2">&</span><span class="self">self</span>.info.scheme())
- .field(<span class="string">"name"</span>, <span class="kw-2">&</span><span class="self">self</span>.info.name())
- .field(<span class="string">"root"</span>, <span class="kw-2">&</span><span class="self">self</span>.info.root())
- .field(<span class="string">"capability"</span>, <span class="kw-2">&</span><span class="self">self</span>.info.full_capability())
+ .field(<span class="string">"scheme"</span>, <span class="kw-2">&</span>info.scheme())
+ .field(<span class="string">"name"</span>, <span class="kw-2">&</span>info.name())
+ .field(<span class="string">"root"</span>, <span class="kw-2">&</span>info.root())
+ .field(<span class="string">"capability"</span>, <span class="kw-2">&</span>info.full_capability())
.finish()
}
}
@@ -851,7 +825,7 @@
<span class="kw">let </span>stream = <span class="self">self
</span>.inner
.lister_with(<span class="kw-2">&</span>path)
- .metakey(<span class="self">Self</span>::metakey())
+ .metakey(Metakey::ContentLength | Metakey::LastModified)
.recursive(<span class="bool-val">true</span>)
.<span class="kw">await
</span>.map_err(|err| format_object_store_error(err, <span class="kw-2">&</span>path))<span class="question-mark">?</span>;
@@ -881,7 +855,7 @@
<span class="self">self</span>.inner
.lister_with(<span class="kw-2">&</span>path)
.start_after(offset.as_ref())
- .metakey(<span class="self">Self</span>::metakey())
+ .metakey(Metakey::ContentLength | Metakey::LastModified)
.recursive(<span class="bool-val">true</span>)
.into_future()
.into_send()
@@ -893,7 +867,7 @@
} <span class="kw">else </span>{
<span class="self">self</span>.inner
.lister_with(<span class="kw-2">&</span>path)
- .metakey(<span class="self">Self</span>::metakey())
+ .metakey(Metakey::ContentLength | Metakey::LastModified)
.recursive(<span class="bool-val">true</span>)
.into_future()
.into_send()
@@ -915,7 +889,7 @@
<span class="kw">let </span><span class="kw-2">mut </span>stream = <span class="self">self
</span>.inner
.lister_with(<span class="kw-2">&</span>path)
- .metakey(<span class="self">Self</span>::metakey())
+ .metakey(Metakey::Mode | Metakey::ContentLength | Metakey::LastModified)
.into_future()
.into_send()
.<span class="kw">await
diff --git a/docs/object-store/index.html b/docs/object-store/index.html
index ec400f7abb..fd656cb33e 100644
--- a/docs/object-store/index.html
+++ b/docs/object-store/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">object_store Integration | 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/object-store"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 3104982399..8a99000f0d 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 0aec786b37..a9fa5d74c2 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -246,22 +246,22 @@
<a class="class" href="#Metadata">Metadata</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
+ <a class="variable" href="#Metadata.etag">etag</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_type">content_type</a>
+ <a class="variable" href="#Metadata.mode">mode</a>
</li>
<li>
- <a class="variable" href="#Metadata.mode">mode</a>
+ <a class="variable" href="#Metadata.content_md5">content_md5</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.etag">etag</a>
+ <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
</li>
<li>
- <a class="variable" href="#Metadata.content_md5">content_md5</a>
+ <a class="variable" href="#Metadata.content_length">content_length</a>
</li>
</ul>
@@ -273,10 +273,10 @@
<a class="variable" href="#PresignedRequest.url">url</a>
</li>
<li>
- <a class="variable" href="#PresignedRequest.headers">headers</a>
+ <a class="variable" href="#PresignedRequest.method">method</a>
</li>
<li>
- <a class="variable" href="#PresignedRequest.method">method</a>
+ <a class="variable" href="#PresignedRequest.headers">headers</a>
</li>
</ul>
@@ -285,122 +285,116 @@
<a class="class" href="#Capability">Capability</a>
<ul class="memberlist">
<li>
- <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
+ <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
</li>
<li>
- <a class="variable" href="#Capability.presign_write">presign_write</a>
+ <a class="variable" href="#Capability.write">write</a>
</li>
<li>
- <a class="variable" href="#Capability.read">read</a>
+ <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
</li>
<li>
- <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
+ <a class="variable" href="#Capability.batch">batch</a>
</li>
<li>
- <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
+ <a class="variable" href="#Capability.create_dir">create_dir</a>
</li>
<li>
- <a class="variable" href="#Capability.presign">presign</a>
+ <a class="variable" href="#Capability.blocking">blocking</a>
</li>
<li>
- <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
+ <a class="variable" href="#Capability.presign">presign</a>
</li>
<li>
- <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
+ <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
</li>
<li>
- <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
+ <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
</li>
<li>
- <a class="variable" href="#Capability.batch">batch</a>
+ <a class="variable" href="#Capability.copy">copy</a>
</li>
<li>
- <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
+ <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
</li>
<li>
- <a class="variable" href="#Capability.batch_delete">batch_delete</a>
+ <a class="variable" href="#Capability.stat">stat</a>
</li>
<li>
- <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
+ <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
</li>
<li>
- <a class="variable" href="#Capability.write">write</a>
+ <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
</li>
<li>
- <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
+ <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
</li>
<li>
- <a class="variable" href="#Capability.copy">copy</a>
+ <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
</li>
<li>
- <a class="variable" href="#Capability.rename">rename</a>
+ <a class="variable" href="#Capability.presign_stat">presign_stat</a>
</li>
<li>
- <a class="variable" href="#Capability.blocking">blocking</a>
+ <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
</li>
<li>
- <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
+ <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
</li>
<li>
- <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
+ <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
</li>
<li>
- <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
+ <a class="variable" href="#Capability.write_can_append">write_can_append</a>
</li>
<li>
- <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
+ <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
</li>
<li>
- <a class="variable" href="#Capability.delete">delete</a>
+ <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
</li>
<li>
- <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
+ <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
</li>
<li>
- <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
+ <a class="variable" href="#Capability.presign_write">presign_write</a>
</li>
<li>
- <a class="variable" href="#Capability.create_dir">create_dir</a>
+ <a class="variable" href="#Capability.batch_delete">batch_delete</a>
</li>
<li>
- <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
+ <a class="variable" href="#Capability.list">list</a>
</li>
<li>
- <a class="variable" href="#Capability.list">list</a>
+ <a class="variable" href="#Capability.read">read</a>
</li>
<li>
- <a class="variable" href="#Capability.write_can_append">write_can_append</a>
+ <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
</li>
<li>
- <a class="variable" href="#Capability.presign_stat">presign_stat</a>
+ <a class="variable" href="#Capability.presign_read">presign_read</a>
</li>
<li>
- <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
+ <a class="variable" href="#Capability.rename">rename</a>
</li>
<li>
- <a class="variable" href="#Capability.stat">stat</a>
+ <a class="variable" href="#Capability.delete">delete</a>
</li>
<li>
- <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
+ <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
</li>
<li>
- <a class="variable" href="#Capability.presign_read">presign_read</a>
+ <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
</li>
<li>
- <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
+ <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
</li>
<li>
- <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
+ <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
</li>
</ul>
</li>
- <li>
- <a class="class" href="#WriteOptions">WriteOptions</a>
- <ul class="memberlist">
- </ul>
-
- </li>
</ul>
@@ -1462,78 +1456,78 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
- <div id="Metadata.content_disposition" class="classattr">
+ <div id="Metadata.etag" class="classattr">
<div class="attr variable">
- <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
+ <span class="name">etag</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.content_disposition"></a>
-
+ <a class="headerlink" href="#Metadata.etag"></a>
+ <div class="docstring"><p>ETag of this entry.</p>
+</div>
+
</div>
- <div id="Metadata.content_type" class="classattr">
+ <div id="Metadata.mode" class="classattr">
<div class="attr variable">
- <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+ <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
</div>
- <a class="headerlink" href="#Metadata.content_type"></a>
+ <a class="headerlink" href="#Metadata.mode"></a>
- <div class="docstring"><p>Content Type of this entry.</p>
+ <div class="docstring"><p>mode represent this entry's mode.</p>
</div>
</div>
- <div id="Metadata.mode" class="classattr">
+ <div id="Metadata.content_md5" class="classattr">
<div class="attr variable">
- <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
+ <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.mode"></a>
+ <a class="headerlink" href="#Metadata.content_md5"></a>
- <div class="docstring"><p>mode represent this entry's mode.</p>
+ <div class="docstring"><p>Content MD5 of this entry.</p>
</div>
</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.etag" class="classattr">
+ <div id="Metadata.content_disposition" class="classattr">
<div class="attr variable">
- <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+ <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
</div>
- <a class="headerlink" href="#Metadata.etag"></a>
+ <a class="headerlink" href="#Metadata.content_disposition"></a>
+
- <div class="docstring"><p>ETag 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>
@@ -1564,28 +1558,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
</div>
- <div id="PresignedRequest.headers" class="classattr">
+ <div id="PresignedRequest.method" class="classattr">
<div class="attr variable">
- <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
+ <span class="name">method</span><span class="annotation">: str</span>
</div>
- <a class="headerlink" href="#PresignedRequest.headers"></a>
+ <a class="headerlink" href="#PresignedRequest.method"></a>
- <div class="docstring"><p>Return the HTTP headers of this request.</p>
+ <div class="docstring"><p>Return the HTTP method of this request.</p>
</div>
</div>
- <div id="PresignedRequest.method" class="classattr">
+ <div id="PresignedRequest.headers" class="classattr">
<div class="attr variable">
- <span class="name">method</span><span class="annotation">: str</span>
+ <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
</div>
- <a class="headerlink" href="#PresignedRequest.method"></a>
+ <a class="headerlink" href="#PresignedRequest.headers"></a>
- <div class="docstring"><p>Return the HTTP method of this request.</p>
+ <div class="docstring"><p>Return the HTTP headers of this request.</p>
</div>
@@ -1606,355 +1600,346 @@ by current Operator.</p>
</div>
- <div id="Capability.stat_with_if_none_match" class="classattr">
+ <div id="Capability.write_multi_max_size" class="classattr">
<div class="attr variable">
- <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
+ <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
</div>
- <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
+ <a class="headerlink" href="#Capability.write_multi_max_size"></a>
- <div class="docstring"><p>If operator supports stat with if none match.</p>
-</div>
-
-
- </div>
- <div id="Capability.presign_write" class="classattr">
- <div class="attr variable">
- <span class="name">presign_write</span><span class="annotation">: bool</span>
+ <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
-
- </div>
- <a class="headerlink" href="#Capability.presign_write"></a>
-
- <div class="docstring"><p>If operator supports presign write.</p>
+<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
</div>
</div>
- <div id="Capability.read" class="classattr">
+ <div id="Capability.write" class="classattr">
<div class="attr variable">
- <span class="name">read</span><span class="annotation">: bool</span>
+ <span class="name">write</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read"></a>
+ <a class="headerlink" href="#Capability.write"></a>
- <div class="docstring"><p>If operator supports read.</p>
+ <div class="docstring"><p>If operator supports write.</p>
</div>
</div>
- <div id="Capability.stat_with_if_match" class="classattr">
+ <div id="Capability.write_multi_align_size" class="classattr">
<div class="attr variable">
- <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
+ <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
</div>
- <a class="headerlink" href="#Capability.stat_with_if_match"></a>
+ <a class="headerlink" href="#Capability.write_multi_align_size"></a>
- <div class="docstring"><p>If operator supports stat with if match.</p>
+ <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
+
+<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
</div>
</div>
- <div id="Capability.read_with_if_none_match" class="classattr">
+ <div id="Capability.batch" class="classattr">
<div class="attr variable">
- <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
+ <span class="name">batch</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
+ <a class="headerlink" href="#Capability.batch"></a>
- <div class="docstring"><p>If operator supports read with if none match.</p>
+ <div class="docstring"><p>If operator supports batch.</p>
</div>
</div>
- <div id="Capability.presign" class="classattr">
+ <div id="Capability.create_dir" class="classattr">
<div class="attr variable">
- <span class="name">presign</span><span class="annotation">: bool</span>
+ <span class="name">create_dir</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.presign"></a>
+ <a class="headerlink" href="#Capability.create_dir"></a>
- <div class="docstring"><p>If operator supports presign.</p>
+ <div class="docstring"><p>If operator supports create dir.</p>
</div>
</div>
- <div id="Capability.read_with_override_content_disposition" class="classattr">
+ <div id="Capability.blocking" class="classattr">
<div class="attr variable">
- <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
+ <span class="name">blocking</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
+ <a class="headerlink" href="#Capability.blocking"></a>
- <div class="docstring"><p>if operator supports read with override content disposition.</p>
+ <div class="docstring"><p>If operator supports blocking.</p>
</div>
</div>
- <div id="Capability.write_can_multi" class="classattr">
+ <div id="Capability.presign" class="classattr">
<div class="attr variable">
- <span class="name">write_can_multi</span><span class="annotation">: bool</span>
+ <span class="name">presign</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_can_multi"></a>
+ <a class="headerlink" href="#Capability.presign"></a>
- <div class="docstring"><p>If operator supports write can be called in multi times.</p>
+ <div class="docstring"><p>If operator supports presign.</p>
</div>
</div>
- <div id="Capability.read_with_override_content_type" class="classattr">
+ <div id="Capability.read_with_if_match" class="classattr">
<div class="attr variable">
- <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
+ <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
+ <a class="headerlink" href="#Capability.read_with_if_match"></a>
- <div class="docstring"><p>if operator supports read with override content type.</p>
+ <div class="docstring"><p>If operator supports read with if match.</p>
</div>
</div>
- <div id="Capability.batch" class="classattr">
+ <div id="Capability.write_with_content_disposition" class="classattr">
<div class="attr variable">
- <span class="name">batch</span><span class="annotation">: bool</span>
+ <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.batch"></a>
+ <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
- <div class="docstring"><p>If operator supports batch.</p>
+ <div class="docstring"><p>If operator supports write with content disposition.</p>
</div>
</div>
- <div id="Capability.write_with_content_type" class="classattr">
+ <div id="Capability.copy" class="classattr">
<div class="attr variable">
- <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
+ <span class="name">copy</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_with_content_type"></a>
+ <a class="headerlink" href="#Capability.copy"></a>
- <div class="docstring"><p>If operator supports write with content type.</p>
+ <div class="docstring"><p>If operator supports copy.</p>
</div>
</div>
- <div id="Capability.batch_delete" class="classattr">
+ <div id="Capability.stat_with_if_match" class="classattr">
<div class="attr variable">
- <span class="name">batch_delete</span><span class="annotation">: bool</span>
+ <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.batch_delete"></a>
+ <a class="headerlink" href="#Capability.stat_with_if_match"></a>
- <div class="docstring"><p>If operator supports batch delete.</p>
+ <div class="docstring"><p>If operator supports stat with if match.</p>
</div>
</div>
- <div id="Capability.batch_max_operations" class="classattr">
+ <div id="Capability.stat" class="classattr">
<div class="attr variable">
- <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
+ <span class="name">stat</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.batch_max_operations"></a>
+ <a class="headerlink" href="#Capability.stat"></a>
- <div class="docstring"><p>The max operations that operator supports in batch.</p>
+ <div class="docstring"><p>If operator supports stat.</p>
</div>
</div>
- <div id="Capability.write" class="classattr">
+ <div id="Capability.write_total_max_size" class="classattr">
<div class="attr variable">
- <span class="name">write</span><span class="annotation">: bool</span>
+ <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
</div>
- <a class="headerlink" href="#Capability.write"></a>
+ <a class="headerlink" href="#Capability.write_total_max_size"></a>
- <div class="docstring"><p>If operator supports write.</p>
+ <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
+
+<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
</div>
</div>
- <div id="Capability.write_total_max_size" class="classattr">
+ <div id="Capability.write_can_empty" class="classattr">
<div class="attr variable">
- <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
+ <span class="name">write_can_empty</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_total_max_size"></a>
+ <a class="headerlink" href="#Capability.write_can_empty"></a>
- <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
-
-<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
+ <div class="docstring"><p>If operator supports write with empty content.</p>
</div>
</div>
- <div id="Capability.copy" class="classattr">
+ <div id="Capability.list_with_recursive" class="classattr">
<div class="attr variable">
- <span class="name">copy</span><span class="annotation">: bool</span>
+ <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.copy"></a>
+ <a class="headerlink" href="#Capability.list_with_recursive"></a>
- <div class="docstring"><p>If operator supports copy.</p>
+ <div class="docstring"><p>If backend supports list without delimiter.</p>
</div>
</div>
- <div id="Capability.rename" class="classattr">
+ <div id="Capability.write_can_multi" class="classattr">
<div class="attr variable">
- <span class="name">rename</span><span class="annotation">: bool</span>
+ <span class="name">write_can_multi</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.rename"></a>
+ <a class="headerlink" href="#Capability.write_can_multi"></a>
- <div class="docstring"><p>If operator supports rename.</p>
+ <div class="docstring"><p>If operator supports write can be called in multi times.</p>
</div>
</div>
- <div id="Capability.blocking" class="classattr">
+ <div id="Capability.presign_stat" class="classattr">
<div class="attr variable">
- <span class="name">blocking</span><span class="annotation">: bool</span>
+ <span class="name">presign_stat</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.blocking"></a>
+ <a class="headerlink" href="#Capability.presign_stat"></a>
- <div class="docstring"><p>If operator supports blocking.</p>
+ <div class="docstring"><p>If operator supports presign stat.</p>
</div>
</div>
- <div id="Capability.list_with_limit" class="classattr">
+ <div id="Capability.stat_with_if_none_match" class="classattr">
<div class="attr variable">
- <span class="name">list_with_limit</span><span class="annotation">: bool</span>
+ <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.list_with_limit"></a>
+ <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
- <div class="docstring"><p>If backend supports list with limit.</p>
+ <div class="docstring"><p>If operator supports stat with if none match.</p>
</div>
</div>
- <div id="Capability.read_with_if_match" class="classattr">
+ <div id="Capability.read_with_override_content_disposition" class="classattr">
<div class="attr variable">
- <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
+ <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read_with_if_match"></a>
+ <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
- <div class="docstring"><p>If operator supports read with if match.</p>
+ <div class="docstring"><p>if operator supports read with override content disposition.</p>
</div>
</div>
- <div id="Capability.read_with_override_cache_control" class="classattr">
+ <div id="Capability.write_with_cache_control" class="classattr">
<div class="attr variable">
- <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
+ <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
+ <a class="headerlink" href="#Capability.write_with_cache_control"></a>
- <div class="docstring"><p>if operator supports read with override cache control.</p>
+ <div class="docstring"><p>If operator supports write with cache control.</p>
</div>
</div>
- <div id="Capability.write_can_empty" class="classattr">
+ <div id="Capability.write_can_append" class="classattr">
<div class="attr variable">
- <span class="name">write_can_empty</span><span class="annotation">: bool</span>
+ <span class="name">write_can_append</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_can_empty"></a>
+ <a class="headerlink" href="#Capability.write_can_append"></a>
- <div class="docstring"><p>If operator supports write with empty content.</p>
+ <div class="docstring"><p>If operator supports write by append.</p>
</div>
</div>
- <div id="Capability.delete" class="classattr">
+ <div id="Capability.write_with_content_type" class="classattr">
<div class="attr variable">
- <span class="name">delete</span><span class="annotation">: bool</span>
+ <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.delete"></a>
+ <a class="headerlink" href="#Capability.write_with_content_type"></a>
- <div class="docstring"><p>If operator supports delete.</p>
+ <div class="docstring"><p>If operator supports write with content type.</p>
</div>
</div>
- <div id="Capability.write_with_cache_control" class="classattr">
+ <div id="Capability.read_with_override_content_type" class="classattr">
<div class="attr variable">
- <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
+ <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_with_cache_control"></a>
+ <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
- <div class="docstring"><p>If operator supports write with cache control.</p>
+ <div class="docstring"><p>if operator supports read with override content type.</p>
</div>
</div>
- <div id="Capability.list_with_recursive" class="classattr">
+ <div id="Capability.read_with_if_none_match" class="classattr">
<div class="attr variable">
- <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
+ <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.list_with_recursive"></a>
+ <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
- <div class="docstring"><p>If backend supports list without delimiter.</p>
+ <div class="docstring"><p>If operator supports read with if none match.</p>
</div>
</div>
- <div id="Capability.create_dir" class="classattr">
+ <div id="Capability.presign_write" class="classattr">
<div class="attr variable">
- <span class="name">create_dir</span><span class="annotation">: bool</span>
+ <span class="name">presign_write</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.create_dir"></a>
+ <a class="headerlink" href="#Capability.presign_write"></a>
- <div class="docstring"><p>If operator supports create dir.</p>
+ <div class="docstring"><p>If operator supports presign write.</p>
</div>
</div>
- <div id="Capability.list_with_start_after" class="classattr">
+ <div id="Capability.batch_delete" class="classattr">
<div class="attr variable">
- <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
+ <span class="name">batch_delete</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.list_with_start_after"></a>
+ <a class="headerlink" href="#Capability.batch_delete"></a>
- <div class="docstring"><p>If backend supports list with start after.</p>
+ <div class="docstring"><p>If operator supports batch delete.</p>
</div>
@@ -1972,129 +1957,125 @@ by current Operator.</p>
</div>
- <div id="Capability.write_can_append" class="classattr">
+ <div id="Capability.read" class="classattr">
<div class="attr variable">
- <span class="name">write_can_append</span><span class="annotation">: bool</span>
+ <span class="name">read</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_can_append"></a>
+ <a class="headerlink" href="#Capability.read"></a>
- <div class="docstring"><p>If operator supports write by append.</p>
+ <div class="docstring"><p>If operator supports read.</p>
</div>
</div>
- <div id="Capability.presign_stat" class="classattr">
+ <div id="Capability.batch_max_operations" class="classattr">
<div class="attr variable">
- <span class="name">presign_stat</span><span class="annotation">: bool</span>
+ <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
</div>
- <a class="headerlink" href="#Capability.presign_stat"></a>
+ <a class="headerlink" href="#Capability.batch_max_operations"></a>
- <div class="docstring"><p>If operator supports presign stat.</p>
+ <div class="docstring"><p>The max operations that operator supports in batch.</p>
</div>
</div>
- <div id="Capability.write_multi_min_size" class="classattr">
+ <div id="Capability.presign_read" class="classattr">
<div class="attr variable">
- <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
+ <span class="name">presign_read</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_multi_min_size"></a>
+ <a class="headerlink" href="#Capability.presign_read"></a>
- <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
-
-<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
+ <div class="docstring"><p>If operator supports presign read.</p>
</div>
</div>
- <div id="Capability.stat" class="classattr">
+ <div id="Capability.rename" class="classattr">
<div class="attr variable">
- <span class="name">stat</span><span class="annotation">: bool</span>
+ <span class="name">rename</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.stat"></a>
+ <a class="headerlink" href="#Capability.rename"></a>
- <div class="docstring"><p>If operator supports stat.</p>
+ <div class="docstring"><p>If operator supports rename.</p>
</div>
</div>
- <div id="Capability.write_with_content_disposition" class="classattr">
+ <div id="Capability.delete" class="classattr">
<div class="attr variable">
- <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
+ <span class="name">delete</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
+ <a class="headerlink" href="#Capability.delete"></a>
- <div class="docstring"><p>If operator supports write with content disposition.</p>
+ <div class="docstring"><p>If operator supports delete.</p>
</div>
</div>
- <div id="Capability.presign_read" class="classattr">
+ <div id="Capability.list_with_start_after" class="classattr">
<div class="attr variable">
- <span class="name">presign_read</span><span class="annotation">: bool</span>
+ <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.presign_read"></a>
+ <a class="headerlink" href="#Capability.list_with_start_after"></a>
- <div class="docstring"><p>If operator supports presign read.</p>
+ <div class="docstring"><p>If backend supports list with start after.</p>
</div>
</div>
- <div id="Capability.write_multi_max_size" class="classattr">
+ <div id="Capability.read_with_override_cache_control" class="classattr">
<div class="attr variable">
- <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
+ <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_multi_max_size"></a>
+ <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
- <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
-
-<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
+ <div class="docstring"><p>if operator supports read with override cache control.</p>
</div>
</div>
- <div id="Capability.write_multi_align_size" class="classattr">
+ <div id="Capability.list_with_limit" class="classattr">
<div class="attr variable">
- <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
+ <span class="name">list_with_limit</span><span class="annotation">: bool</span>
</div>
- <a class="headerlink" href="#Capability.write_multi_align_size"></a>
+ <a class="headerlink" href="#Capability.list_with_limit"></a>
- <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
-
-<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
+ <div class="docstring"><p>If backend supports list with limit.</p>
</div>
</div>
- </section>
- <section id="WriteOptions">
- <div class="attr class">
-
- <span class="def">class</span>
- <span class="name">WriteOptions</span>:
+ <div id="Capability.write_multi_min_size" class="classattr">
+ <div class="attr variable">
+ <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
</div>
- <a class="headerlink" href="#WriteOptions"></a>
-
+ <a class="headerlink" href="#Capability.write_multi_min_size"></a>
+ <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
+<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
+</div>
+
+
+ </div>
</section>
<footer>
diff --git a/docs/python/search.js b/docs/python/search.js
index bcabb32a84..f62f9d9b7a 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1 +1 @@
-window.pdocSearch=function(){!function(){var a=function(e){var t=new a.Index;return t.pipeline.add(a.trimmer,a.stopWordFilter,a.stemmer),e&&e.call(t,t),t};a.version="0.9.5",lunr=a,a.utils={},a.utils.warn=function(a){return function(e){a.console&&console.warn&&console.warn(e)}}(this),a.utils.toString=function(a){return null==a?"":a.toString()},a.EventEmitter=function(){this.events={}},a.EventEmitter.prototype.addListener=function(){var a=Array.prototype.slice.call(arguments),e=a.pop(),t=a [...]
\ No newline at end of file
+window.pdocSearch=function(){!function(){var a=function(e){var t=new a.Index;return t.pipeline.add(a.trimmer,a.stopWordFilter,a.stemmer),e&&e.call(t,t),t};a.version="0.9.5",lunr=a,a.utils={},a.utils.warn=function(a){return function(e){a.console&&console.warn&&console.warn(e)}}(this),a.utils.toString=function(a){return null==a?"":a.toString()},a.EventEmitter=function(){this.events={}},a.EventEmitter.prototype.addListener=function(){var a=Array.prototype.slice.call(arguments),e=a.pop(),t=a [...]
\ No newline at end of file
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index 95043fc424..78cb83518f 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><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.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/rust-core/index.html b/docs/rust-core/index.html
index a71286939e..1d104f7254 100644
--- a/docs/rust-core/index.html
+++ b/docs/rust-core/index.html
@@ -6,7 +6,7 @@
<title data-rh="true">Rust Core | 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/rust-core"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tr [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 69eaafdc57..88e89a94d2 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/enum.EntryMode.html b/docs/rust/opendal/enum.EntryMode.html
index 0033dcfae0..75d789edfa 100644
--- a/docs/rust/opendal/enum.EntryMode.html
+++ b/docs/rust/opendal/enum.EntryMode.html
@@ -8,7 +8,7 @@
</div><section id="variant.Unknown" class="variant"><a href="#variant.Unknown" class="anchor">§</a><h3 class="code-header">Unknown</h3></section><div class="docblock"><p>Unknown means we don’t know what we can do on this path.</p>
</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-EntryMode" class="impl"><a class="src rightside" href="../src/opendal/types/mode.rs.html#32-52">source</a><a href="#impl-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">En [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_dir" class="method"><a class="src rightside" href="../src/opendal/types/mode.rs.html#39-41">source</a><h4 class="code-header">pub fn <a href="#method.is_dir" class="fn">is_dir</a>(self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if this mode is DIR.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-EntryMode" class="impl"><a class="src rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Clone-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class=" [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-EntryMode" class="impl"><a class="src rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Clone-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class=" [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-EntryMode" class="impl"><a class="src rightside" href="../src/opendal/types/mode.rs.html#22">source</a><a href="#impl-Copy-for-EntryMode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.EntryMode.html" title [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/enum.Metakey.html b/docs/rust/opendal/enum.Metakey.html
index 80eff7299a..f22720ba2f 100644
--- a/docs/rust/opendal/enum.Metakey.html
+++ b/docs/rust/opendal/enum.Metakey.html
@@ -31,9 +31,9 @@ already contains all metadata.</p>
</div><section id="variant.Etag" class="variant"><a href="#variant.Etag" class="anchor">§</a><h3 class="code-header">Etag</h3></section><div class="docblock"><p>Key for etag.</p>
</div><section id="variant.LastModified" class="variant"><a href="#variant.LastModified" class="anchor">§</a><h3 class="code-header">LastModified</h3></section><div class="docblock"><p>Key for last modified.</p>
</div><section id="variant.Version" class="variant"><a href="#variant.Version" class="anchor">§</a><h3 class="code-header">Version</h3></section><div class="docblock"><p>Key for version.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl<R: <a class= [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BitAnd%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-BitAnd%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl<R: <a class= [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Rem%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-Rem%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl<R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Rem%3CR%3E-for-Metakey" class="impl"><a class="src rightside" href="../src/opendal/types/metadata.rs.html#512-552">source</a><a href="#impl-Rem%3CR%3E-for-Metakey" class="anchor">§</a><h3 class="code-header">impl<R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/enum.Scheme.html b/docs/rust/opendal/enum.Scheme.html
index daa9883a55..f8e7f33e3b 100644
--- a/docs/rust/opendal/enum.Scheme.html
+++ b/docs/rust/opendal/enum.Scheme.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff [...]
<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 65 variants</span></summary> AliyunDrive,
Atomicserver,
Azblob,
@@ -159,7 +159,10 @@ by <code>==</code>.</div></details><details class="toggle method-toggle" open><s
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-Scheme" class="impl"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#32">source</a><a href="#impl-Copy-for-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.Scheme.html" title="enum [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">default fn <a class="fn">get_hash</a><H, B [...]
+ H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
+ B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</div></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Equivalent%3CK%3E [...]
diff --git a/docs/rust/opendal/layers/struct.MetricsLayer.html b/docs/rust/opendal/layers/struct.MetricsLayer.html
index c239e9493a..a86e0dcff2 100644
--- a/docs/rust/opendal/layers/struct.MetricsLayer.html
+++ b/docs/rust/opendal/layers/struct.MetricsLayer.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add metrics for every operations."><title>MetricsLayer in opendal::layers - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Add metrics for every operations."><title>MetricsLayer in opendal::layers - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a [...]
<h2 id="metrics"><a class="doc-anchor" href="#metrics">§</a>Metrics</h2>
<ul>
<li><code>opendal_requests_total</code>: Total request numbers.</li>
@@ -37,7 +37,7 @@ builder.install().expect(<span class="string">"failed to install recorder/export
<span class="kw">let </span>handle = builder.install_recorder().expect(<span class="string">"failed to install recorder"</span>);
<span class="kw">let </span>(recorder, exporter) = builder.build().expect(<span class="string">"failed to build recorder/exporter"</span>);
<span class="kw">let </span>recorder = builder.build_recorder().expect(<span class="string">"failed to build recorder"</span>);</code></pre></div>
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-MetricsLayer" class="impl"><a class="src rightside" href="../../src/opendal/layers/metrics.rs.html#111">source</a><a href="#impl-Clone-for-MetricsLayer" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-MetricsLayer" class="impl"><a class="src rightside" href="../../src/opendal/layers/metrics.rs.html#112">source</a><a href="#impl-Clone-for-MetricsLayer" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/operator_functions/index.html b/docs/rust/opendal/operator_functions/index.html
index 0b1ed52d25..ed2309de89 100644
--- a/docs/rust/opendal/operator_functions/index.html
+++ b/docs/rust/opendal/operator_functions/index.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Functions provides the functions generated by `BlockingOperator`"><title>opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Functions provides the functions generated by `BlockingOperator`"><title>opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd [...]
<p>By using functions, users can add more options for operation.</p>
</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.FunctionDelete.html" title="struct opendal::operator_functions::FunctionDelete">FunctionDelete</a></div><div class="desc docblock-short">Function that generated by <a href="../struct.BlockingOperator.html#method.delete_with" title="method opendal::BlockingOperator::delete_with"><code>BlockingOperator::d [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionDelete.html b/docs/rust/opendal/operator_functions/struct.FunctionDelete.html
index 0beba0688c..7d932aa0b1 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionDelete.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionDelete.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::delete_with`."><title>FunctionDelete in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::delete_with`."><title>FunctionDelete in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionDelete" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#233-245">source</a><a href="#impl-FunctionDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#242-244">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4> [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionDelete" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#199-211">source</a><a href="#impl-FunctionDelete" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#208-210">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4> [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionDelete" class="impl"><a href="#impl-Freeze-for-FunctionDelete" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionList.html b/docs/rust/opendal/operator_functions/struct.FunctionList.html
index c46ccc5cb6..dc2abfa7ed 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionList.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionList.html
@@ -1,24 +1,24 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::list_with`."><title>FunctionList in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::list_with`."><title>FunctionList in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionList" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#252-298">source</a><a href="#impl-FunctionList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionList" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#218-264">source</a><a href="#impl-FunctionList" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
that could return per-request.</p>
<p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#264-267">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>The start_ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#230-233">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>The start_ [...]
to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#275-278">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>The recursive is us [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#241-244">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>The recursive is us [...]
<ul>
<li>If <code>false</code>, list operation will only list the entries under the given path.</li>
<li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
</ul>
<p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#288-291">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><FlagSet<<a class="enum" href="../enum.Me [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#254-257">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><FlagSet<<a class="enum" href="../enum.Me [...]
<p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
<ul>
<li><code>Some(v)</code> means exist.</li>
<li><code>None</code> means services doesn’t have this meta.</li>
</ul>
<p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#295-297">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct al [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#261-263">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct al [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionList" class="impl"><a href="#impl-Freeze-for-FunctionList" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze" [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionLister.html b/docs/rust/opendal/operator_functions/struct.FunctionLister.html
index 488062ac4b..e5448cdfc1 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionLister.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionLister.html
@@ -1,24 +1,24 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::lister_with`."><title>FunctionLister in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::lister_with`."><title>FunctionLister in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionLister" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#305-351">source</a><a href="#impl-FunctionLister" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionLister" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#271-317">source</a><a href="#impl-FunctionLister" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
that could return per-request.</p>
<p>Users could use this to control the memory usage of list operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#317-320">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>The start_ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.start_after" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#283-286">source</a><h4 class="code-header">pub fn <a href="#method.start_after" class="fn">start_after</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>The start_ [...]
to start listing from.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#328-331">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>The recursive is us [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.recursive" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#294-297">source</a><h4 class="code-header">pub fn <a href="#method.recursive" class="fn">recursive</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>The recursive is us [...]
<ul>
<li>If <code>false</code>, list operation will only list the entries under the given path.</li>
<li>If <code>true</code>, list operation will list all entries that starts with given path.</li>
</ul>
<p>Default to <code>false</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#341-344">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><FlagSet<<a class="enum" href="../enum.Me [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metakey" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#307-310">source</a><h4 class="code-header">pub fn <a href="#method.metakey" class="fn">metakey</a>(self, v: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><FlagSet<<a class="enum" href="../enum.Me [...]
<p>Lister will make sure the result for specified meta is <strong>known</strong>:</p>
<ul>
<li><code>Some(v)</code> means exist.</li>
<li><code>None</code> means services doesn’t have this meta.</li>
</ul>
<p>The default metakey is <code>Metakey::Mode</code>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#348-350">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingLister.html" title="struct opendal::BlockingLister">Blockin [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#314-316">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingLister.html" title="struct opendal::BlockingLister">Blockin [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionLister" class="impl"><a href="#impl-Freeze-for-FunctionLister" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionRead.html b/docs/rust/opendal/operator_functions/struct.FunctionRead.html
index e41ba6c6c1..036f8f8f3b 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionRead.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionRead.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::read_with`."><title>FunctionRead in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::read_with`."><title>FunctionRead in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionRead" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#358-370">source</a><a href="#impl-FunctionRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#367-369">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>></h4></se [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionRead" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#324-336">source</a><a href="#impl-FunctionRead" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#333-335">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>></h4></se [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionRead" class="impl"><a href="#impl-Freeze-for-FunctionRead" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze" [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionReader.html b/docs/rust/opendal/operator_functions/struct.FunctionReader.html
index fb8d14fb48..2d621db7ac 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionReader.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionReader.html
@@ -1,12 +1,12 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::reader_with`."><title>FunctionReader in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::reader_with`."><title>FunctionReader in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionReader" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#377-425">source</a><a href="#impl-FunctionReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#387-392">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section> [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#395-400">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></su [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#403-406">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the If-Match fo [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#409-412">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#415-418">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the version for th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#422-424">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingReader.html" title="struct opendal::BlockingReader">Blockin [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionReader" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#343-391">source</a><a href="#impl-FunctionReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#353-358">source</a><h4 class="code-header">pub fn <a href="#method.override_cache_control" class="fn">override_cache_control</a>(self, cache_control: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.override_content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#361-366">source</a><h4 class="code-header">pub fn <a href="#method.override_content_type" class="fn">override_content_type</a>(self, content_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></su [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#369-372">source</a><h4 class="code-header">pub fn <a href="#method.if_match" class="fn">if_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the If-Match fo [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#375-378">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#381-384">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the version for th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#388-390">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingReader.html" title="struct opendal::BlockingReader">Blockin [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionReader" class="impl"><a href="#impl-Freeze-for-FunctionReader" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionStat.html b/docs/rust/opendal/operator_functions/struct.FunctionStat.html
index 9cb3681894..7e878e86f4 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionStat.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionStat.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::stat_with`."><title>FunctionStat in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::stat_with`."><title>FunctionStat in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionStat" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#432-456">source</a><a href="#impl-FunctionStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#440-443">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#446-449">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the version for th [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#453-455">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a>></h [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionStat" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#398-422">source</a><a href="#impl-FunctionStat" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Function [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.if_none_match" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#406-409">source</a><h4 class="code-header">pub fn <a href="#method.if_none_match" class="fn">if_none_match</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.version" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#412-415">source</a><h4 class="code-header">pub fn <a href="#method.version" class="fn">version</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the version for th [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#419-421">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Metadata.html" title="struct opendal::Metadata">Metadata</a>></h [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionStat" class="impl"><a href="#impl-Freeze-for-FunctionStat" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze" [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionWrite.html b/docs/rust/opendal/operator_functions/struct.FunctionWrite.html
index 0fac7c61e0..b494f34aec 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionWrite.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionWrite.html
@@ -1,24 +1,18 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::write_with`."><title>FunctionWrite in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c1 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionWrite" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#77-143">source</a><a href="#impl-FunctionWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Functio [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionWrite" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#77-132">source</a><a href="#impl-FunctionWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Functio [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#107-112">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#98-101">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
<p>If chunk size is set, the data will be chunked by the underlying writer.</p>
<h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
-<p>Service could have their own limitation for chunk size. It’s possible that chunk size
-is not equal to the given chunk size.</p>
-<p>For example:</p>
-<ul>
-<li>AWS S3 requires the part size to be in [5MiB, 5GiB].</li>
-<li>GCS requires the part size to be aligned with 256 KiB.</li>
-</ul>
-<p>The services will alter the chunk size to meet their requirements.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#115-120">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#123-128">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#131-136">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#140-142">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4> [...]
+<p>Service could have their own minimum chunk size while perform write operations like
+multipart uploads. So the chunk size may be larger than the given chunk size.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#104-109">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#112-117">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#120-125">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#129-131">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4> [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionWrite" class="impl"><a href="#impl-Freeze-for-FunctionWrite" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Free [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_functions/struct.FunctionWriter.html b/docs/rust/opendal/operator_functions/struct.FunctionWriter.html
index b7def721e7..933fbdf23c 100644
--- a/docs/rust/opendal/operator_functions/struct.FunctionWriter.html
+++ b/docs/rust/opendal/operator_functions/struct.FunctionWriter.html
@@ -1,25 +1,18 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::writer_with`."><title>FunctionWriter in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Function that generated by `BlockingOperator::writer_with`."><title>FunctionWriter in opendal::operator_functions - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionWriter" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#154-226">source</a><a href="#impl-FunctionWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FunctionWriter" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#143-192">source</a><a href="#impl-FunctionWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Func [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#184-189">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk size of op.</p>
-<p>If chunk size is set, the data will be chunked by the underlying writer.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.buffer" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#164-167">source</a><h4 class="code-header">pub fn <a href="#method.buffer" class="fn">buffer</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the buffer size of op.</p>
+<p>If buffer size is set, the data will be buffered by the underlying writer.</p>
<h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
-<p>Service could have their own limitation for chunk size. It’s possible that chunk size
-is not equal to the given chunk size.</p>
-<p>For example:</p>
-<ul>
-<li>AWS S3 requires the part size to be in [5MiB, 5GiB].</li>
-<li>GCS requires the part size to be aligned with 256 KiB.</li>
-</ul>
-<p>The services will alter the chunk size to meet their requirements.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.buffer" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#193-195">source</a><h4 class="code-header">pub fn <a href="#method.buffer" class="fn">buffer</a>(self, v: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section><span class="item-info"><div class="stab deprecated"><span cl [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#198-203">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#206-211">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#214-219">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#223-225">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingWriter.html" title="struct opendal::BlockingWriter">Blockin [...]
+<p>Service could have their own minimum buffer size while perform write operations like
+multipart uploads. So the buffer size may be larger than the given buffer size.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#170-173">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#176-179">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#182-185">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.call" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_functions.rs.html#189-191">source</a><h4 class="code-header">pub fn <a href="#method.call" class="fn">call</a>(self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.BlockingWriter.html" title="struct opendal::BlockingWriter">Blockin [...]
result.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FunctionWriter" class="impl"><a href="#impl-Freeze-for-FunctionWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/operator_futures/struct.OperatorFuture.html b/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
index 4c5eca60d7..6497881a6f 100644
--- a/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
+++ b/docs/rust/opendal/operator_futures/struct.OperatorFuture.html
@@ -30,7 +30,7 @@ users to use this struct directly.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#257-259">source</a><h4 class="code-header">pub fn <a href="#method.concurrent-1" class="fn">concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#262-264">source</a><h4 class="code-header">pub fn <a href="#method.chunk-1" class="fn">chunk</a>(self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk size [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.gap" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#267-269">source</a><h4 class="code-header">pub fn <a href="#method.gap" class="fn">gap</a>(self, gap_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the gap size for this reader.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#277-325">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter,+Buffer),+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl<F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+Buffer),+(),+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#277-325">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+Buffer),+(),+F%3E" class="anchor">§</a><h3 class="code-header">impl<F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title= [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h5 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h5>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
@@ -44,7 +44,7 @@ multipart uploads. So the buffer size may be larger than the given buffer size.<
</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#312-314">source</a><h4 class="code-header">pub fn <a href="#method.content_type-1" class="fn">content_type</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set t [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#317-319">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition-1" class="fn">content_disposition</a>(self, v: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div clas [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.executor-1" class="method"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#322-324">source</a><h4 class="code-header">pub fn <a href="#method.executor-1" class="fn">executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the execu [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#332-387">source</a><a href="#impl-OperatorFuture%3C(OpWrite,+OpWriter),+Writer,+F%3E" class="anchor">§</a><h3 class="code-header">impl<F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future. [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COpWrite,+Writer,+F%3E" class="impl"><a class="src rightside" href="../../src/opendal/types/operator/operator_futures.rs.html#332-387">source</a><a href="#impl-OperatorFuture%3COpWrite,+Writer,+F%3E" class="anchor">§</a><h3 class="code-header">impl<F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core: [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h6 id="notes-2"><a class="doc-anchor" href="#notes-2">§</a>Notes</h6>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
diff --git a/docs/rust/opendal/operator_futures/type.FutureWrite.html b/docs/rust/opendal/operator_futures/type.FutureWrite.html
index c81f177fd9..1389a3bcb7 100644
--- a/docs/rust/opendal/operator_futures/type.FutureWrite.html
+++ b/docs/rust/opendal/operator_futures/type.FutureWrite.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Future that generated by `Operator::write_with`."><title>FutureWrite in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.wo [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Future that generated by `Operator::write_with`."><title>FutureWrite in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.wo [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWrite<F> { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(Op [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWrite<F> { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(Op [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
diff --git a/docs/rust/opendal/operator_futures/type.FutureWriter.html b/docs/rust/opendal/operator_futures/type.FutureWriter.html
index 27b1143545..b209e6f340 100644
--- a/docs/rust/opendal/operator_futures/type.FutureWriter.html
+++ b/docs/rust/opendal/operator_futures/type.FutureWriter.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Future that generated by `Operator::writer_with`."><title>FutureWriter in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Future that generated by `Operator::writer_with`."><title>FutureWriter in opendal::operator_futures - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
<p>Users can add more options by public functions provided by this struct.</p>
-</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWriter<F> { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3C(O [...]
+</div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct FutureWriter<F> { <span class="comment">/* private fields */</span> }</code></pre><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorFuture%3COp [...]
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h6 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h6>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
diff --git a/docs/rust/opendal/raw/enum.FourWays.html b/docs/rust/opendal/raw/enum.FourWays.html
index 8553d26e12..270d3bf1de 100644
--- a/docs/rust/opendal/raw/enum.FourWays.html
+++ b/docs/rust/opendal/raw/enum.FourWays.html
@@ -13,19 +13,19 @@
ONE: <a class="trait" href="oio/trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,
TWO: <a class="trait" href="oio/trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,
THREE: <a class="trait" href="oio/trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,
- FOUR: <a class="trait" href="oio/trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#229-236">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="oio/trait.BlockingList.html#tymethod.n [...]
+ FOUR: <a class="trait" href="oio/trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#229-236">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="oio/trait.BlockingList.html#tymeth [...]
ONE: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
TWO: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
THREE: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
- FOUR: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.read-1" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#195-202">source</a><a href="#method.read-1" class="anchor">§</a><h4 class="code-header">fn <a href="oio/trait.BlockingRead.html#tymeth [...]
+ FOUR: <a class="trait" href="oio/trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#195-202">source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">fn <a href="oio/trait.BlockingRead.html#tymethod.r [...]
ONE: <a class="trait" href="oio/trait.List.html" title="trait opendal::raw::oio::List">List</a>,
TWO: <a class="trait" href="oio/trait.List.html" title="trait opendal::raw::oio::List">List</a>,
THREE: <a class="trait" href="oio/trait.List.html" title="trait opendal::raw::oio::List">List</a>,
- FOUR: <a class="trait" href="oio/trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#212-219">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">async fn <a href="oio/trait.List.html#tymethod.next" class="fn">next</ [...]
+ FOUR: <a class="trait" href="oio/trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#212-219">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">async fn <a href="oio/trait.List.html#tymethod.next" class="fn">next</a>(& [...]
ONE: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
TWO: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
THREE: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
- FOUR: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#178-185">source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">async fn <a href="oio/trait.Read.html#tymethod.read" class="fn">read</a>(& [...]
+ FOUR: <a class="trait" href="oio/trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.read-1" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#178-185">source</a><a href="#method.read-1" class="anchor">§</a><h4 class="code-header">async fn <a href="oio/trait.Read.html#tymethod.read" class="fn">read</ [...]
ONE: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,
TWO: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,
THREE: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,
diff --git a/docs/rust/opendal/raw/enum.Operation.html b/docs/rust/opendal/raw/enum.Operation.html
index 0dd129bfe5..0cdc869681 100644
--- a/docs/rust/opendal/raw/enum.Operation.html
+++ b/docs/rust/opendal/raw/enum.Operation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Operation is the name for APIs in `Accessor`."><title>Operation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Mediu [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Operation is the name for APIs in `Accessor`."><title>Operation in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Mediu [...]
<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 19 variants</span></summary> Info,
CreateDir,
Read,
@@ -39,14 +39,17 @@
</div><section id="variant.BlockingDelete" class="variant"><a href="#variant.BlockingDelete" class="anchor">§</a><h3 class="code-header">BlockingDelete</h3></section><div class="docblock"><p>Operation for <a href="trait.Access.html#method.blocking_delete" title="method opendal::raw::Access::blocking_delete"><code>crate::raw::Access::blocking_delete</code></a></p>
</div><section id="variant.BlockingList" class="variant"><a href="#variant.BlockingList" class="anchor">§</a><h3 class="code-header">BlockingList</h3></section><div class="docblock"><p>Operation for <a href="trait.Access.html#method.blocking_list" title="method opendal::raw::Access::blocking_list"><code>crate::raw::Access::blocking_list</code></a></p>
</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Operation" class="impl"><a class="src rightside" href="../../src/opendal/raw/operation.rs.html#66-71">source</a><a href="#impl-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Operation.html" title="enum opendal::raw::Op [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="src rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="src rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a c [...]
H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></d [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-Operation" class="impl"><a class="src rightside" href="../../src/opendal/raw/operation.rs.html#22">source</a><a href="#impl-Copy-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.Operation.html" [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">default fn <a class="fn">get_hash</a><H, B [...]
+ H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
+ B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</div></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Equivalent%3CK%3E [...]
diff --git a/docs/rust/opendal/raw/enum.PresignOperation.html b/docs/rust/opendal/raw/enum.PresignOperation.html
index 3402058b8e..5d39b5a57e 100644
--- a/docs/rust/opendal/raw/enum.PresignOperation.html
+++ b/docs/rust/opendal/raw/enum.PresignOperation.html
@@ -6,7 +6,7 @@
</div></details><h2 id="variants" class="variants section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.</di [...]
</div><section id="variant.Read" class="variant"><a href="#variant.Read" class="anchor">§</a><h3 class="code-header">Read(<a class="struct" href="struct.OpRead.html" title="struct opendal::raw::OpRead">OpRead</a>)</h3></section><div class="docblock"><p>Presign a read operation.</p>
</div><section id="variant.Write" class="variant"><a href="#variant.Write" class="anchor">§</a><h3 class="code-header">Write(<a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::OpWrite">OpWrite</a>)</h3></section><div class="docblock"><p>Presign a write operation.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#224">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-PresignOperation" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#224">source</a><a href="#impl-Clone-for-PresignOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/enum.TwoWays.html b/docs/rust/opendal/raw/enum.TwoWays.html
index 4b2eabb7b2..bbed29f4f2 100644
--- a/docs/rust/opendal/raw/enum.TwoWays.html
+++ b/docs/rust/opendal/raw/enum.TwoWays.html
@@ -5,7 +5,7 @@
<p>Users can wrap two different trait types together.</p>
</div></details><h2 id="variants" class="variants section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.One" class="variant"><a href="#variant.One" class="anchor">§</a><h3 class="code-header">One(ONE)</h3></section><div class="docblock"><p>The first type for the <a href="enum.TwoWays.html" title="enum opendal::raw::TwoWays"><code>TwoWays</code></a>.</p>
</div><section id="variant.Two" class="variant"><a href="#variant.Two" class="anchor">§</a><h3 class="code-header">Two(TWO)</h3></section><div class="docblock"><p>The second type for the <a href="enum.TwoWays.html" title="enum opendal::raw::TwoWays"><code>TwoWays</code></a>.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#63-70">source</a><a href="#impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-h [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../src/opendal/raw/enum_utils.rs.html#63-70">source</a><a href="#impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-h [...]
ONE: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,
TWO: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-TwoWays%3CONE,+TWO%3E" class="impl"><a href="#impl-RefUnwindSafe-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-header">impl<ONE, TWO> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unw [...]
ONE: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,
diff --git a/docs/rust/opendal/raw/index.html b/docs/rust/opendal/raw/index.html
index 4631e46b86..4c0938db11 100644
--- a/docs/rust/opendal/raw/index.html
+++ b/docs/rust/opendal/raw/index.html
@@ -9,7 +9,7 @@ API should never expose raw API directly.</li>
them whenever possible.</li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="adapters/index.html" title="mod opendal::raw::adapters">adapters</a></div><div class="desc docblock-short">Providing adapters and its implementations.</div></li><li><div class="item-name"><a class="mod" href="oio/index.html" title="mod opendal::raw::oio">oio</a></div><div class="desc docblock-short"><code>oio</co [...]
-output.</div></li><li><div class="item-name"><a class="mod" href="tests/index.html" title="mod opendal::raw::tests">tests</a><span class="stab portability" title="Available on crate feature `tests` only"><code>tests</code></span></div><div class="desc docblock-short">Utilities for opendal testing.</div></li></ul><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Access [...]
+output.</div></li><li><div class="item-name"><a class="mod" href="tests/index.html" title="mod opendal::raw::tests">tests</a><span class="stab portability" title="Available on crate feature `tests` only"><code>tests</code></span></div><div class="desc docblock-short">Utilities for opendal testing.</div></li></ul><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Access [...]
<code>Box<dyn AccessDyn></code>.</div></li><li><div class="item-name"><a class="trait" href="trait.Layer.html" title="trait opendal::raw::Layer">Layer</a></div><div class="desc docblock-short">Layer is used to intercept the operations on the underlying storage.</div></li><li><div class="item-name"><a class="trait" href="trait.LayeredAccess.html" title="trait opendal::raw::LayeredAccess">LayeredAccess</a></div><div class="desc docblock-short">LayeredAccess is layered accessor that f [...]
method to inner.</div></li><li><div class="item-name"><a class="trait" href="trait.MaybeSend.html" title="trait opendal::raw::MaybeSend">MaybeSend</a></div><div class="desc docblock-short">MaybeSend is a marker to determine whether a type is <code>Send</code> or not.
We use this trait to wrap the <code>Send</code> requirement for wasm32 target.</div></li><li><div class="item-name"><a class="trait" href="trait.Part.html" title="trait opendal::raw::Part">Part</a></div><div class="desc docblock-short">Part is a trait for multipart part.</div></li><li><div class="item-name"><a class="trait" href="trait.PathQuery.html" title="trait opendal::raw::PathQuery">PathQuery</a><span class="stab portability" title="Available on crate feature `internal-path-cache` [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/enum.ListOperation.html b/docs/rust/opendal/raw/oio/enum.ListOperation.html
index 5b045ab02e..6fb220f46a 100644
--- a/docs/rust/opendal/raw/oio/enum.ListOperation.html
+++ b/docs/rust/opendal/raw/oio/enum.ListOperation.html
@@ -1,18 +1,21 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PageOperation is the name for APIs of lister."><title>ListOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraS [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PageOperation is the name for APIs of lister."><title>ListOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraS [...]
Next,
BlockingNext,
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>PageOperation is the name for APIs of lister.</p>
</div></details><h2 id="variants" class="variants section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.</di [...]
</div><section id="variant.BlockingNext" class="variant"><a href="#variant.BlockingNext" class="anchor">§</a><h3 class="code-header">BlockingNext</h3></section><div class="docblock"><p>Operation for <a href="trait.BlockingList.html#tymethod.next" title="method opendal::raw::oio::BlockingList::next"><code>BlockingList::next</code></a></p>
</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ListOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/api.rs.html#37-42">source</a><a href="#impl-ListOperation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.ListOperation.html" title="enu [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ListOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/api.rs.html#28">source</a><a href="#impl-Clone-for-ListOperation" class="anchor">§</a><h3 class="code-hea [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ListOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/api.rs.html#28">source</a><a href="#impl-Clone-for-ListOperation" class="anchor">§</a><h3 class="code-hea [...]
H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></d [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-ListOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/api.rs.html#28">source</a><a href="#impl-Copy-for-ListOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.L [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">default fn <a class="fn">get_hash</a><H, B [...]
+ H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
+ B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</div></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Equivalent%3CK%3E [...]
diff --git a/docs/rust/opendal/raw/oio/enum.ReadOperation.html b/docs/rust/opendal/raw/oio/enum.ReadOperation.html
index 328b9647f6..1a114ef2d8 100644
--- a/docs/rust/opendal/raw/oio/enum.ReadOperation.html
+++ b/docs/rust/opendal/raw/oio/enum.ReadOperation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PageOperation is the name for APIs of lister."><title>ReadOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraS [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="PageOperation is the name for APIs of lister."><title>ReadOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraS [...]
Read,
BlockingRead,
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>PageOperation is the name for APIs of lister.</p>
@@ -12,7 +12,10 @@ by <code>==</code>.</div></details><details class="toggle method-toggle" open><s
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-ReadOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/read/api.rs.html#30">source</a><a href="#impl-Copy-for-ReadOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.R [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">default fn <a class="fn">get_hash</a><H, B [...]
+ H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
+ B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</div></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Equivalent%3CK%3E [...]
diff --git a/docs/rust/opendal/raw/oio/enum.WriteOperation.html b/docs/rust/opendal/raw/oio/enum.WriteOperation.html
index 020187c3e9..7cba99cc29 100644
--- a/docs/rust/opendal/raw/oio/enum.WriteOperation.html
+++ b/docs/rust/opendal/raw/oio/enum.WriteOperation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="WriteOperation is the name for APIs of Writer."><title>WriteOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fir [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="WriteOperation is the name for APIs of Writer."><title>WriteOperation in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fir [...]
Write,
Close,
Abort,
@@ -18,7 +18,10 @@ by <code>==</code>.</div></details><details class="toggle method-toggle" open><s
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-WriteOperation" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/api.rs.html#27">source</a><a href="#impl-Copy-for-WriteOperation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enu [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
+ T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.get_hash" class="method trait-impl"><a href="#method.get_hash" class="anchor">§</a><h4 class="code-header">default fn <a class="fn">get_hash</a><H, B [...]
+ H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
+ B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.BuildHasher.html" title="trait core::hash::BuildHasher">BuildHasher</a>,</div></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Equivalent%3CK%3E [...]
diff --git a/docs/rust/opendal/raw/oio/index.html b/docs/rust/opendal/raw/oio/index.html
index 2cdba1801c..e988e57bc3 100644
--- a/docs/rust/opendal/raw/oio/index.html
+++ b/docs/rust/opendal/raw/oio/index.html
@@ -4,7 +4,8 @@ output.</p>
depend on them. So we should also implement trait like <code>AsyncRead</code> for
our <code>output</code> traits.</p>
</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.AppendWriter.html" title="struct opendal::raw::oio::AppendWriter">AppendWriter</a></div><div class="desc docblock-short">AppendWriter will implements <a href="trait.Write.html" title="trait opendal::raw::oio::Write"><code>oio::Write</code></a> based on append object.</div></li><li><div class="item-name" [...]
-uploads.</div></li><li><div class="item-name"><a class="struct" href="struct.Entry.html" title="struct opendal::raw::oio::Entry">Entry</a></div><div class="desc docblock-short">Entry is returned by <code>Page</code> or <code>BlockingPage</code> during list operations.</div></li><li><div class="item-name"><a class="struct" href="struct.FlatLister.html" title="struct opendal::raw::oio::FlatLister">FlatLister</a></div><div class="desc docblock-short">FlatLister will walk dir in bottom up wa [...]
+uploads.</div></li><li><div class="item-name"><a class="struct" href="struct.ChunkedWriter.html" title="struct opendal::raw::oio::ChunkedWriter">ChunkedWriter</a></div><div class="desc docblock-short">ChunkedWriter is used to implement <a href="trait.Write.html" title="trait opendal::raw::oio::Write"><code>oio::Write</code></a> based on chunk:
+flush the underlying storage at the `chunk`` size.</div></li><li><div class="item-name"><a class="struct" href="struct.Entry.html" title="struct opendal::raw::oio::Entry">Entry</a></div><div class="desc docblock-short">Entry is returned by <code>Page</code> or <code>BlockingPage</code> during list operations.</div></li><li><div class="item-name"><a class="struct" href="struct.FlatLister.html" title="struct opendal::raw::oio::FlatLister">FlatLister</a></div><div class="desc docblock-short [...]
not needed entries.</div></li><li><div class="item-name"><a class="struct" href="struct.MultipartPart.html" title="struct opendal::raw::oio::MultipartPart">MultipartPart</a></div><div class="desc docblock-short">The result of <a href="trait.MultipartWrite.html#tymethod.write_part" title="method opendal::raw::oio::MultipartWrite::write_part"><code>MultipartWrite::write_part</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.MultipartWriter.html" title="struct [...]
uploads.</div></li><li><div class="item-name"><a class="struct" href="struct.OneShotWriter.html" title="struct opendal::raw::oio::OneShotWriter">OneShotWriter</a></div><div class="desc docblock-short">OneShotWrite is used to implement <a href="trait.Write.html" title="trait opendal::raw::oio::Write"><code>oio::Write</code></a> based on one shot.</div></li><li><div class="item-name"><a class="struct" href="struct.PageContext.html" title="struct opendal::raw::oio::PageContext">PageContext< [...]
object. By implementing AppendWrite, services don’t need to
diff --git a/docs/rust/opendal/raw/oio/sidebar-items.js b/docs/rust/opendal/raw/oio/sidebar-items.js
index 78606d93e5..00f4c23061 100644
--- a/docs/rust/opendal/raw/oio/sidebar-items.js
+++ b/docs/rust/opendal/raw/oio/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS={enum:["ListOperation","ReadOperation","WriteOperation"],struct:["AppendWriter","BlockWriter","Entry","FlatLister","FlexBuf","HierarchyLister","MultipartPart","MultipartWriter","OneShotWriter","PageContext","PageLister","PooledBuf","PositionWriter","PrefixLister","QueueBuf","RangeWriter"],trait:["AppendWrite","BlockWrite","BlockingList","BlockingRead","BlockingWrite","List","MultipartWrite","OneShotWrite","PageList","PositionWrite","RangeWrite","Read","ReadDyn","Writ [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS={enum:["ListOperation","ReadOperation","WriteOperation"],struct:["AppendWriter","BlockWriter","ChunkedWriter","Entry","FlatLister","FlexBuf","HierarchyLister","MultipartPart","MultipartWriter","OneShotWriter","PageContext","PageLister","PooledBuf","PositionWriter","PrefixLister","QueueBuf","RangeWriter"],trait:["AppendWrite","BlockWrite","BlockingList","BlockingRead","BlockingWrite","List","MultipartWrite","OneShotWrite","PageList","PositionWrite","RangeWrite","Read" [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/struct.HierarchyLister.html b/docs/rust/opendal/raw/oio/struct.ChunkedWriter.html
similarity index 81%
copy from docs/rust/opendal/raw/oio/struct.HierarchyLister.html
copy to docs/rust/opendal/raw/oio/struct.ChunkedWriter.html
index b8d8e59348..e2505cbde5 100644
--- a/docs/rust/opendal/raw/oio/struct.HierarchyLister.html
+++ b/docs/rust/opendal/raw/oio/struct.ChunkedWriter.html
@@ -1,18 +1,16 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="ToHierarchyLister will convert a flat list to hierarchy by filter not needed entries."><title>HierarchyLister in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,Fir [...]
-not needed entries.</p>
-<h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
-<p>ToHierarchyLister filter entries after fetch entries. So it’s possible
-to return an empty vec. It doesn’t mean the all pages have been
-returned.</p>
-<p>Please keep calling next until we returned <code>Ok(None)</code></p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#40-122">source</a><a href="#impl-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="stru [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingList-for-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#142-159">source</a><a href="#impl-BlockingList-for-HierarchyLister [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-RefUnwindSafe-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_saf [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</div></h3></section><section id="impl-Send-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-Send-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Sen [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section><section id="impl-Sync-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-Sync-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.Hie [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</div></h3></section><section id="impl-Unpin-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-Unpin-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struc [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</div></h3></section><section id="impl-UnwindSafe-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-UnwindSafe-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSaf [...]
- P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</div></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src ri [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="ChunkedWriter is used to implement `oio::Write` based on chunk: flush the underlying storage at the `chunk`` size."><title>ChunkedWriter in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f [...]
+flush the underlying storage at the `chunk`` size.</p>
+<p>ChunkedWriter makes sure that the size of the data written to the
+underlying storage is</p>
+<ul>
+<li>exactly <code>chunk</code> bytes if <code>exact</code> is true</li>
+<li>at least <code>chunk</code> bytes if <code>exact</code> is false</li>
+</ul>
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ChunkedWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/chunked_write.rs.html#41-51">source</a><a href="#impl-ChunkedWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W: <a class="trait" href= [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Write-for-ChunkedWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/chunked_write.rs.html#53-118">source</a><a href="#impl-Write-for-ChunkedWriter%3CW%3E" class="anc [...]
+ W: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-ChunkedWriter%3CW%3E" class="impl"><a href="#impl-RefUnwindSafe-for-ChunkedWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::R [...]
+ W: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</div></h3></section><section id="impl-Send-for-ChunkedWriter%3CW%3E" class="impl"><a href="#impl-Send-for-ChunkedWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">S [...]
+ W: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</div></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src ri [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/oio/struct.FlatLister.html b/docs/rust/opendal/raw/oio/struct.FlatLister.html
index 96af83c99e..24fa37c079 100644
--- a/docs/rust/opendal/raw/oio/struct.FlatLister.html
+++ b/docs/rust/opendal/raw/oio/struct.FlatLister.html
@@ -29,11 +29,11 @@ always output directly while listing.</p>
A: <a class="trait" href="../trait.Access.html" title="trait opendal::raw::Access">Access</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#79-86">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(acc: A, path: &<a class="primitive" href="https://doc.rust-lang.org/nig [...]
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingList-for-FlatLister%3CA,+P%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#132-174">source</a><a href="#impl-BlockingList-for-FlatLister%3CA,+P%3E" [...]
A: <a class="trait" href="../trait.Access.html" title="trait opendal::raw::Access">Access</a><BlockingLister = P>,
- P: <a class="trait" href="trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#137-173">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingList.html#tymethod.n [...]
+ P: <a class="trait" href="trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#137-173">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingList.html#tymeth [...]
A: <a class="trait" href="../trait.Access.html" title="trait opendal::raw::Access">Access</a><Lister = L>,
- L: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#94-129">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">async fn <a href="trait.List.html#tymethod.next" class="fn">next</a [...]
+ L: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#94-129">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">async fn <a href="trait.List.html#tymethod.next" class="fn">next</a>(&a [...]
<p>wasm32 is a special target that we only have one event-loop for this FlatLister.</p>
-</div><section id="impl-Sync-for-FlatLister%3CA,+L%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#72">source</a><a href="#impl-Sync-for-FlatLister%3CA,+L%3E" class="anchor">§</a><h3 class="code-header">impl<A: <a class="trait" href="../trait.Access.html" title="trait opendal::raw::Access">Access</a>, L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> [...]
+</div><section id="impl-Sync-for-FlatLister%3CA,+L%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/flat_list.rs.html#72">source</a><a href="#impl-Sync-for-FlatLister%3CA,+L%3E" class="anchor">§</a><h3 class="code-header">impl<A: <a class="trait" href="../trait.Access.html" title="trait opendal::raw::Access">Access</a>, L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> [...]
<p>We will only take <code>&mut Self</code> reference for FsLister.</p>
</div></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FlatLister%3CA,+L%3E" class="impl"><a href="#impl-Freeze-for-FlatLister%3CA,+L%3E" class="anchor">§</a><h3 class="code-header">impl<A, L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freez [...]
A: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-FlatLister%3CA,+L%3E" class="impl"><a href="#impl-RefUnwindSafe-for-FlatLister%3CA,+L%3E" class="anchor">§</a><h3 class="code-header">impl<A, L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe [...]
diff --git a/docs/rust/opendal/raw/oio/struct.HierarchyLister.html b/docs/rust/opendal/raw/oio/struct.HierarchyLister.html
index b8d8e59348..a46e1be81a 100644
--- a/docs/rust/opendal/raw/oio/struct.HierarchyLister.html
+++ b/docs/rust/opendal/raw/oio/struct.HierarchyLister.html
@@ -6,7 +6,7 @@ to return an empty vec. It doesn’t mean the all pages have been
returned.</p>
<p>Please keep calling next until we returned <code>Ok(None)</code></p>
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#40-122">source</a><a href="#impl-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="stru [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingList-for-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#142-159">source</a><a href="#impl-BlockingList-for-HierarchyLister [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingList-for-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#142-159">source</a><a href="#impl-BlockingList-for-HierarchyLister [...]
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-RefUnwindSafe-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_saf [...]
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</div></h3></section><section id="impl-Send-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-Send-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Sen [...]
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section><section id="impl-Sync-for-HierarchyLister%3CP%3E" class="impl"><a href="#impl-Sync-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.Hie [...]
diff --git a/docs/rust/opendal/raw/oio/struct.PrefixLister.html b/docs/rust/opendal/raw/oio/struct.PrefixLister.html
index fa0326ff57..fa2cd1fe56 100644
--- a/docs/rust/opendal/raw/oio/struct.PrefixLister.html
+++ b/docs/rust/opendal/raw/oio/struct.PrefixLister.html
@@ -7,8 +7,8 @@
<p>We can use <code>PrefixLister</code> to filter entries with prefix <code>file_</code>.</p>
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-PrefixLister%3CL%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#42-50">source</a><a href="#impl-PrefixLister%3CL%3E" class="anchor">§</a><h3 class="code-header">impl<L> <a class="struct" href=" [...]
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingList-for-PrefixLister%3CL%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#75-87">source</a><a href="#impl-BlockingList-for-PrefixLister%3CL%3E" cl [...]
- L: <a class="trait" href="trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#79-86">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingList.html#tymeth [...]
- L: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#65-72">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">async fn <a href="trait.List.html#tymethod.next" class="fn">next</a>(& [...]
+ L: <a class="trait" href="trait.BlockingList.html" title="trait opendal::raw::oio::BlockingList">BlockingList</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#79-86">source</a><a href="#method.next" class="anchor">§</a><h4 class="code-header">fn <a href="trait.BlockingList.html#tymethod.n [...]
+ L: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.next-1" class="method trait-impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/prefix_list.rs.html#65-72">source</a><a href="#method.next-1" class="anchor">§</a><h4 class="code-header">async fn <a href="trait.List.html#tymethod.next" class="fn">next</ [...]
<p>We will only take <code>&mut Self</code> reference for FsLister.</p>
</div></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-PrefixLister%3CL%3E" class="impl"><a href="#impl-Freeze-for-PrefixLister%3CL%3E" class="anchor">§</a><h3 class="code-header">impl<L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Fr [...]
L: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-PrefixLister%3CL%3E" class="impl"><a href="#impl-RefUnwindSafe-for-PrefixLister%3CL%3E" class="anchor">§</a><h3 class="code-header">impl<L> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::Ref [...]
diff --git a/docs/rust/opendal/raw/oio/struct.QueueBuf.html b/docs/rust/opendal/raw/oio/struct.QueueBuf.html
index 5d32979cf9..8e90b5e4ca 100644
--- a/docs/rust/opendal/raw/oio/struct.QueueBuf.html
+++ b/docs/rust/opendal/raw/oio/struct.QueueBuf.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="QueueBuf is a queue of `Buffer`."><title>QueueBuf in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="QueueBuf is a queue of `Buffer`."><title>QueueBuf in opendal::raw::oio - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781 [...]
<p>It’s designed to allow storing multiple buffers without copying underlying bytes and consume them
in order.</p>
<p>QueueBuf mainly provides the following operations:</p>
@@ -7,20 +7,19 @@ in order.</p>
<li><code>collect</code>: Collect all buffer in the queue as a new <a href="../../struct.Buffer.html" title="struct opendal::Buffer"><code>Buffer</code></a></li>
<li><code>advance</code>: Advance the queue by <code>cnt</code> bytes.</li>
</ul>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-QueueBuf" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#37-116">source</a><a href="#impl-QueueBuf" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.QueueBuf.html" title="stru [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.push" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#46-52">source</a><h4 class="code-header">pub fn <a href="#method.push" class="fn">push</a>(&mut self, buf: <a class="struct" href="../../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>)</h4></section></summary><div class="docblock"><p>Push new <a href="../../struct.Buffer.html" titl [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#56-58">source</a><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Total bytes size inside the buffer queue.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#62-64">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Is the buffer queue empty.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#68-70">source</a><h4 class="code-header">pub fn <a href="#method.take" class="fn">take</a>(&mut self) -> <a class="struct" href="struct.QueueBuf.html" title="struct opendal::raw::oio::QueueBuf">QueueBuf</a></h4></section></summary><div class="docblock"><p>Take the entire buffer queue and leave [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.collect" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#83-91">source</a><h4 class="code-header">pub fn <a href="#method.collect" class="fn">collect</a>(self) -> <a class="struct" href="../../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a> <a href="#" class="tooltip" data-notable-ty="Buffer">ⓘ</a></h4></section></summary><div class="do [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-QueueBuf" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#37-106">source</a><a href="#impl-QueueBuf" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.QueueBuf.html" title="stru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.push" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#46-48">source</a><h4 class="code-header">pub fn <a href="#method.push" class="fn">push</a>(&mut self, buf: <a class="struct" href="../../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>)</h4></section></summary><div class="docblock"><p>Push new <a href="../../struct.Buffer.html" titl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#52-54">source</a><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Total bytes size inside the buffer queue.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#58-60">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Is the buffer queue empty.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.collect" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#73-81">source</a><h4 class="code-header">pub fn <a href="#method.collect" class="fn">collect</a>(self) -> <a class="struct" href="../../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a> <a href="#" class="tooltip" data-notable-ty="Buffer">ⓘ</a></h4></section></summary><div class="do [...]
<p>If the queue is empty, it will return an empty buffer. Otherwise, it will iterate over all
buffers and collect them into a new buffer.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>There are allocation overheads when collecting multiple buffers into a new buffer. But
most of them should be acceptable since we can expect the item length of buffers are slower
than 4k.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.advance" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#95-109">source</a><h4 class="code-header">pub fn <a href="#method.advance" class="fn">advance</a>(&mut self, cnt: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Advance the buffer queue by <code [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.clear" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#113-115">source</a><h4 class="code-header">pub fn <a href="#method.clear" class="fn">clear</a>(&mut self)</h4></section></summary><div class="docblock"><p>Clear the buffer queue.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.advance" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#85-99">source</a><h4 class="code-header">pub fn <a href="#method.advance" class="fn">advance</a>(&mut self, cnt: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Advance the buffer queue by <code> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.clear" class="method"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#103-105">source</a><h4 class="code-header">pub fn <a href="#method.clear" class="fn">clear</a>(&mut self)</h4></section></summary><div class="docblock"><p>Clear the buffer queue.</p>
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-QueueBuf" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/buf/queue_buf.rs.html#34">source</a><a href="#impl-Clone-for-QueueBuf" class="anchor">§</a><h3 class="code-header"> [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/raw/oio/trait.BlockingRead.html b/docs/rust/opendal/raw/oio/trait.BlockingRead.html
index 65ffebd56e..f84bba407d 100644
--- a/docs/rust/opendal/raw/oio/trait.BlockingRead.html
+++ b/docs/rust/opendal/raw/oio/trait.BlockingRead.html
@@ -9,4 +9,4 @@ To make BlockingReader work as expected, we must add this impl.</p>
ONE: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
TWO: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
THREE: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,
- FOUR: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,</div></h3></section><section id="impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/enum_utils.rs.html#63-70">source</a><a href="#impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-header">impl<ONE: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw:: [...]
\ No newline at end of file
+ FOUR: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw::oio::BlockingRead">BlockingRead</a>,</div></h3></section><section id="impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/enum_utils.rs.html#63-70">source</a><a href="#impl-BlockingRead-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-header">impl<ONE: <a class="trait" href="trait.BlockingRead.html" title="trait opendal::raw:: [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.List.html b/docs/rust/opendal/raw/oio/trait.List.html
index 183337e6e7..b7fa098bb3 100644
--- a/docs/rust/opendal/raw/oio/trait.List.html
+++ b/docs/rust/opendal/raw/oio/trait.List.html
@@ -15,4 +15,4 @@ to <code>next</code> will always get the same result.</p>
ONE: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,
TWO: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,
THREE: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,
- FOUR: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section><section id="impl-List-for-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#124-140">source</a><a href="#impl-List-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>> <a class= [...]
\ No newline at end of file
+ FOUR: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>,</div></h3></section><section id="impl-List-for-HierarchyLister%3CP%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/list/hierarchy_list.rs.html#124-140">source</a><a href="#impl-List-for-HierarchyLister%3CP%3E" class="anchor">§</a><h3 class="code-header">impl<P: <a class="trait" href="trait.List.html" title="trait opendal::raw::oio::List">List</a>> <a class= [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Read.html b/docs/rust/opendal/raw/oio/trait.Read.html
index f5e9f1e865..7a22d9c6fa 100644
--- a/docs/rust/opendal/raw/oio/trait.Read.html
+++ b/docs/rust/opendal/raw/oio/trait.Read.html
@@ -21,4 +21,4 @@ upon <code>&mut T</code> instead of <code>&mut Box<T></code>. The
ONE: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
TWO: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
THREE: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,
- FOUR: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,</div></h3></section><section id="impl-Read-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/enum_utils.rs.html#54-61">source</a><a href="#impl-Read-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-header">impl<ONE: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>, TWO: <a class="trait" href= [...]
\ No newline at end of file
+ FOUR: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>,</div></h3></section><section id="impl-Read-for-TwoWays%3CONE,+TWO%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/enum_utils.rs.html#54-61">source</a><a href="#impl-Read-for-TwoWays%3CONE,+TWO%3E" class="anchor">§</a><h3 class="code-header">impl<ONE: <a class="trait" href="trait.Read.html" title="trait opendal::raw::oio::Read">Read</a>, TWO: <a class="trait" href= [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/trait.Write.html b/docs/rust/opendal/raw/oio/trait.Write.html
index a02b991ef1..923de128ca 100644
--- a/docs/rust/opendal/raw/oio/trait.Write.html
+++ b/docs/rust/opendal/raw/oio/trait.Write.html
@@ -23,4 +23,4 @@ repeatedly until all bytes has been written.</p>
</div></details></div><h2 id="object-safety" class="section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="foreign-impls" class="section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="im [...]
W: <a class="trait" href="trait.AppendWrite.html" title="trait opendal::raw::oio::AppendWrite">AppendWrite</a>,</div></h3></section><section id="impl-Write-for-BlockWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/block_write.rs.html#161-233">source</a><a href="#impl-Write-for-BlockWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W> <a class="trait" href="trait.Write.html" title="trait opendal::raw::oio::Write">Write</ [...]
W: <a class="trait" href="trait.BlockWrite.html" title="trait opendal::raw::oio::BlockWrite">BlockWrite</a>,</div></h3></section><section id="impl-Write-for-MultipartWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/multipart_write.rs.html#202-301">source</a><a href="#impl-Write-for-MultipartWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W> <a class="trait" href="trait.Write.html" title="trait opendal::raw::oio::Write [...]
- W: <a class="trait" href="trait.MultipartWrite.html" title="trait opendal::raw::oio::MultipartWrite">MultipartWrite</a>,</div></h3></section><section id="impl-Write-for-OneShotWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/one_shot_write.rs.html#52-78">source</a><a href="#impl-Write-for-OneShotWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W: <a class="trait" href="trait.OneShotWrite.html" title="trait opendal::raw::o [...]
\ No newline at end of file
+ W: <a class="trait" href="trait.MultipartWrite.html" title="trait opendal::raw::oio::MultipartWrite">MultipartWrite</a>,</div></h3></section><section id="impl-Write-for-OneShotWriter%3CW%3E" class="impl"><a class="src rightside" href="../../../src/opendal/raw/oio/write/one_shot_write.rs.html#52-78">source</a><a href="#impl-Write-for-OneShotWriter%3CW%3E" class="anchor">§</a><h3 class="code-header">impl<W: <a class="trait" href="trait.OneShotWrite.html" title="trait opendal::raw::o [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/oio/write/chunked_write/struct.ChunkedWriter.html b/docs/rust/opendal/raw/oio/write/chunked_write/struct.ChunkedWriter.html
new file mode 100644
index 0000000000..7144f98d05
--- /dev/null
+++ b/docs/rust/opendal/raw/oio/write/chunked_write/struct.ChunkedWriter.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta http-equiv="refresh" content="0;URL=../../../../../opendal/raw/oio/struct.ChunkedWriter.html">
+ <title>Redirection</title>
+</head>
+<body>
+ <p>Redirecting to <a href="../../../../../opendal/raw/oio/struct.ChunkedWriter.html">../../../../../opendal/raw/oio/struct.ChunkedWriter.html</a>...</p>
+ <script>location.replace("../../../../../opendal/raw/oio/struct.ChunkedWriter.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/ops/struct.OpWriter.html b/docs/rust/opendal/raw/ops/struct.OpWriter.html
deleted file mode 100644
index d3e8196296..0000000000
--- a/docs/rust/opendal/raw/ops/struct.OpWriter.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta http-equiv="refresh" content="0;URL=../../../opendal/raw/struct.OpWriter.html">
- <title>Redirection</title>
-</head>
-<body>
- <p>Redirecting to <a href="../../../opendal/raw/struct.OpWriter.html">../../../opendal/raw/struct.OpWriter.html</a>...</p>
- <script>location.replace("../../../opendal/raw/struct.OpWriter.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/sidebar-items.js b/docs/rust/opendal/raw/sidebar-items.js
index 5c452a522d..36b12929ef 100644
--- a/docs/rust/opendal/raw/sidebar-items.js
+++ b/docs/rust/opendal/raw/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS={constant:["VERSION"],enum:["BatchOperation","BatchedReply","FourWays","Operation","PresignOperation","ThreeWays","TwoWays"],fn:["build_abs_path","build_header_value","build_rel_path","build_rooted_abs_path","format_authorization_by_basic","format_authorization_by_bearer","format_content_md5","get_basename","get_parent","new_json_deserialize_error","new_json_serialize_error","new_request_build_error","new_request_credential_error","new_request_sign_error","new_std_io [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS={constant:["VERSION"],enum:["BatchOperation","BatchedReply","FourWays","Operation","PresignOperation","ThreeWays","TwoWays"],fn:["build_abs_path","build_header_value","build_rel_path","build_rooted_abs_path","format_authorization_by_basic","format_authorization_by_bearer","format_content_md5","get_basename","get_parent","new_json_deserialize_error","new_json_serialize_error","new_request_build_error","new_request_credential_error","new_request_sign_error","new_std_io [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/struct.BytesContentRange.html b/docs/rust/opendal/raw/struct.BytesContentRange.html
index 76ed1d38ef..7cf7733eba 100644
--- a/docs/rust/opendal/raw/struct.BytesContentRange.html
+++ b/docs/rust/opendal/raw/struct.BytesContentRange.html
@@ -20,8 +20,8 @@ Please make sure their comes up with <code>with_range</code> or <code>with_size<
</div></details><details class="toggle method-toggle" open><summary><section id="method.range" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#90-96">source</a><h4 class="code-header">pub fn <a href="#method.range" class="fn">range</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.o [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.range_inclusive" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#99-105">source</a><h4 class="code-header">pub fn <a href="#method.range_inclusive" class="fn">range_inclusive</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.to_header" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#108-110">source</a><h4 class="code-header">pub fn <a href="#method.to_header" class="fn">to_header</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></h4></section></summary><div [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesContentRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#49">source</a><a href="#impl-Clone-for-BytesContentRange" class="anchor">§< [...]
- __D: <a class="trait" href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a><'de>,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Displ [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesContentRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#49">source</a><a href="#impl-Clone-for-BytesContentRange" class="anchor">§< [...]
+ __D: <a class="trait" href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a><'de>,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Displ [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-BytesContentRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_content_range.rs.html#49">source</a><a href="#impl-Serialize-for-BytesContentRange" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.203/serde/ser/trait.S [...]
__S: <a class="trait" href="https://docs.rs/serde/1.0.203/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.203/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Copy-for-BytesContentRange" class="impl"><a class="src rightside" href="../../src/ope [...]
diff --git a/docs/rust/opendal/raw/struct.BytesRange.html b/docs/rust/opendal/raw/struct.BytesRange.html
index 9b6813e7de..a11a5ca503 100644
--- a/docs/rust/opendal/raw/struct.BytesRange.html
+++ b/docs/rust/opendal/raw/struct.BytesRange.html
@@ -22,7 +22,7 @@ Range: bytes=<range-start>-<range-end>
<p>If this range is full, we don’t need to specify it in http request.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.to_header" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#92-94">source</a><h4 class="code-header">pub fn <a href="#method.to_header" class="fn">to_header</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></h4></section></summary><div class="do [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.to_range" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#97-105">source</a><h4 class="code-header">pub fn <a href="#method.to_range" class="fn">to_range</a>(&self) -> impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a><<a class="primi [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#41">source</a><a href="#impl-Clone-for-BytesRange" class="anchor">§</a><h3 class="code-hea [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BytesRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#41">source</a><a href="#impl-Clone-for-BytesRange" class="anchor">§</a><h3 class="code-hea [...]
T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_r [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Copy-for-BytesRange" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/bytes_range.rs.html#41">source</a><a href="#impl-Copy-for-BytesRange" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="struct" href="stru [...]
diff --git a/docs/rust/opendal/raw/struct.HttpBody.html b/docs/rust/opendal/raw/struct.HttpBody.html
index 9d68052d4e..fb5eeb5332 100644
--- a/docs/rust/opendal/raw/struct.HttpBody.html
+++ b/docs/rust/opendal/raw/struct.HttpBody.html
@@ -4,9 +4,9 @@
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-HttpBody" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#50-104">source</a><a href="#impl-HttpBody" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.HttpBody.html" title="struct ope [...]
S: Stream<Item = <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + <a class="trait" href=" [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.to_buffer" class="method"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#101-103">source</a><h4 class="code-header">pub async fn <a href="#method.to_buffer" class="fn">to_buffer</a>(&mut self) -> <a class="type" href="../type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="../struct.Buffer.html" title="struct opendal::Buffer">Buffer</ [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-HttpBody" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#106-119">source</a><a href="#impl-Read-for-HttpBody" class="anchor">§</a><h3 class="code-header">imp [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-HttpBody" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#106-119">source</a><a href="#impl-Read-for-HttpBody" class="anchor">§</a><h3 class="code-header">imp [...]
<p>HttpBody is send on non wasm32 targets.</p>
-</div><section id="impl-Sync-for-HttpBody" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#48">source</a><a href="#impl-Sync-for-HttpBody" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.HttpBody.html" title="struct opendal::raw::HttpBody">HttpBody</a></h3></section><div class="docblock [...]
+</div><section id="impl-Sync-for-HttpBody" class="impl"><a class="src rightside" href="../../src/opendal/raw/http_util/body.rs.html#48">source</a><a href="#impl-Sync-for-HttpBody" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.HttpBody.html" title="struct opendal::raw::HttpBody">HttpBody</a></h3></section><div class="docblock [...]
<p>HttpBody is sync on non wasm32 targets.</p>
</div></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-HttpBody" class="impl"><a href="#impl-Freeze-for-HttpBody" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/docs/rust/opendal/raw/struct.OpCopy.html b/docs/rust/opendal/raw/struct.OpCopy.html
index a3c8cd5053..3018d1a42f 100644
--- a/docs/rust/opendal/raw/struct.OpCopy.html
+++ b/docs/rust/opendal/raw/struct.OpCopy.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `copy` operation."><title>OpCopy in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCopy" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#720-725">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal::raw::OpCop [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCopy" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#717">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `copy` operation."><title>OpCopy in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wof [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpCopy" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#708-713">source</a><a href="#impl-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpCopy.html" title="struct opendal::raw::OpCop [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpCopy" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#705">source</a><a href="#impl-Clone-for-OpCopy" class="anchor">§</a><h3 class="code-header">impl <a class="trait [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpRename.html b/docs/rust/opendal/raw/struct.OpRename.html
index b9260541ea..5809a5bcc4 100644
--- a/docs/rust/opendal/raw/struct.OpRename.html
+++ b/docs/rust/opendal/raw/struct.OpRename.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `rename` operation."><title>OpRename in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRename" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#731-736">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct opendal::raw: [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRename" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#728">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `rename` operation."><title>OpRename in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpRename" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#719-724">source</a><a href="#impl-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpRename.html" title="struct opendal::raw: [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpRename" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#716">source</a><a href="#impl-Clone-for-OpRename" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/raw/struct.OpWrite.html b/docs/rust/opendal/raw/struct.OpWrite.html
index 48db6d9fa3..77a17d7907 100644
--- a/docs/rust/opendal/raw/struct.OpWrite.html
+++ b/docs/rust/opendal/raw/struct.OpWrite.html
@@ -1,22 +1,30 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `write` operation."><title>OpWrite in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWrite" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#585-680">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::Op [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `write` operation."><title>OpWrite in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWrite" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#586-702">source</a><a href="#impl-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWrite.html" title="struct opendal::raw::Op [...]
<p>If input path is not a file path, an error will be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#596-598">source</a><h4 class="code-header">pub fn <a href="#method.append" class="fn">append</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the append from op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#597-599">source</a><h4 class="code-header">pub fn <a href="#method.append" class="fn">append</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Get the append from op.</p>
<p>The append is the flag to indicate that this write operation is an append operation.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#607-610">source</a><h4 class="code-header">pub fn <a href="#method.with_append" class="fn">with_append</a>(self, append: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the append mode of op.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_append" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#608-611">source</a><h4 class="code-header">pub fn <a href="#method.with_append" class="fn">with_append</a>(self, append: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the append mode of op.</p>
<p>If the append mode is set, the data will be appended to the end of the file.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>Service could return <code>Unsupported</code> if the underlying storage does not support append.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#613-615">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-l [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#618-621">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, content_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#624-626">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" hre [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#629-632">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, content_disposition: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#635-637">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rus [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#640-643">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, cache_control: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#646-648">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#651-654">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the maximum [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#657-659">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="struct" href="../struct.Executor.html" title="s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#662-665">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#616-618">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
+<p>The chunk is used by service to decide the chunk size of the underlying writer.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#629-632">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk of op.</p>
+<p>If chunk is set, the data will be chunked by the underlying writer.</p>
+<h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
+<p>Service could have their own minimum chunk size while perform write
+operations like multipart uploads. So the chunk size may be larger than
+the given buffer size.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#635-637">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_type" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#640-643">source</a><h4 class="code-header">pub fn <a href="#method.with_content_type" class="fn">with_content_type</a>(self, content_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#646-648">source</a><h4 class="code-header">pub fn <a href="#method.content_disposition" class="fn">content_disposition</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" hre [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_content_disposition" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#651-654">source</a><h4 class="code-header">pub fn <a href="#method.with_content_disposition" class="fn">with_content_disposition</a>(self, content_disposition: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#657-659">source</a><h4 class="code-header">pub fn <a href="#method.cache_control" class="fn">cache_control</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rus [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_cache_control" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#662-665">source</a><h4 class="code-header">pub fn <a href="#method.with_cache_control" class="fn">with_cache_control</a>(self, cache_control: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#668-670">source</a><h4 class="code-header">pub fn <a href="#method.concurrent" class="fn">concurrent</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the concurrent.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_concurrent" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#673-676">source</a><h4 class="code-header">pub fn <a href="#method.with_concurrent" class="fn">with_concurrent</a>(self, concurrent: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the maximum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#679-681">source</a><h4 class="code-header">pub fn <a href="#method.executor" class="fn">executor</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="struct" href="../struct.Executor.html" title="s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_executor" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#684-687">source</a><h4 class="code-header">pub fn <a href="#method.with_executor" class="fn">with_executor</a>(self, executor: <a class="struct" href="../struct.Executor.html" title="struct opendal::Executor">Executor</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the executor of the op [...]
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpWrite" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#575">source</a><a href="#impl-Clone-for-OpWrite" class="anchor">§</a><h3 class="code-header">impl <a class="tra [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/raw/struct.OpWriter.html b/docs/rust/opendal/raw/struct.OpWriter.html
deleted file mode 100644
index 626203ddd9..0000000000
--- a/docs/rust/opendal/raw/struct.OpWriter.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Args for `writer` operation."><title>OpWriter in opendal::raw - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#688-714">source</a><a href="#impl-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.OpWriter.html" title="struct opendal::raw: [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#697-699">source</a><h4 class="code-header">pub fn <a href="#method.chunk" class="fn">chunk</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primit [...]
-<p>The chunk is used by service to decide the chunk size of the underlying writer.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_chunk" class="method"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#710-713">source</a><h4 class="code-header">pub fn <a href="#method.with_chunk" class="fn">with_chunk</a>(self, chunk: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Set the chunk of op.</p>
-<p>If chunk is set, the data will be chunked by the underlying writer.</p>
-<h6 id="note"><a class="doc-anchor" href="#note">§</a>NOTE</h6>
-<p>Service could have their own minimum chunk size while perform write
-operations like multipart uploads. So the chunk size may be larger than
-the given buffer size.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpWriter" class="impl"><a class="src rightside" href="../../src/opendal/raw/ops.rs.html#683">source</a><a href="#impl-Clone-for-OpWriter" class="anchor">§</a><h3 class="code-header">impl <a class="t [...]
- T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-Choices" class="impl"><a href="#impl-CoproductSubse [...]
- self,
-) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder></h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FmtForward-for-T" [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html" title="trait core::fmt::Binary">Binary</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Binary</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_display" class="method trait-impl"><a href="#method.fmt_display" class="anchor">§</a><h4 class="code-hea [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Display</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_exp" class="method trait-impl"><a href="#method.fmt_lower_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_exp</a>(self) -> FmtLowerExp<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.LowerExp.html" title="trait core::fmt::LowerExp">LowerExp</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerExp</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_hex" class="method trait-impl"><a href="#method.fmt_lower_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_hex</a>(self) -> FmtLowerHex<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html" title="trait core::fmt::LowerHex">LowerHex</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerHex</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_octal" class="method trait-impl"><a href="#method.fmt_octal" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_octal</a>(self) -> FmtOctal<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html" title="trait core::fmt::Octal">Octal</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Octal</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_pointer" class="method trait-impl"><a href="#method.fmt_pointer" class="anchor">§</a><h4 class="code-header" [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Pointer.html" title="trait core::fmt::Pointer">Pointer</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Pointer</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_exp" class="method trait-impl"><a href="#method.fmt_upper_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_exp</a>(self) -> FmtUpperExp<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.UpperExp.html" title="trait core::fmt::UpperExp">UpperExp</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperExp</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_hex" class="method trait-impl"><a href="#method.fmt_upper_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_hex</a>(self) -> FmtUpperHex<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html" title="trait core::fmt::UpperHex">UpperHex</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperHex</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_list" class="method trait-impl"><a href="#method.fmt_list" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_list</a>(self) -> FmtList<Self><div class="where">where
- <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a Self</a>: for<'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,</div></h4></section></summary><div class='docblock'>Formats each item in a sequence. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summar [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FromRef%3CT%3E-for-T" class="impl"><a href="#impl-FromRef%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> FromRef<T> for T<div class="where">where
- T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from_ref" class="method trait-impl"><a href="#method.from_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">from_ref</a>(input: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference. [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -> WithContext<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-T" class="impl"><a href="#impl-Instrument-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Instrument for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument" class="method trait-impl"><a href="#method.instrument" class="anchor">§</a><h4 class="code-he [...]
-<code>Instrumented</code> wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_current_span</a>(self) -> Instrumented<Self></h4></section></summary><div class='docblock'>Instruments this type with the <a href="super::Span::current()">current</a> <a href="crate::Span"><code>Span</co [...]
-<code>Instrumented</code> wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#748-750">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trai [...]
- U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#758">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoEither-for-T" class="impl"><a class="src rightside" href="https://docs.rs/either/1/src/either/into_either.rs.html#64">source</a><a href="#impl-IntoEither-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html" title="trait either::into_either::IntoEither">IntoEither</a> for T</h3></sec [...]
-if <code>into_left</code> is <code>true</code>.
-Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Right" title="variant either::Either::Right"><code>Right</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
-otherwise. <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_either_with" class="method trait-impl"><a class="src rightside" href="https://docs.rs/either/1/src/either/into_either.rs.html#55-57">source</a><a href="#method.into_either_with" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/either/1/either/into_either/tr [...]
- F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&Self</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enu [...]
-if <code>into_left(&self)</code> returns <code>true</code>.
-Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Right" title="variant either::Either::Right"><code>Right</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
-otherwise. <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either_with">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://docs.rs/tonic/0.10.2/src/tonic/request.rs.html#383">source</a><a href="#impl-IntoRequest%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="htt [...]
- U: LiftFrom<T, I>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.lift_into" class="method trait-impl"><a href="#method.lift_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">lift_into</a>(self) -> U</h4></section></summary><div class='docblock'>Performs the indexed conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pi [...]
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.pipe" class="method trait-impl"><a href="#method.pipe" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/ [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Pipes by value. This is generally the method you want to use. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref" class="method trait-impl"><a href="#method.pipe_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref [...]
- R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref_mut" class="method trait-impl"><a href="#method.pipe_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref_mut</a><'a, R>(&'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core [...]
- R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow" class="method trait-impl"><a href="#method.pipe_borrow" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow</a><'a, B, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/ [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
- B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.borrow()</code> into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow_mut" class="method trait-impl"><a href="#method.pipe_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow_mut</a><'a, B, R>(
- &'a mut self,
- func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut B</a>) -> R,
-) -> R<div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
- B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.borrow_mut()</code> into the pipe
-function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_ref" class="method trait-impl"><a href="#method.pipe_as_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_ref</a><'a, U, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust- [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><U>,
- U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.as_ref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_mut" class="method trait-impl"><a href="#method.pipe_as_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_mut</a><'a, U, R>(&'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><U>,
- U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.as_mut()</code> into the pipe
-function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref" class="method trait-impl"><a href="#method.pipe_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref</a><'a, T, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
- T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.deref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref_mut" class="method trait-impl"><a href="#method.pipe_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref_mut</a><'a, T, R>(
- &'a mut self,
- func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut T</a>) -> R,
-) -> R<div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
- T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
- R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.deref_mut()</code> into the pipe
-function.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-T" class="impl"><a href="#impl-Pointable-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a><h4 class="code-header">c [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
- B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>Borrow<B></code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut" class="method trait-impl"><a href="#method.tap_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class= [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
- B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>BorrowMut<B></code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref" class="method trait-impl"><a href="#method.tap_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref< [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><R>,
- R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>AsRef<R></code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut" class="method trait-impl"><a href="#method.tap_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="f [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><R>,
- R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>AsMut<R></code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref" class="method trait-impl"><a href="#method.tap_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut" class="method trait-impl"><a href="#method.tap_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_dbg" class="method trait-impl"><a href="#method.tap_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_dbg</a>(s [...]
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_dbg" class="method trait-impl"><a href="#method.tap_borrow_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_dbg</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/prim [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
- B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut_dbg" class="method trait-impl"><a href="#method.tap_borrow_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_mut_dbg</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nigh [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
- B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow_mut()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_dbg" class="method trait-impl"><a href="#method.tap_ref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_dbg</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.ref [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><R>,
- R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_ref()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut_dbg" class="method trait-impl"><a href="#method.tap_ref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_mut_dbg</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/p [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><R>,
- R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_ref_mut()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_dbg" class="method trait-impl"><a href="#method.tap_deref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_dbg</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primiti [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_deref()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut_dbg" class="method trait-impl"><a href="#method.tap_deref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_mut_dbg</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
- T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_deref_mut()</code> only in debug builds, and is erased in release
-builds.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ToOwned-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#83-85">source</a><a href="#impl-ToOwned-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html" title="trait alloc::borrow::ToOwned">ToOwned</a> for T<div class="whe [...]
- T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associate [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><T>,</div></h4></section></summary><div class='docblock'>Attempts to convert <code>self</code> into <code>T</code> using <code>TryInto<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="h [...]
- U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class= [...]
- U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype. [...]
- V: MultiLane<T>,</div></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -> V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-T" class="impl"><a href="#impl-WithSubscriber-for-T" class="anchor">§</a><h3 class="code-header">impl<T> WithSubscriber for T< [...]
- S: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><Dispatch>,</div></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a href="#method.with_current_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_subscriber</a>(self) -> WithDispatch<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="crate::dispatcher#setting-the-default-subscriber">defaul [...]
-[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Within%3CG2%3E-for-G1" class="impl"><a href="#impl-Within%3CG2%3E-for-G1" class="anchor">§</a><h3 class="code-header">impl<G1, G2> Within<G2> for G1<div class="where">where
- G2: Contains<G1>,</div></h3></section></summary><div class="impl-items"><section id="method.is_within" class="method trait-impl"><a href="#method.is_within" class="anchor">§</a><h4 class="code-header">fn <a class="fn">is_within</a>(&self, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&G2</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></div></details>< [...]
- G2: Contains<G1>,</div></h3></section></summary><div class="impl-items"><section id="method.is_within-1" class="method trait-impl"><a href="#method.is_within-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">is_within</a>(&self, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&G2</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></div></detai [...]
- T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/raw/trait.Layer.html b/docs/rust/opendal/raw/trait.Layer.html
index eb099a6648..ba45bfddb1 100644
--- a/docs/rust/opendal/raw/trait.Layer.html
+++ b/docs/rust/opendal/raw/trait.Layer.html
@@ -88,4 +88,4 @@ requires <code>Send</code> and <code>Sync</code>.</p>
}</code></pre></div>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.LayeredAccess" class="method"><a class="src rightside" href="../../src/opendal/raw/layer.rs.html#121">source</a><h4 class="code-header">type <a href="#associatedtype.LayeredAccess" class="associatedtype">LayeredAccess</a>: <a class="trait" href [...]
</div></details></div><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.layer" class="method"><a class="src rightside" href="../../src/opendal/raw/layer.rs.html#124">source</a><h4 class="code-header">fn <a href="#tymethod.layer" class="fn">layer</a>(&self, inner: A) -> Self::<a class="associatedtype" href="trait.Layer.ht [...]
-</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="impl"><a class="src rightside" href="../../src/opendal/layers/async_backtrace.rs.html#48-54">source</a><a href="#impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="anchor">§</a><h3 class="code-header">impl<A: <a class= [...]
\ No newline at end of file
+</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="impl"><a class="src rightside" href="../../src/opendal/layers/async_backtrace.rs.html#48-54">source</a><a href="#impl-Layer%3CA%3E-for-AsyncBacktraceLayer" class="anchor">§</a><h3 class="code-header">impl<A: <a class= [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.AliyunDrive.html b/docs/rust/opendal/services/struct.AliyunDrive.html
index 8120cfaf11..37d929b9dc 100644
--- a/docs/rust/opendal/services/struct.AliyunDrive.html
+++ b/docs/rust/opendal/services/struct.AliyunDrive.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Capabilities"><title>AliyunDrive in opendal::services - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,S [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Capabilities"><title>AliyunDrive in opendal::services - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,S [...]
<p>This service can be used to:</p>
<ul>
<li><input disabled="" type="checkbox" checked=""/>
@@ -62,18 +62,18 @@ blocking</li>
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AliyunDriveBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#107-166">source</a><a href="#impl-AliyunDriveBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AliyunDriveBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#108-167">source</a><a href="#impl-AliyunDriveBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct. [...]
<p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.access_token" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#122-126">source</a><h4 class="code-header">pub fn <a href="#method.access_token" class="fn">access_token</a>(&mut self, access_token: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-l [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.client_id" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#129-133">source</a><h4 class="code-header">pub fn <a href="#method.client_id" class="fn">client_id</a>(&mut self, client_id: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nigh [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.client_secret" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#136-140">source</a><h4 class="code-header">pub fn <a href="#method.client_secret" class="fn">client_secret</a>(&mut self, client_secret: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.ru [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.refresh_token" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#143-147">source</a><h4 class="code-header">pub fn <a href="#method.refresh_token" class="fn">refresh_token</a>(&mut self, refresh_token: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.ru [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.drive_type" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#150-154">source</a><h4 class="code-header">pub fn <a href="#method.drive_type" class="fn">drive_type</a>(&mut self, drive_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/ [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#162-165">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -> <a class="primitive" href="https://doc.rus [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.access_token" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#123-127">source</a><h4 class="code-header">pub fn <a href="#method.access_token" class="fn">access_token</a>(&mut self, access_token: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.client_id" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#130-134">source</a><h4 class="code-header">pub fn <a href="#method.client_id" class="fn">client_id</a>(&mut self, client_id: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nigh [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.client_secret" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#137-141">source</a><h4 class="code-header">pub fn <a href="#method.client_secret" class="fn">client_secret</a>(&mut self, client_secret: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.refresh_token" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#144-148">source</a><h4 class="code-header">pub fn <a href="#method.refresh_token" class="fn">refresh_token</a>(&mut self, refresh_token: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.drive_type" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#151-155">source</a><h4 class="code-header">pub fn <a href="#method.drive_type" class="fn">drive_type</a>(&mut self, drive_type: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="primitive" href="https://doc.rust-lang.org/ [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#163-166">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -> <a class="primitive" href="https://doc.rus [...]
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AliyunDriveBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#168-246">source</a><a href="#impl-Builder-for-AliyunDriveBuilder" class="anc [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-AliyunDriveBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#169-247">source</a><a href="#impl-Builder-for-AliyunDriveBuilder" class="anc [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/services/struct.AliyunDriveConfig.html b/docs/rust/opendal/services/struct.AliyunDriveConfig.html
index d1415eebd5..b807d3de23 100644
--- a/docs/rust/opendal/services/struct.AliyunDriveConfig.html
+++ b/docs/rust/opendal/services/struct.AliyunDriveConfig.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Aliyun Drive services support."><title>AliyunDriveConfig in opendal::services - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium- [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Aliyun Drive services support."><title>AliyunDriveConfig in opendal::services - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium- [...]
pub root: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>>,
pub access_token: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>>,
pub client_id: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>>,
@@ -22,8 +22,8 @@
<p>All operations will happen under this type of drive.</p>
<p>Available values are <code>default</code>, <code>backup</code> and <code>resource</code>.</p>
<p>Fallback to default if not set or no other drives can be found.</p>
-</div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-AliyunDriveConfig" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#79-88">source</a><a href="#impl-Debug-for-AliyunDriveConfig" class="anchor">§</a><h3 class="code-header">impl < [...]
- <a class="struct" href="struct.AliyunDriveConfig.html" title="struct opendal::services::AliyunDriveConfig">AliyunDriveConfig</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.deserialize" class="method trait-impl"><a class="src rightside" href="../../src/opendal/serv [...]
+</div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-AliyunDriveConfig" class="impl"><a class="src rightside" href="../../src/opendal/services/aliyun_drive/backend.rs.html#80-89">source</a><a href="#impl-Debug-for-AliyunDriveConfig" class="anchor">§</a><h3 class="code-header">impl < [...]
+ <a class="struct" href="struct.AliyunDriveConfig.html" title="struct opendal::services::AliyunDriveConfig">AliyunDriveConfig</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.deserialize" class="method trait-impl"><a class="src rightside" href="../../src/opendal/serv [...]
__D: <a class="trait" href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a><'de>,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.203/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implem [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/struct.BlockingOperator.html b/docs/rust/opendal/struct.BlockingOperator.html
index 1e77a87188..65c852d5c7 100644
--- a/docs/rust/opendal/struct.BlockingOperator.html
+++ b/docs/rust/opendal/struct.BlockingOperator.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingOperator is the entry for all public blocking APIs."><title>BlockingOperator in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingOperator is the entry for all public blocking APIs."><title>BlockingOperator in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
<p>Read <a href="docs/concepts/index.html" title="mod opendal::docs::concepts"><code>concepts</code></a> for know more about <a href="struct.Operator.html" title="struct opendal::Operator"><code>Operator</code></a>.</p>
<h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2><h3 id="init-backends"><a class="doc-anchor" href="#init-backends">§</a>Init backends</h3>
<p>Read more backend init examples in <a href="services/index.html" title="mod opendal::services"><code>services</code></a></p>
@@ -43,15 +43,15 @@ to wrap the async operator to make it blocking.</p>
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#87-136">source</a><a href="#impl-BlockingOperator" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Block [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.with_limit" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#113-117">source</a><h4 class="code-header">pub fn <a href="#method.with_limit" class="fn">with_limit</a>(&self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Specify t [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#89-138">source</a><a href="#impl-BlockingOperator" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Block [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_limit" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#115-119">source</a><h4 class="code-header">pub fn <a href="#method.with_limit" class="fn">with_limit</a>(&self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Self</h4></section></summary><div class="docblock"><p>Specify t [...]
<p>Default: 1000</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#133-135">source</a><h4 class="code-header">pub fn <a href="#method.info" class="fn">info</a>(&self) -> <a class="struct" href="struct.OperatorInfo.html" title="struct opendal::OperatorInfo">OperatorInfo</a></h4></section></summary><div class="docblock"><p>Get information of underlying acc [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.info" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#135-137">source</a><h4 class="code-header">pub fn <a href="#method.info" class="fn">info</a>(&self) -> <a class="struct" href="struct.OperatorInfo.html" title="struct opendal::OperatorInfo">OperatorInfo</a></h4></section></summary><div class="docblock"><p>Get information of underlying acc [...]
<h5 id="examples-1"><a class="doc-anchor" href="#examples-1">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
<span class="kw">let </span>info = op.info();</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#139-1179">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docblock [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingOperator-1" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#141-1182">source</a><a href="#impl-BlockingOperator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h3></section></summary><div class="docblock [...]
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>For fetch metadata of entries returned by <a href="struct.BlockingLister.html" title="struct opendal::BlockingLister"><code>BlockingLister</code></a>, it’s better to
use <a href="struct.BlockingOperator.html#method.list_with" title="method opendal::BlockingOperator::list_with"><code>BlockingOperator::list_with</code></a> and <a href="struct.BlockingOperator.html#method.lister_with" title="method opendal::BlockingOperator::lister_with"><code>BlockingOperator::lister_with</code></a> with <code>metakey</code>
@@ -81,7 +81,7 @@ we can do about this.</p>
<span class="macro">println!</span>(<span class="string">"file not exist"</span>)
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.stat_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#260-274">source</a><h4 class="code-header">pub fn <a href="#method.stat_with" class="fn">stat_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionStat.htm [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.stat_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#262-276">source</a><h4 class="code-header">pub fn <a href="#method.stat_with" class="fn">stat_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionStat.htm [...]
<h5 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h5>
<p>For fetch metadata of entries returned by <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a>, it’s better to use
<a href="struct.Operator.html#method.list_with" title="method opendal::Operator::list_with"><code>Operator::list_with</code></a> and <a href="struct.Operator.html#method.lister_with" title="method opendal::Operator::lister_with"><code>Operator::lister_with</code></a> with <code>metakey</code> query like
@@ -123,7 +123,7 @@ we can do about this.</p>
<span class="macro">println!</span>(<span class="string">"file not exist"</span>)
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_exist" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#289-298">source</a><h4 class="code-header">pub fn <a href="#method.is_exist" class="fn">is_exist</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_exist" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#291-300">source</a><h4 class="code-header">pub fn <a href="#method.is_exist" class="fn">is_exist</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result"> [...]
<h5 id="example"><a class="doc-anchor" href="#example">§</a>Example</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>opendal::BlockingOperator;
@@ -132,7 +132,7 @@ we can do about this.</p>
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#324-341">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_dir" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#326-343">source</a><h4 class="code-header">pub fn <a href="#method.create_dir" class="fn">create_dir</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Re [...]
<h5 id="notes-2"><a class="doc-anchor" href="#notes-2">§</a>Notes</h5>
<p>To indicate that a path is a directory, it is compulsory to include
a trailing / in the path. Failure to do so may result in
@@ -144,12 +144,12 @@ a trailing / in the path. Failure to do so may result in
</ul>
<h5 id="examples-4"><a class="doc-anchor" href="#examples-4">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.create_dir(<span class="string">"path/to/dir/"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#359-361">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#361-363">source</a><h4 class="code-header">pub fn <a href="#method.read" class="fn">read</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&l [...]
<p>This function will allocate a new bytes internally. For more precise memory control or
reading data lazily, please use <a href="struct.BlockingOperator.html#method.reader" title="method opendal::BlockingOperator::reader"><code>BlockingOperator::reader</code></a></p>
<h5 id="examples-5"><a class="doc-anchor" href="#examples-5">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>bs = op.read(<span class="string">"path/to/file"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.read_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#380-403">source</a><h4 class="code-header">pub fn <a href="#method.read_with" class="fn">read_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionRead.htm [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.read_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#382-405">source</a><h4 class="code-header">pub fn <a href="#method.read_with" class="fn">read_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionRead.htm [...]
<p>This function will allocate a new bytes internally. For more precise memory control or
reading data lazily, please use <a href="struct.BlockingOperator.html#method.reader" title="method opendal::BlockingOperator::reader"><code>BlockingOperator::reader</code></a></p>
<h5 id="examples-6"><a class="doc-anchor" href="#examples-6">§</a>Examples</h5>
@@ -157,10 +157,10 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.rea
<span class="kw">use </span>opendal::EntryMode;
<span class="kw">use </span>opendal::Metakey;
<span class="kw">let </span>bs = op.read_with(<span class="string">"path/to/file"</span>).range(<span class="number">0</span>..<span class="number">10</span>).call()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#418-420">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#420-422">source</a><h4 class="code-header">pub fn <a href="#method.reader" class="fn">reader</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
<h5 id="examples-7"><a class="doc-anchor" href="#examples-7">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>r = op.reader(<span class="string">"path/to/file"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.reader_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#439-460">source</a><h4 class="code-header">pub fn <a href="#method.reader_with" class="fn">reader_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionRe [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.reader_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#441-462">source</a><h4 class="code-header">pub fn <a href="#method.reader_with" class="fn">reader_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionRe [...]
<h5 id="examples-8"><a class="doc-anchor" href="#examples-8">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
<span class="kw">use </span>opendal::EntryMode;
@@ -169,7 +169,7 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.rea
.reader_with(<span class="string">"path/to/file"</span>)
.version(<span class="string">"version_id"</span>)
.call()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#482-484">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#484-486">source</a><h4 class="code-header">pub fn <a href="#method.write" class="fn">write</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait [...]
<h5 id="notes-3"><a class="doc-anchor" href="#notes-3">§</a>Notes</h5>
<ul>
<li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -178,7 +178,7 @@ reading data lazily, please use <a href="struct.BlockingOperator.html#method.rea
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
op.write(<span class="string">"path/to/file"</span>, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#506-542">source</a><h4 class="code-header">pub fn <a href="#method.copy" class="fn">copy</a>(&self, from: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, to: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.copy" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#508-544">source</a><h4 class="code-header">pub fn <a href="#method.copy" class="fn">copy</a>(&self, from: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, to: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str [...]
<h5 id="notes-4"><a class="doc-anchor" href="#notes-4">§</a>Notes</h5>
<ul>
<li><code>from</code> and <code>to</code> must be a file.</li>
@@ -189,7 +189,7 @@ op.write(<span class="string">"path/to/file"</span>, <span class="macro">vec!</s
<h5 id="examples-10"><a class="doc-anchor" href="#examples-10">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>
op.copy(<span class="string">"path/to/file"</span>, <span class="string">"path/to/file2"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#563-599">source</a><h4 class="code-header">pub fn <a href="#method.rename" class="fn">rename</a>(&self, from: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, to: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primiti [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#565-601">source</a><h4 class="code-header">pub fn <a href="#method.rename" class="fn">rename</a>(&self, from: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, to: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primiti [...]
<h5 id="notes-5"><a class="doc-anchor" href="#notes-5">§</a>Notes</h5>
<ul>
<li><code>from</code> and <code>to</code> must be a file.</li>
@@ -199,7 +199,7 @@ op.copy(<span class="string">"path/to/file"</span>, <span class="string">"path/t
<h5 id="examples-11"><a class="doc-anchor" href="#examples-11">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>
op.rename(<span class="string">"path/to/file"</span>, <span class="string">"path/to/file2"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#623-649">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/nightly/cor [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#625-654">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, bs: impl <a class="trait" href="https://doc.rust-lang.org/nightly/cor [...]
<h5 id="notes-6"><a class="doc-anchor" href="#notes-6">§</a>Notes</h5>
<ul>
<li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -212,7 +212,7 @@ op.rename(<span class="string">"path/to/file"</span>, <span class="string">"path
.write_with(<span class="string">"hello.txt"</span>, bs)
.content_type(<span class="string">"text/plain"</span>)
.call()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#674-676">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#679-681">source</a><h4 class="code-header">pub fn <a href="#method.writer" class="fn">writer</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
<h5 id="notes-7"><a class="doc-anchor" href="#notes-7">§</a>Notes</h5>
<ul>
<li>Write will make sure all bytes has been written, or an error will be returned.</li>
@@ -224,7 +224,7 @@ op.rename(<span class="string">"path/to/file"</span>, <span class="string">"path
w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
w.write(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
w.close()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#695-719">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionWr [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#700-722">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionWr [...]
<h5 id="examples-14"><a class="doc-anchor" href="#examples-14">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::BlockingOperator;
<span class="kw">use </span>opendal::EntryMode;
@@ -233,14 +233,14 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
w.write(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>])<span class="question-mark">?</span>;
w.close()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#738-742">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#741-745">source</a><h4 class="code-header">pub fn <a href="#method.delete" class="fn">delete</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result [...]
<h5 id="notes-8"><a class="doc-anchor" href="#notes-8">§</a>Notes</h5>
<ul>
<li>Delete not existing error won’t return errors.</li>
</ul>
<h5 id="examples-15"><a class="doc-anchor" href="#examples-15">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">"path/to/file"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#764-777">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionDe [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#767-780">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionDe [...]
<h5 id="notes-9"><a class="doc-anchor" href="#notes-9">§</a>Notes</h5>
<ul>
<li>Delete not existing error won’t return errors.</li>
@@ -250,23 +250,23 @@ w.close()<span class="question-mark">?</span>;</code></pre></div>
.delete_with(<span class="string">"path/to/file"</span>)
.version(<span class="string">"example_version"</span>)
.call()<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#799-804">source</a><h4 class="code-header">pub fn <a href="#method.remove_via" class="fn">remove_via</a>(&self, input: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Itera [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#802-807">source</a><h4 class="code-header">pub fn <a href="#method.remove_via" class="fn">remove_via</a>(&self, input: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Itera [...]
<p>remove_via will remove files via the given vector iterators.</p>
<h5 id="notes-10"><a class="doc-anchor" href="#notes-10">§</a>Notes</h5>
<p>We don’t support batch delete now.</p>
<h5 id="examples-17"><a class="doc-anchor" href="#examples-17">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>stream = <span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()].into_iter();
op.remove_via(stream)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#821-825">source</a><h4 class="code-header">pub fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org/ni [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#824-828">source</a><h4 class="code-header">pub fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org/ni [...]
<p>We don’t support batch delete now.</p>
<h5 id="examples-18"><a class="doc-anchor" href="#examples-18">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove(<span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()])<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#844-876">source</a><h4 class="code-header">pub fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Re [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#847-879">source</a><h4 class="code-header">pub fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Re [...]
<h5 id="notes-12"><a class="doc-anchor" href="#notes-12">§</a>Notes</h5>
<p>We don’t support batch delete now.</p>
<h5 id="examples-19"><a class="doc-anchor" href="#examples-19">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove_all(<span class="string">"path/to/dir"</span>)<span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#925-927">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#928-930">source</a><h4 class="code-header">pub fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&l [...]
<h5 id="notes-13"><a class="doc-anchor" href="#notes-13">§</a>Notes</h5><h6 id="recursively-list"><a class="doc-anchor" href="#recursively-list">§</a>Recursively List</h6>
<p>This function only read the children of the given directory. To read
all entries recursively, use <code>BlockingOperator::list_with("path").recursive(true)</code>
@@ -296,7 +296,7 @@ For fetching more metadata, please use <a href="struct.BlockingOperator.html#met
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1006-1019">source</a><h4 class="code-header">pub fn <a href="#method.list_with" class="fn">list_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionList.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1009-1022">source</a><h4 class="code-header">pub fn <a href="#method.list_with" class="fn">list_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.FunctionList.h [...]
<h5 id="notes-14"><a class="doc-anchor" href="#notes-14">§</a>Notes</h5><h6 id="streaming-list-1"><a class="doc-anchor" href="#streaming-list-1">§</a>Streaming List</h6>
<p>This function will read all entries in the given directory. It could
take very long time and consume a lot of memory if the directory
@@ -348,7 +348,7 @@ For fetching more metadata, please specify the <code>metakey</code>.</p>
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1065-1067">source</a><h4 class="code-header">pub fn <a href="#method.lister" class="fn">lister</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Resu [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1068-1070">source</a><h4 class="code-header">pub fn <a href="#method.lister" class="fn">lister</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Resu [...]
<p>This function will create a new <a href="struct.BlockingLister.html" title="struct opendal::BlockingLister"><code>BlockingLister</code></a> to list entries. Users can stop listing
via dropping this <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a>.</p>
<h5 id="notes-15"><a class="doc-anchor" href="#notes-15">§</a>Notes</h5><h6 id="recursively-list-1"><a class="doc-anchor" href="#recursively-list-1">§</a>Recursively List</h6>
@@ -376,7 +376,7 @@ For fetching more metadata, please use <a href="struct.BlockingOperator.html#met
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1169-1178">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.Function [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#1172-1181">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="struct" href="operator_functions/struct.Function [...]
<p>This function will create a new handle to list entries.</p>
<p>An error will be returned if given path doesn’t end with <code>/</code>.</p>
<h5 id="examples-23"><a class="doc-anchor" href="#examples-23">§</a>Examples</h5><h6 id="list-current-dir"><a class="doc-anchor" href="#list-current-dir">§</a>List current dir</h6>
@@ -445,7 +445,7 @@ For fetching more metadata, please use <a href="struct.BlockingOperator.html#met
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BlockingOperator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#80">source</a><a href="#impl-Clone-for-BlockingOperator" class="anchor">§</a><h3 [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-BlockingOperator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/blocking_operator.rs.html#82">source</a><a href="#impl-Clone-for-BlockingOperator" class="anchor">§</a><h3 [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/struct.BlockingWriter.html b/docs/rust/opendal/struct.BlockingWriter.html
index e4ea95360f..966fc15aa3 100644
--- a/docs/rust/opendal/struct.BlockingWriter.html
+++ b/docs/rust/opendal/struct.BlockingWriter.html
@@ -1,28 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingWriter is designed to write data into given path in an blocking manner."><title>BlockingWriter in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingWriter is designed to write data into given path in an blocking manner."><title>BlockingWriter in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018 [...]
manner.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#32-93">source</a><a href="#impl-BlockingWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Blocki [...]
-<p>This operation will write all data in given buffer into writer.</p>
-<h6 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h6>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>opendal::BlockingOperator;
-<span class="kw">use </span>opendal::Result;
-
-<span class="kw">async fn </span>test(op: BlockingOperator) -> <span class="prelude-ty">Result</span><()> {
- <span class="kw">let </span><span class="kw-2">mut </span>w = op.writer(<span class="string">"hello.txt"</span>)<span class="question-mark">?</span>;
- <span class="comment">// Buffer can be created from continues bytes.
- </span>w.write(<span class="string">"hello, world"</span>)<span class="question-mark">?</span>;
- <span class="comment">// Buffer can also be created from non-continues bytes.
- </span>w.write(<span class="macro">vec!</span>[Bytes::from(<span class="string">"hello,"</span>), Bytes::from(<span class="string">"world!"</span>)])<span class="question-mark">?</span>;
-
- <span class="comment">// Make sure file has been written completely.
- </span>w.close()<span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#85-87">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&g [...]
-<h6 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h6>
-<p>Close should only be called when the writer is not closed or
-aborted, otherwise an unexpected error could be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_std_write" class="method"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#90-92">source</a><h4 class="code-header">pub fn <a href="#method.into_std_write" class="fn">into_std_write</a>(self) -> <a class="struct" href="struct.StdWriter.html" title="struct opendal::StdWriter">StdWriter</a> <a href="#" class="tooltip" data-notable-ty="StdWriter">ⓘ</a></h [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#29-62">source</a><a href="#impl-BlockingWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Blocki [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#54-56">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&g [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_std_write" class="method"><a class="src rightside" href="../src/opendal/types/blocking_write/blocking_writer.rs.html#59-61">source</a><h4 class="code-header">pub fn <a href="#method.into_std_write" class="fn">into_std_write</a>(self) -> <a class="struct" href="struct.StdWriter.html" title="struct opendal::StdWriter">StdWriter</a> <a href="#" class="tooltip" data-notable-ty="StdWriter">ⓘ</a></h [...]
</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-BlockingWriter" class="impl"><a href="#impl-Freeze-for-BlockingWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/struct.Buffer.html b/docs/rust/opendal/struct.Buffer.html
index de13eeb5a8..a6a874e97e 100644
--- a/docs/rust/opendal/struct.Buffer.html
+++ b/docs/rust/opendal/struct.Buffer.html
@@ -71,7 +71,7 @@ Please use API from [<code>Buf</code>], <a href="https://doc.rust-lang.org/night
<p>This operation is not zero copy, it will copy all bytes into one single <a href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec"><code>Vec<u8></code></a>.
Please use API from [<code>Buf</code>], <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> or [<code>Stream</code>] whenever possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.to_io_slice" class="method"><a class="src rightside" href="../src/opendal/types/buffer.rs.html#305-320">source</a><h4 class="code-header">pub fn <a href="#method.to_io_slice" class="fn">to_io_slice</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org/nightly/ [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-Buffer" class="impl"><a class="src rightside" href="../src/opendal/raw/oio/read/api.rs.html#178-182">source</a><a href="#impl-BlockingRead-for-Buffer" class="anchor">§</a><h3 class="code-head [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingRead-for-Buffer" class="impl"><a class="src rightside" href="../src/opendal/raw/oio/read/api.rs.html#178-182">source</a><a href="#impl-BlockingRead-for-Buffer" class="anchor">§</a><h3 class="code-head [...]
the buffer. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chunk" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/buffer.rs.html#428-446">source</a><a href="#method.chunk" class="anchor">§</a><h4 class="code-header">fn <a class="fn">chunk</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>] <a href="#" class="tooltip" data-notable-ty="&a [...]
and <code>Buf::remaining()</code>. Note that this <em>can</em> return shorter slice (this allows
non-continuous internal representation). <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chunks_vectored" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/buffer.rs.html#449-478">source</a><a href="#method.chunks_vectored" class="anchor">§</a><h4 class="code-header">fn <a class="fn">chunks_vectored</a><'a>(&'a self, dst: &mut [<a class="struct" href="https://doc.rust-lang.org/nightly/std/io [...]
@@ -82,19 +82,19 @@ current position. <a>Read more</a></div></details><details class="toggle method-
<code>self</code> in big-endian byte order. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.get_f64_le" class="method trait-impl"><a href="#method.get_f64_le" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_f64_le</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f64.html">f64</a></h4></section></summary><div class='docblock'>Gets an IEEE754 double-precision (8 bytes [...]
<code>self</code> in little-endian byte order. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.get_f64_ne" class="method trait-impl"><a href="#method.get_f64_ne" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_f64_ne</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f64.html">f64</a></h4></section></summary><div class='docblock'>Gets an IEEE754 double-precision (8 by [...]
<code>self</code> in native-endian byte order. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.copy_to_bytes" class="method trait-impl"><a href="#method.copy_to_bytes" class="anchor">§</a><h4 class="code-header">fn <a class="fn">copy_to_bytes</a>(&mut self, len: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Bytes</h4></section></summary><div class='docblock'>Consumes <cod [...]
-with this data. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method trait-impl"><a href="#method.take" class="anchor">§</a><h4 class="code-header">fn <a class="fn">take</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Take<Self><div class="where">where
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adaptor which will read at most <code>limit</code> bytes from <code>self</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain" class="method trait-impl"><a href="#method.chain" class="anchor">§</a><h4 class="code-header">f [...]
+with this data. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take-1" class="method trait-impl"><a href="#method.take-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">take</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> Take<Self><div class="where">where
+ Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adaptor which will read at most <code>limit</code> bytes from <code>self</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain-1" class="method trait-impl"><a href="#method.chain-1" class="anchor">§</a><h4 class="code-heade [...]
U: Buf,
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adaptor which will chain this buffer with another. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method trait-impl"><a href="#method.reader" class="anchor">§</a><h4 class="code-header">fn <a class="fn">reader</a>(s [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><span class="item-info"><div class="stab portability">Available on <strong>crate feature <code>std</code></strong> only.</div></span><div class='docblock'>Creates an adaptor which implements the <code>Read</code> trait for <code>self</code>. <a>Read more</a></div></details></div></details><details class="toggle impleme [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Returns a view of the buffer with the specified range. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.filled" class="method trait-impl"><a href="#method.filled" class="anchor">§</a><h4 class="code-header">fn <a class="fn">filled</a>(&sel [...]
+ Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><span class="item-info"><div class="stab portability">Available on <strong>crate feature <code>std</code></strong> only.</div></span><div class='docblock'>Creates an adaptor which implements the <code>Read</code> trait for <code>self</code>. <a>Read more</a></div></details></div></details><details class="toggle impleme [...]
+ Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Returns a view of the buffer with the specified range. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.filled" class="method trait-impl"><a href="#method.filled" class="anchor">§</a><h4 class="code-header">fn <a class="fn">filled</a>(&sel [...]
&mut self,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><[Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">N</a>], <a class="struct" href="https://doc.rust-lang.o [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>iter_next_chunk</code>)</span></div></span><div class='docblock'>Advances the iterator and returns an array containing the next <code>N</code> values. <a href="https://doc.rust-lang.org/n [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Consumes the iterator, counting the number of iterations and returning it. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.count">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.last" class="method [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Consumes the iterator, returning the last element. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.last">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.advance_by" class="method trait-impl"><a cla [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an iterator starting at the same point, but stepping by
-the given amount at each iteration. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.step_by">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain-1" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/iter/traits/iterator.rs.html#481-484">source</a></sp [...]
+the given amount at each iteration. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.step_by">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.chain" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/iter/traits/iterator.rs.html#481-484">source</a></span [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>>,</div></h4></section></summary><div class='docblock'>Takes two iterators and creates [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
@@ -126,7 +126,7 @@ their documentation for more information. <a href="https://doc.rust-lang.org/nig
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(&Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</div></h4></section></summa [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</ [...]
- Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.skip">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take-1" class="method trait-i [...]
+ Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.skip">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method trait-imp [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an iterator that yields the first <code>n</code> elements, or fewer
if the underlying iterator ends sooner. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.take">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/iter/traits/iterator.rs.html#1419-1422">source</a></sp [...]
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
@@ -280,14 +280,14 @@ greater than or equal to those of another. <a href="https://doc.rust-lang.org/ni
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>) -> K,
K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a>,</div></h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>is_sorted</code>)</span></div></span><div class='docblock'>Checks if the elements of this iterator are sorted using the given key extraction
-function. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.is_sorted_by_key">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-Buffer" class="impl"><a class="src rightside" href="../src/opendal/raw/oio/read/api.rs.html#115-119">source</a><a href="#impl-Read-for-Buffer" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="raw/oio/trait.Read.html [...]
+function. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#method.is_sorted_by_key">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-Buffer" class="impl"><a class="src rightside" href="../src/opendal/raw/oio/read/api.rs.html#115-119">source</a><a href="#impl-Read-for-Buffer" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="raw/oio/trait.Read.html [...]
Each call to this function must be preceded by a successful call to
-<code>poll_ready</code> which returned <code>Poll::Ready(Ok(()))</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_flush" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/write/buffer_sink.rs.html#70-109">source</a><a href="#method.poll_flush" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_flush</a>(self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/str [...]
+<code>poll_ready</code> which returned <code>Poll::Ready(Ok(()))</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.poll_flush" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/write/buffer_sink.rs.html#70-109">source</a><a href="#method.poll_flush" class="anchor">§</a><h4 class="code-header">fn <a class="fn">poll_flush</a>(self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/str [...]
self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut Self</a>>,
_: &mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a><'_>,
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><Self::Item>></h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
current task for wakeup if the value is not yet available, and returning
-<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/buffer.rs.html#582-584">source</a><a href="#method.size_hint" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&self) -> (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, [...]
+<code>None</code> if the stream is exhausted. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.size_hint-1" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/buffer.rs.html#582-584">source</a><a href="#method.size_hint-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">size_hint</a>(&self) -> (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</ [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/struct.Error.html b/docs/rust/opendal/struct.Error.html
index 9d821101d7..05b3be59eb 100644
--- a/docs/rust/opendal/struct.Error.html
+++ b/docs/rust/opendal/struct.Error.html
@@ -68,7 +68,7 @@ Backtrace:
<p>By setting persistent, we indicate the retry should be stopped.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.kind" class="method"><a class="src rightside" href="../src/opendal/types/error.rs.html#395-397">source</a><h4 class="code-header">pub fn <a href="#method.kind" class="fn">kind</a>(&self) -> <a class="enum" href="enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind</a></h4></section></summary><div class="docblock"><p>Return error’s kind.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_temporary" class="method"><a class="src rightside" href="../src/opendal/types/error.rs.html#400-402">source</a><h4 class="code-header">pub fn <a href="#method.is_temporary" class="fn">is_temporary</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if this error is temporary.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="src rightside" href="../src/opendal/types/error.rs.html#256-296">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a class="tr [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Error" class="impl"><a class="src rightside" href="../src/opendal/types/error.rs.html#256-296">source</a><a href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl <a class="tr [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/error/trait.Error.html" title="trait core::error::Error">Error</a> + 'static,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_error_source" class="method trait-impl"><a href="#method.as_error_source" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_error_source</a>(&self) -> &(dyn <a class="trait" href="https://doc [...]
to benefit from Rust’s automatic dereferencing of method
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index 311f8ce6ca..c29e5e81e3 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -35,7 +35,7 @@ Limit is usually the maximum size of data that operator will handle in one opera
<span class="kw">let </span>info = op.info();</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.blocking" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#145-147">source</a><h4 class="code-header">pub fn <a href="#method.blocking" class="fn">blocking</a>(&self) -> <a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></h4></section></summary><div class="docblock"><p>Create a new block [...]
<p>This operation is nearly no cost.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#151-1920">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-async-api"><a class="doc-ancho [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-1" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#151-1915">source</a><a href="#impl-Operator-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-async-api"><a class="doc-ancho [...]
<p>We will send a <code>list</code> request to path and return any errors we met.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::Operator;
@@ -296,7 +296,7 @@ to the storage service.</p>
w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
w.write(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
w.close().<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.writer_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1080-1105">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.writer_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1080-1100">source</a><h4 class="code-header">pub fn <a href="#method.writer_with" class="fn">writer_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
) -> <a class="type" href="operator_futures/type.FutureWriter.html" title="type opendal::operator_futures::FutureWriter">FutureWriter</a><impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="struct.Writer.html" title="struct opendal::Writer">Writer</a>>>></ [...]
@@ -401,7 +401,7 @@ w.close().<span class="kw">await</span><span class="question-mark">?</span>;</co
w.write(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
w.write(<span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">4096</span>]).<span class="kw">await</span><span class="question-mark">?</span>;
w.close().<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1224-1257">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1219-1252">source</a><h4 class="code-header">pub fn <a href="#method.write_with" class="fn">write_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
bs: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><<a class="struct" href="struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>>,
@@ -464,14 +464,14 @@ please set <code>append</code> to true.</p>
.write_with(<span class="string">"path/to/file"</span>, bs)
.content_type(<span class="string">"text/plain"</span>)
.<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1276-1278">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1271-1273">source</a><h4 class="code-header">pub async fn <a href="#method.delete" class="fn">delete</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result< [...]
<h5 id="notes-12"><a class="doc-anchor" href="#notes-12">§</a>Notes</h5>
<ul>
<li>Deleting a file that does not exist won’t return errors.</li>
</ul>
<h5 id="examples-15"><a class="doc-anchor" href="#examples-15">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.delete(<span class="string">"test"</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1298-1310">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1293-1305">source</a><h4 class="code-header">pub fn <a href="#method.delete_with" class="fn">delete_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
) -> <a class="type" href="operator_futures/type.FutureDelete.html" title="type opendal::operator_futures::FutureDelete">FutureDelete</a><impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>>> [...]
@@ -482,13 +482,13 @@ please set <code>append</code> to true.</p>
<h5 id="examples-16"><a class="doc-anchor" href="#examples-16">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>
op.delete_with(<span class="string">"test"</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1331-1333">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org/nig [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1326-1328">source</a><h4 class="code-header">pub async fn <a href="#method.remove" class="fn">remove</a>(&self, paths: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="https://doc.rust-lang.org/nig [...]
<p>If underlying services support delete in batch, we will use batch
delete instead.</p>
<h5 id="examples-17"><a class="doc-anchor" href="#examples-17">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove(<span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()])
.<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1360-1391">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_via" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1355-1386">source</a><h4 class="code-header">pub async fn <a href="#method.remove_via" class="fn">remove_via</a>(
&self,
input: impl Stream<Item = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,
) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4></section></summary><div class="docblock"><p>remove will remove files via the given paths.</p>
@@ -501,13 +501,13 @@ delete instead.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>futures::stream;
<span class="kw">let </span>stream = stream::iter(<span class="macro">vec!</span>[<span class="string">"abc"</span>.to_string(), <span class="string">"def"</span>.to_string()]);
op.remove_via(stream).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1412-1463">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Res [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_all" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1407-1458">source</a><h4 class="code-header">pub async fn <a href="#method.remove_all" class="fn">remove_all</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Res [...]
<h5 id="notes-16"><a class="doc-anchor" href="#notes-16">§</a>Notes</h5>
<p>If underlying services support delete in batch, we will use batch
delete instead.</p>
<h5 id="examples-19"><a class="doc-anchor" href="#examples-19">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>op.remove_all(<span class="string">"path/to/dir"</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1546-1548">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1541-1543">source</a><h4 class="code-header">pub async fn <a href="#method.list" class="fn">list</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>< [...]
<h5 id="notes-17"><a class="doc-anchor" href="#notes-17">§</a>Notes</h5><h6 id="recursively-list"><a class="doc-anchor" href="#recursively-list">§</a>Recursively List</h6>
<p>This function only read the children of the given directory. To read
all entries recursively, use <code>Operator::list_with("path").recursive(true)</code>
@@ -560,7 +560,7 @@ make sure the path is end with <code>/</code>.</p>
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1699-1712">source</a><h4 class="code-header">pub fn <a href="#method.list_with" class="fn">list_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1694-1707">source</a><h4 class="code-header">pub fn <a href="#method.list_with" class="fn">list_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
) -> <a class="type" href="operator_futures/type.FutureList.html" title="type opendal::operator_futures::FutureList">FutureList</a><impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc: [...]
@@ -657,7 +657,7 @@ Please pick up the metadata you need to reduce the extra <code>stat</code> cost.
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1757-1759">source</a><h4 class="code-header">pub async fn <a href="#method.lister" class="fn">lister</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1752-1754">source</a><h4 class="code-header">pub async fn <a href="#method.lister" class="fn">lister</a>(&self, path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result< [...]
<p>This function will create a new <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a> to list entries. Users can stop
listing via dropping this <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a>.</p>
<h5 id="notes-19"><a class="doc-anchor" href="#notes-19">§</a>Notes</h5><h6 id="recursively-list-1"><a class="doc-anchor" href="#recursively-list-1">§</a>Recursively list</h6>
@@ -684,7 +684,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1910-1919">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lister_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1905-1914">source</a><h4 class="code-header">pub fn <a href="#method.lister_with" class="fn">lister_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
) -> <a class="type" href="operator_futures/type.FutureLister.html" title="type opendal::operator_futures::FutureLister">FutureLister</a><impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a><Output = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="struct" href="struct.Lister.html" title="struct opendal::Lister">Lister</a>>>></ [...]
@@ -784,8 +784,8 @@ Please pick up the metadata you need to reduce the extra <code>stat</code> cost.
EntryMode::Unknown => <span class="kw">continue</span>,
}
}</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1923-2240">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
-</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1944-1951">source</a><h4 class="code-header">pub async fn <a href="#method.presign_stat" class="fn">presign_stat</a>(
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-2" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1918-2235">source</a><a href="#impl-Operator-2" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><p>Operator presign API.</p>
+</div><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.presign_stat" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1939-1946">source</a><h4 class="code-header">pub async fn <a href="#method.presign_stat" class="fn">presign_stat</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -803,7 +803,7 @@ Please pick up the metadata you need to reduce the extra <code>stat</code> cost.
.uri(signed_req.uri())
.body(())<span class="question-mark">?</span>;
</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_stat_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1968-1985">source</a><h4 class="code-header">pub fn <a href="#method.presign_stat_with" class="fn">presign_stat_with</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_stat_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#1963-1980">source</a><h4 class="code-header">pub fn <a href="#method.presign_stat_with" class="fn">presign_stat_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -816,7 +816,7 @@ Please pick up the metadata you need to reduce the extra <code>stat</code> cost.
<span class="kw">async fn </span>test(op: Operator) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span>signed_req = op.presign_stat_with(<span class="string">"test"</span>,Duration::from_secs(<span class="number">3600</span>)).override_content_disposition(<span class="string">"attachment; filename=\"othertext.txt\""</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2020-2027">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read" class="fn">presign_read</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2015-2022">source</a><h4 class="code-header">pub async fn <a href="#method.presign_read" class="fn">presign_read</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -840,7 +840,7 @@ instead.</p>
</ul>
<p>We can download this file via <code>curl</code> or other tools without credentials:</p>
<div class="example-wrap"><pre class="language-shell"><code>curl "https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&X-Amz-Date=20130721T201207Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature-value>" -O /tmp/test.txt
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2090-2107">source</a><h4 class="code-header">pub fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_read_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2085-2102">source</a><h4 class="code-header">pub fn <a href="#method.presign_read_with" class="fn">presign_read_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -891,7 +891,7 @@ instead.</p>
.<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2143-2145">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write" class="fn">presign_write</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2138-2140">source</a><h4 class="code-header">pub async fn <a href="#method.presign_write" class="fn">presign_write</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -918,7 +918,7 @@ extra options like <code>content_type</code>, please use <a href="struct.Operato
</ul>
<p>We can upload file as this file via <code>curl</code> or other tools without credential:</p>
<div class="example-wrap"><pre class="language-shell"><code>curl -X PUT "https://s3.amazonaws.com/examplebucket/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=access_key_id/20130721/us-east-1/s3/aws4_request&X-Amz-Date=20130721T201207Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature-value>" -d "Hello, World!"
-</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2222-2239">source</a><h4 class="code-header">pub fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(
+</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.presign_write_with" class="method"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#2217-2234">source</a><h4 class="code-header">pub fn <a href="#method.presign_write_with" class="fn">presign_write_with</a>(
&self,
path: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
expire: <a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>,
@@ -1088,7 +1088,7 @@ inline.</p>
<span class="kw">let </span>op = op.layer(LoggingLayer::default());
<span class="comment">// All operations will go through the new_layer
</span><span class="kw">let _ </span>= op.read(<span class="string">"test_file"</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#63">source</a><a href="#impl-Clone-for-Operator" class="anchor">§</a><h3 class="code-header">impl [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operator" class="impl"><a class="src rightside" href="../src/opendal/types/operator/operator.rs.html#63">source</a><a href="#impl-Clone-for-Operator" class="anchor">§</a><h3 class="code-header">impl [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/struct.StdWriter.html b/docs/rust/opendal/struct.StdWriter.html
index d6c95a9d28..70e240dc9d 100644
--- a/docs/rust/opendal/struct.StdWriter.html
+++ b/docs/rust/opendal/struct.StdWriter.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="StdWriter is the adapter of `std::io::Write` for `BlockingWriter`."><title>StdWriter in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="StdWriter is the adapter of `std::io::Write` for `BlockingWriter`."><title>StdWriter in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
<p>Users can use this adapter in cases where they need to use <a href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write"><code>std::io::Write</code></a> related trait.</p>
<h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
<p>Files are automatically closed when they go out of scope. Errors detected on closing are ignored
by the implementation of Drop. Use the method <code>close</code> if these errors must be manually handled.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/std_writer.rs.html#36-66">source</a><a href="#impl-StdWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdWriter.html" title [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Drop-for-StdWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/std_writer.rs.html#114-121">source</a><a href="#impl-Drop-for-StdWriter" class="anchor">§</a><h3 class="code [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/std_writer.rs.html#37-67">source</a><a href="#impl-StdWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdWriter.html" title [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Drop-for-StdWriter" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_write/std_writer.rs.html#115-122">source</a><a href="#impl-Drop-for-StdWriter" class="anchor">§</a><h3 class="code [...]
contents reach their destination. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html#tymethod.flush">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_vectored" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.36.0">1.36.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#1622">source</a></span><a href="#method.write_vectore [...]
implementation. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html#method.is_write_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_all" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#1699">source</a></span><a href="#method.write_all" class="anchor">§< [...]
encountered. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html#method.write_fmt">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.by_ref" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#1874-1876">source</a></span><a href="#method.by_ref" class="anchor">§</a><h4 class [...]
diff --git a/docs/rust/opendal/struct.Writer.html b/docs/rust/opendal/struct.Writer.html
index 474e8dc0fb..a9e35be8f1 100644
--- a/docs/rust/opendal/struct.Writer.html
+++ b/docs/rust/opendal/struct.Writer.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Writer is designed to write data into given path in an asynchronous manner."><title>Writer in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ff [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Writer is designed to write data into given path in an asynchronous manner."><title>Writer in opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ff [...]
manner.</p>
<h3 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h3>
<p>Please make sure either <code>close</code> or <code>abort</code> has been called before
@@ -56,7 +56,7 @@ on non-appendable file could return <a href="enum.ErrorKind.html#variant.Conditi
<li>Services that doesn’t support append will return <a href="enum.ErrorKind.html#variant.Unsupported" title="variant opendal::ErrorKind::Unsupported"><code>ErrorKind::Unsupported</code></a> error when
creating writer with <code>append</code> enabled.</li>
</ul>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Writer" class="impl"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#105-299">source</a><a href="#impl-Writer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Writer.html" title="struct opendal::Wr [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Writer" class="impl"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#103-307">source</a><a href="#impl-Writer" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Writer.html" title="struct opendal::Wr [...]
<p>This operation will write all data in given buffer into writer.</p>
<h6 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h6>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bytes::Bytes;
@@ -75,19 +75,19 @@ creating writer with <code>append</code> enabled.</li>
</span>w.close().<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_from" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#154-162">source</a><h4 class="code-header">pub async fn <a href="#method.write_from" class="fn">write_from</a>(&mut self, bs: impl Buf) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_from" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#162-170">source</a><h4 class="code-header">pub async fn <a href="#method.write_from" class="fn">write_from</a>(&mut self, bs: impl Buf) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive. [...]
<p>This operation will write all data in given buffer into writer.</p>
<h5 id="todo"><a class="doc-anchor" href="#todo">§</a>TODO</h5>
<p>Optimize this function to avoid unnecessary copy.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#170-172">source</a><h4 class="code-header">pub async fn <a href="#method.abort" class="fn">abort</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4></s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.abort" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#178-180">source</a><h4 class="code-header">pub async fn <a href="#method.abort" class="fn">abort</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4></s [...]
<h6 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h6>
<p>Abort should only be called when the writer is not closed or
aborted, otherwise an unexpected error could be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#180-182">source</a><h4 class="code-header">pub async fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4></s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#188-190">source</a><h4 class="code-header">pub async fn <a href="#method.close" class="fn">close</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>></h4></s [...]
<h6 id="notes-2"><a class="doc-anchor" href="#notes-2">§</a>Notes</h6>
<p>Close should only be called when the writer is not closed or
aborted, otherwise an unexpected error could be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_async_write" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#239-241">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_async_write" class="fn">into_futures_async_write</a>(self) -> <a class="struct" href="struct.FuturesAsyncWriter.html" title="struct opendal::FuturesAsyncWriter">FuturesAsyncWriter</a></h4></section></summary [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_async_write" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#247-249">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_async_write" class="fn">into_futures_async_write</a>(self) -> <a class="struct" href="struct.FuturesAsyncWriter.html" title="struct opendal::FuturesAsyncWriter">FuturesAsyncWriter</a></h4></section></summary [...]
<h5 id="notes-3"><a class="doc-anchor" href="#notes-3">§</a>Notes</h5>
<p>FuturesAsyncWriter is not a zero-cost abstraction. The underlying writer
requires an owned <a href="struct.Buffer.html" title="struct opendal::Buffer"><code>Buffer</code></a>, which involves an extra copy operation.</p>
@@ -129,7 +129,7 @@ must be manually handled.</p>
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_bytes_sink" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#296-298">source</a><h4 class="code-header">pub fn <a href="#method.into_bytes_sink" class="fn">into_bytes_sink</a>(self) -> <a class="struct" href="struct.FuturesBytesSink.html" title="struct opendal::FuturesBytesSink">FuturesBytesSink</a></h4></section></summary><div class="docblock"><p>Convert [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_bytes_sink" class="method"><a class="src rightside" href="../src/opendal/types/write/writer.rs.html#304-306">source</a><h4 class="code-header">pub fn <a href="#method.into_bytes_sink" class="fn">into_bytes_sink</a>(self) -> <a class="struct" href="struct.FuturesBytesSink.html" title="struct opendal::FuturesBytesSink">FuturesBytesSink</a></h4></section></summary><div class="docblock"><p>Convert [...]
<h5 id="notes-4"><a class="doc-anchor" href="#notes-4">§</a>Notes</h5>
<p>FuturesBytesSink is a zero-cost abstraction. The underlying writer
will reuse the Bytes and won’t perform any copy operation.</p>
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index d63fc51a3a..958c0fb9dc 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -22,4 +22,4 @@ We also promise that every public API will provide detailed documentation.</p>
</div></details></div><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.from_map" class="method"><a class="src rightside" href="../src/opendal/types/builder.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/nightly/std/col [...]
</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.build" class="method"><a class="src rightside" href="../src/opendal/types/builder.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(&mut self) -> <a class="type" href="type.Result.html" title="type opendal::Result">Result</a><Self::<a class="associatedtype" href="trait.Builder.html#associatedtype.Accessor" title="type opendal::Builder::Accessor [...]
</div></details></div><h2 id="object-safety" class="section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="foreign-impls" class="section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="im [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="src rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" class=" [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="src rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" class=" [...]
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index 3d80e457d3..d50f1dfeb2 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1 +1 @@
-var searchIndex=new Map(JSON.parse('[["opendal",{"t":"RPPPPPPPPFFFFFFFKPPFPPPPPPPPPPPPPPPPPPFGPFGPPKFPPPPFFFFPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPFFFPPPPPPPFPPIPPTGPPPPFFFPPPPPPPPPPPPPFPNNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
\ No newline at end of file
+var searchIndex=new Map(JSON.parse('[["opendal",{"t":"RPPPPPPPPFFFFFFFKPPFPPPPPPPPPPPPPPPPPPFGPFGPPKFPPPPFFFFPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPFFFPPPPPPPFPPIPPTGPPPPFFFPPPPPPPPPPPPPFPNNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
\ No newline at end of file
diff --git a/docs/rust/search.desc/opendal/opendal-desc-0-.js b/docs/rust/search.desc/opendal/opendal-desc-0-.js
index b2b0b55544..99b64efa4f 100644
--- a/docs/rust/search.desc/opendal/opendal-desc-0-.js
+++ b/docs/rust/search.desc/opendal/opendal-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("opendal",0,"Apache OpenDAL\u2122 is a data access layer that allows users \u2026\nThe accessor that built by this builder.\naliyun_drive: Aliyun Drive services.\nalluxio: Alluxio services.\nThe given path already exists thus we failed to the \u2026\natomicserver: Atomicserver services.\nazblob: Azure Storage Blob services.\nAzdls: Azure Data Lake Storage Gen2.\nazfile: Azfile Services\nB2: Backblaze B2 Services.\nBlockingLister is designed to list entries at [...]
\ No newline at end of file
+searchState.loadedDescShard("opendal",0,"Apache OpenDAL\u2122 is a data access layer that allows users \u2026\nThe accessor that built by this builder.\naliyun_drive: Aliyun Drive services.\nalluxio: Alluxio services.\nThe given path already exists thus we failed to the \u2026\natomicserver: Atomicserver services.\nazblob: Azure Storage Blob services.\nAzdls: Azure Data Lake Storage Gen2.\nazfile: Azfile Services\nB2: Backblaze B2 Services.\nBlockingLister is designed to list entries at [...]
\ No newline at end of file
diff --git a/docs/rust/src-files.js b/docs/rust/src-files.js
index a398403479..cdac0e4919 100644
--- a/docs/rust/src-files.js
+++ b/docs/rust/src-files.js
@@ -1 +1 @@
-var srcIndex=new Map(JSON.parse('[["opendal",["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","dtrace.rs","error_context.rs","immutable_index.rs","logging.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","prometheus_client.rs","retry.rs","throttle.rs","timeou [...]
\ No newline at end of file
+var srcIndex=new Map(JSON.parse('[["opendal",["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","dtrace.rs","error_context.rs","immutable_index.rs","logging.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","prometheus_client.rs","retry.rs","throttle.rs","timeou [...]
\ No newline at end of file
diff --git a/docs/rust/src/opendal/layers/complete.rs.html b/docs/rust/src/opendal/layers/complete.rs.html
index abc279a70a..9d1d331c10 100644
--- a/docs/rust/src/opendal/layers/complete.rs.html
+++ b/docs/rust/src/opendal/layers/complete.rs.html
@@ -923,6 +923,37 @@
<a href="#923" id="923">923</a>
<a href="#924" id="924">924</a>
<a href="#925" id="925">925</a>
+<a href="#926" id="926">926</a>
+<a href="#927" id="927">927</a>
+<a href="#928" id="928">928</a>
+<a href="#929" id="929">929</a>
+<a href="#930" id="930">930</a>
+<a href="#931" id="931">931</a>
+<a href="#932" id="932">932</a>
+<a href="#933" id="933">933</a>
+<a href="#934" id="934">934</a>
+<a href="#935" id="935">935</a>
+<a href="#936" id="936">936</a>
+<a href="#937" id="937">937</a>
+<a href="#938" id="938">938</a>
+<a href="#939" id="939">939</a>
+<a href="#940" id="940">940</a>
+<a href="#941" id="941">941</a>
+<a href="#942" id="942">942</a>
+<a href="#943" id="943">943</a>
+<a href="#944" id="944">944</a>
+<a href="#945" id="945">945</a>
+<a href="#946" id="946">946</a>
+<a href="#947" id="947">947</a>
+<a href="#948" id="948">948</a>
+<a href="#949" id="949">949</a>
+<a href="#950" id="950">950</a>
+<a href="#951" id="951">951</a>
+<a href="#952" id="952">952</a>
+<a href="#953" id="953">953</a>
+<a href="#954" id="954">954</a>
+<a href="#955" id="955">955</a>
+<a href="#956" id="956">956</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -947,6 +978,7 @@
<span class="kw">use </span><span class="kw">crate</span>::raw::oio::FlatLister;
<span class="kw">use </span><span class="kw">crate</span>::raw::oio::PrefixLister;
+<span class="kw">use </span><span class="kw">crate</span>::raw::TwoWays;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -1296,7 +1328,7 @@
<span class="kw">type </span>Inner = A;
<span class="kw">type </span>Reader = CompleteReader<A::Reader>;
<span class="kw">type </span>BlockingReader = CompleteReader<A::BlockingReader>;
- <span class="kw">type </span>Writer = CompleteWriter<A::Writer>;
+ <span class="kw">type </span>Writer = TwoWays<CompleteWriter<A::Writer>, oio::ChunkedWriter<CompleteWriter<A::Writer>>>;
<span class="kw">type </span>BlockingWriter = CompleteWriter<A::BlockingWriter>;
<span class="kw">type </span>Lister = CompleteLister<A, A::Lister>;
<span class="kw">type </span>BlockingLister = CompleteLister<A, A::BlockingLister>;
@@ -1346,8 +1378,38 @@
));
}
+ <span class="comment">// Calculate buffer size.
+ // If `chunk` is not set, we use `write_multi_min_size` or `write_multi_align_size`
+ // as the default size.
+ </span><span class="kw">let </span>chunk_size = args
+ .chunk()
+ .or(capability.write_multi_min_size)
+ .or(capability.write_multi_align_size)
+ .map(|<span class="kw-2">mut </span>size| {
+ <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = capability.write_multi_max_size {
+ size = size.min(v);
+ }
+ <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = capability.write_multi_min_size {
+ size = size.max(v);
+ }
+ <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = capability.write_multi_align_size {
+ <span class="comment">// Make sure size >= size first.
+ </span>size = size.max(v);
+ size -= size % v;
+ }
+
+ size
+ });
+ <span class="kw">let </span>exact = args.chunk().is_some() || capability.write_multi_align_size.is_some();
+
<span class="kw">let </span>(rp, w) = <span class="self">self</span>.inner.write(path, args.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let </span>w = CompleteWriter::new(w);
+
+ <span class="kw">let </span>w = <span class="kw">match </span>chunk_size {
+ <span class="prelude-val">None </span>=> TwoWays::One(w),
+ <span class="prelude-val">Some</span>(size) => TwoWays::Two(oio::ChunkedWriter::new(w, size, exact)),
+ };
+
<span class="prelude-val">Ok</span>((rp, w))
}
diff --git a/docs/rust/src/opendal/layers/metrics.rs.html b/docs/rust/src/opendal/layers/metrics.rs.html
index 479a555170..6122493339 100644
--- a/docs/rust/src/opendal/layers/metrics.rs.html
+++ b/docs/rust/src/opendal/layers/metrics.rs.html
@@ -864,8 +864,9 @@
<span class="kw">use </span>bytes::Buf;
<span class="kw">use </span>futures::FutureExt;
<span class="kw">use </span>futures::TryFutureExt;
-<span class="kw">use </span>metrics::counter;
-<span class="kw">use </span>metrics::histogram;
+<span class="kw">use </span>metrics::increment_counter;
+<span class="kw">use </span>metrics::register_counter;
+<span class="kw">use </span>metrics::register_histogram;
<span class="kw">use </span>metrics::Counter;
<span class="kw">use </span>metrics::Histogram;
@@ -1028,186 +1029,186 @@
<span class="self">Self </span>{
service,
- requests_total_metadata: <span class="macro">counter!</span>(
+ requests_total_metadata: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Info.into_static(),
),
- requests_duration_seconds_metadata: <span class="macro">histogram!</span>(
+ requests_duration_seconds_metadata: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Info.into_static(),
),
- requests_total_create: <span class="macro">counter!</span>(
+ requests_total_create: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::CreateDir.into_static(),
),
- requests_duration_seconds_create: <span class="macro">histogram!</span>(
+ requests_duration_seconds_create: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::CreateDir.into_static(),
),
- requests_total_read: <span class="macro">counter!</span>(
+ requests_total_read: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Read.into_static(),
),
- requests_duration_seconds_read: <span class="macro">histogram!</span>(
+ requests_duration_seconds_read: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Read.into_static(),
),
- bytes_total_read: <span class="macro">counter!</span>(
+ bytes_total_read: <span class="macro">register_counter!</span>(
METRIC_BYTES_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Read.into_static(),
),
- requests_total_write: <span class="macro">counter!</span>(
+ requests_total_write: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Write.into_static(),
),
- requests_duration_seconds_write: <span class="macro">histogram!</span>(
+ requests_duration_seconds_write: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Write.into_static(),
),
- bytes_total_write: <span class="macro">counter!</span>(
+ bytes_total_write: <span class="macro">register_counter!</span>(
METRIC_BYTES_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Write.into_static(),
),
- requests_total_stat: <span class="macro">counter!</span>(
+ requests_total_stat: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Stat.into_static(),
),
- requests_duration_seconds_stat: <span class="macro">histogram!</span>(
+ requests_duration_seconds_stat: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Stat.into_static(),
),
- requests_total_delete: <span class="macro">counter!</span>(
+ requests_total_delete: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Delete.into_static(),
),
- requests_duration_seconds_delete: <span class="macro">histogram!</span>(
+ requests_duration_seconds_delete: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Delete.into_static(),
),
- requests_total_list: <span class="macro">counter!</span>(
+ requests_total_list: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::List.into_static(),
),
- requests_duration_seconds_list: <span class="macro">histogram!</span>(
+ requests_duration_seconds_list: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::List.into_static(),
),
- requests_total_presign: <span class="macro">counter!</span>(
+ requests_total_presign: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Presign.into_static(),
),
- requests_duration_seconds_presign: <span class="macro">histogram!</span>(
+ requests_duration_seconds_presign: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Presign.into_static(),
),
- requests_total_batch: <span class="macro">counter!</span>(
+ requests_total_batch: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Batch.into_static(),
),
- requests_duration_seconds_batch: <span class="macro">histogram!</span>(
+ requests_duration_seconds_batch: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::Batch.into_static(),
),
- requests_total_blocking_create: <span class="macro">counter!</span>(
+ requests_total_blocking_create: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingCreateDir.into_static(),
),
- requests_duration_seconds_blocking_create: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_create: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingCreateDir.into_static(),
),
- requests_total_blocking_read: <span class="macro">counter!</span>(
+ requests_total_blocking_read: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingRead.into_static(),
),
- requests_duration_seconds_blocking_read: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_read: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingRead.into_static(),
),
- bytes_total_blocking_read: <span class="macro">counter!</span>(
+ bytes_total_blocking_read: <span class="macro">register_counter!</span>(
METRIC_BYTES_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingRead.into_static(),
),
- requests_total_blocking_write: <span class="macro">counter!</span>(
+ requests_total_blocking_write: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingWrite.into_static(),
),
- requests_duration_seconds_blocking_write: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_write: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingWrite.into_static(),
),
- bytes_total_blocking_write: <span class="macro">counter!</span>(
+ bytes_total_blocking_write: <span class="macro">register_counter!</span>(
METRIC_BYTES_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingWrite.into_static(),
),
- requests_total_blocking_stat: <span class="macro">counter!</span>(
+ requests_total_blocking_stat: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingStat.into_static(),
),
- requests_duration_seconds_blocking_stat: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_stat: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingStat.into_static(),
),
- requests_total_blocking_delete: <span class="macro">counter!</span>(
+ requests_total_blocking_delete: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingDelete.into_static(),
),
- requests_duration_seconds_blocking_delete: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_delete: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingDelete.into_static(),
),
- requests_total_blocking_list: <span class="macro">counter!</span>(
+ requests_total_blocking_list: <span class="macro">register_counter!</span>(
METRIC_REQUESTS_TOTAL,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingList.into_static(),
),
- requests_duration_seconds_blocking_list: <span class="macro">histogram!</span>(
+ requests_duration_seconds_blocking_list: <span class="macro">register_histogram!</span>(
METRIC_REQUESTS_DURATION_SECONDS,
LABEL_SERVICE => service,
LABEL_OPERATION => Operation::BlockingList.into_static(),
@@ -1219,12 +1220,11 @@
/// in advance.
</span><span class="attr">#[inline]
</span><span class="kw">fn </span>increment_errors_total(<span class="kw-2">&</span><span class="self">self</span>, op: Operation, kind: ErrorKind) {
- <span class="macro">counter!</span>(METRICS_ERRORS_TOTAL,
+ <span class="macro">increment_counter!</span>(METRICS_ERRORS_TOTAL,
LABEL_SERVICE => <span class="self">self</span>.service,
LABEL_OPERATION => op.into_static(),
LABEL_ERROR => kind.into_static(),
)
- .increment(<span class="number">1</span>)
}
}
diff --git a/docs/rust/src/opendal/lib.rs.html b/docs/rust/src/opendal/lib.rs.html
index 02e9276150..abc8c41e8e 100644
--- a/docs/rust/src/opendal/lib.rs.html
+++ b/docs/rust/src/opendal/lib.rs.html
@@ -357,7 +357,7 @@
<span class="doccomment">/// This is used to make sure our public API implement Send + Sync
</span><span class="attr">#[test]
</span><span class="kw">fn </span>test_trait() {
- <span class="kw">let _</span>: Box<<span class="kw">dyn </span>AssertSendSync> = Box::new(Capability::default());
+ <span class="kw">let _</span>: Box<<span class="kw">dyn </span>AssertSendSync> = Box::new(Writer::new(Box::new(())));
}
}
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/raw/oio/buf/queue_buf.rs.html b/docs/rust/src/opendal/raw/oio/buf/queue_buf.rs.html
index 197d62bbc4..ff6d9d69f9 100644
--- a/docs/rust/src/opendal/raw/oio/buf/queue_buf.rs.html
+++ b/docs/rust/src/opendal/raw/oio/buf/queue_buf.rs.html
@@ -104,16 +104,6 @@
<a href="#104" id="104">104</a>
<a href="#105" id="105">105</a>
<a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -131,9 +121,9 @@
// specific language governing permissions and limitations
// under the License.
-</span><span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>std::collections::VecDeque;
-<span class="kw">use </span>std::mem;
+</span><span class="kw">use </span>std::collections::VecDeque;
+
+<span class="kw">use </span>bytes::Buf;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -160,10 +150,6 @@
<span class="doccomment">/// Push new [`Buffer`] into the queue.
</span><span class="attr">#[inline]
</span><span class="kw">pub fn </span>push(<span class="kw-2">&mut </span><span class="self">self</span>, buf: Buffer) {
- <span class="kw">if </span>buf.is_empty() {
- <span class="kw">return</span>;
- }
-
<span class="self">self</span>.<span class="number">0</span>.push_back(buf);
}
@@ -179,12 +165,6 @@
<span class="self">self</span>.len() == <span class="number">0
</span>}
- <span class="doccomment">/// Take the entire buffer queue and leave `self` in empty states.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>take(<span class="kw-2">&mut </span><span class="self">self</span>) -> QueueBuf {
- mem::take(<span class="self">self</span>)
- }
-
<span class="doccomment">/// Build a new [`Buffer`] from the queue.
///
/// If the queue is empty, it will return an empty buffer. Otherwise, it will iterate over all
diff --git a/docs/rust/src/opendal/types/context/write.rs.html b/docs/rust/src/opendal/raw/oio/write/chunked_write.rs.html
similarity index 56%
rename from docs/rust/src/opendal/types/context/write.rs.html
rename to docs/rust/src/opendal/raw/oio/write/chunked_write.rs.html
index 091ffb50bb..d74ca6a689 100644
--- a/docs/rust/src/opendal/types/context/write.rs.html
+++ b/docs/rust/src/opendal/raw/oio/write/chunked_write.rs.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/types/context/write.rs`."><title>write.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a7 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/raw/oio/write/chunked_write.rs`."><title>chunked_write.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraS [...]
<a href="#2" id="2">2</a>
<a href="#3" id="3">3</a>
<a href="#4" id="4">4</a>
@@ -421,185 +421,6 @@
<a href="#421" id="421">421</a>
<a href="#422" id="422">422</a>
<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
-<a href="#455" id="455">455</a>
-<a href="#456" id="456">456</a>
-<a href="#457" id="457">457</a>
-<a href="#458" id="458">458</a>
-<a href="#459" id="459">459</a>
-<a href="#460" id="460">460</a>
-<a href="#461" id="461">461</a>
-<a href="#462" id="462">462</a>
-<a href="#463" id="463">463</a>
-<a href="#464" id="464">464</a>
-<a href="#465" id="465">465</a>
-<a href="#466" id="466">466</a>
-<a href="#467" id="467">467</a>
-<a href="#468" id="468">468</a>
-<a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
-<a href="#486" id="486">486</a>
-<a href="#487" id="487">487</a>
-<a href="#488" id="488">488</a>
-<a href="#489" id="489">489</a>
-<a href="#490" id="490">490</a>
-<a href="#491" id="491">491</a>
-<a href="#492" id="492">492</a>
-<a href="#493" id="493">493</a>
-<a href="#494" id="494">494</a>
-<a href="#495" id="495">495</a>
-<a href="#496" id="496">496</a>
-<a href="#497" id="497">497</a>
-<a href="#498" id="498">498</a>
-<a href="#499" id="499">499</a>
-<a href="#500" id="500">500</a>
-<a href="#501" id="501">501</a>
-<a href="#502" id="502">502</a>
-<a href="#503" id="503">503</a>
-<a href="#504" id="504">504</a>
-<a href="#505" id="505">505</a>
-<a href="#506" id="506">506</a>
-<a href="#507" id="507">507</a>
-<a href="#508" id="508">508</a>
-<a href="#509" id="509">509</a>
-<a href="#510" id="510">510</a>
-<a href="#511" id="511">511</a>
-<a href="#512" id="512">512</a>
-<a href="#513" id="513">513</a>
-<a href="#514" id="514">514</a>
-<a href="#515" id="515">515</a>
-<a href="#516" id="516">516</a>
-<a href="#517" id="517">517</a>
-<a href="#518" id="518">518</a>
-<a href="#519" id="519">519</a>
-<a href="#520" id="520">520</a>
-<a href="#521" id="521">521</a>
-<a href="#522" id="522">522</a>
-<a href="#523" id="523">523</a>
-<a href="#524" id="524">524</a>
-<a href="#525" id="525">525</a>
-<a href="#526" id="526">526</a>
-<a href="#527" id="527">527</a>
-<a href="#528" id="528">528</a>
-<a href="#529" id="529">529</a>
-<a href="#530" id="530">530</a>
-<a href="#531" id="531">531</a>
-<a href="#532" id="532">532</a>
-<a href="#533" id="533">533</a>
-<a href="#534" id="534">534</a>
-<a href="#535" id="535">535</a>
-<a href="#536" id="536">536</a>
-<a href="#537" id="537">537</a>
-<a href="#538" id="538">538</a>
-<a href="#539" id="539">539</a>
-<a href="#540" id="540">540</a>
-<a href="#541" id="541">541</a>
-<a href="#542" id="542">542</a>
-<a href="#543" id="543">543</a>
-<a href="#544" id="544">544</a>
-<a href="#545" id="545">545</a>
-<a href="#546" id="546">546</a>
-<a href="#547" id="547">547</a>
-<a href="#548" id="548">548</a>
-<a href="#549" id="549">549</a>
-<a href="#550" id="550">550</a>
-<a href="#551" id="551">551</a>
-<a href="#552" id="552">552</a>
-<a href="#553" id="553">553</a>
-<a href="#554" id="554">554</a>
-<a href="#555" id="555">555</a>
-<a href="#556" id="556">556</a>
-<a href="#557" id="557">557</a>
-<a href="#558" id="558">558</a>
-<a href="#559" id="559">559</a>
-<a href="#560" id="560">560</a>
-<a href="#561" id="561">561</a>
-<a href="#562" id="562">562</a>
-<a href="#563" id="563">563</a>
-<a href="#564" id="564">564</a>
-<a href="#565" id="565">565</a>
-<a href="#566" id="566">566</a>
-<a href="#567" id="567">567</a>
-<a href="#568" id="568">568</a>
-<a href="#569" id="569">569</a>
-<a href="#570" id="570">570</a>
-<a href="#571" id="571">571</a>
-<a href="#572" id="572">572</a>
-<a href="#573" id="573">573</a>
-<a href="#574" id="574">574</a>
-<a href="#575" id="575">575</a>
-<a href="#576" id="576">576</a>
-<a href="#577" id="577">577</a>
-<a href="#578" id="578">578</a>
-<a href="#579" id="579">579</a>
-<a href="#580" id="580">580</a>
-<a href="#581" id="581">581</a>
-<a href="#582" id="582">582</a>
-<a href="#583" id="583">583</a>
-<a href="#584" id="584">584</a>
-<a href="#585" id="585">585</a>
-<a href="#586" id="586">586</a>
-<a href="#587" id="587">587</a>
-<a href="#588" id="588">588</a>
-<a href="#589" id="589">589</a>
-<a href="#590" id="590">590</a>
-<a href="#591" id="591">591</a>
-<a href="#592" id="592">592</a>
-<a href="#593" id="593">593</a>
-<a href="#594" id="594">594</a>
-<a href="#595" id="595">595</a>
-<a href="#596" id="596">596</a>
-<a href="#597" id="597">597</a>
-<a href="#598" id="598">598</a>
-<a href="#599" id="599">599</a>
-<a href="#600" id="600">600</a>
-<a href="#601" id="601">601</a>
-<a href="#602" id="602">602</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -617,116 +438,34 @@
// specific language governing permissions and limitations
// under the License.
-</span><span class="kw">use </span><span class="kw">crate</span>::raw::oio::Write;
+</span><span class="kw">use </span>bytes::Buf;
+
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-<span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>std::sync::Arc;
-
-<span class="doccomment">/// WriteContext holds the immutable context for give write operation.
-</span><span class="kw">pub struct </span>WriteContext {
- <span class="doccomment">/// The accessor to the storage services.
- </span>acc: Accessor,
- <span class="doccomment">/// Path to the file.
- </span>path: String,
- <span class="doccomment">/// Arguments for the write operation.
- </span>args: OpWrite,
- <span class="doccomment">/// Options for the writer.
- </span>options: OpWriter,
-}
-
-<span class="kw">impl </span>WriteContext {
- <span class="doccomment">/// Create a new WriteContext.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>new(acc: Accessor, path: String, args: OpWrite, options: OpWriter) -> <span class="self">Self </span>{
- <span class="self">Self </span>{
- acc,
- path,
- args,
- options,
- }
- }
-
- <span class="doccomment">/// Get the accessor.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>accessor(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>Accessor {
- <span class="kw-2">&</span><span class="self">self</span>.acc
- }
-
- <span class="doccomment">/// Get the path.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>path(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>str {
- <span class="kw-2">&</span><span class="self">self</span>.path
- }
-
- <span class="doccomment">/// Get the arguments.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>args(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>OpWrite {
- <span class="kw-2">&</span><span class="self">self</span>.args
- }
-
- <span class="doccomment">/// Get the options.
- </span><span class="attr">#[inline]
- </span><span class="kw">pub fn </span>options(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>OpWriter {
- <span class="kw-2">&</span><span class="self">self</span>.options
- }
-
- <span class="doccomment">/// Calculate the chunk size for this write process.
- ///
- /// Returns the chunk size and if the chunk size is exact.
- </span><span class="kw">fn </span>calculate_chunk_size(<span class="kw-2">&</span><span class="self">self</span>) -> (<span class="prelude-ty">Option</span><usize>, bool) {
- <span class="kw">let </span>cap = <span class="self">self</span>.accessor().info().full_capability();
-
- <span class="kw">let </span>exact = <span class="self">self</span>.options().chunk().is_some();
- <span class="kw">let </span>chunk_size = <span class="self">self
- </span>.options()
- .chunk()
- .or(cap.write_multi_min_size)
- .map(|<span class="kw-2">mut </span>size| {
- <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = cap.write_multi_max_size {
- size = size.min(v);
- }
- <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = cap.write_multi_min_size {
- size = size.max(v);
- }
-
- size
- });
- (chunk_size, exact)
- }
-}
-
-<span class="kw">pub struct </span>WriteGenerator<W> {
- w: W,
+<span class="doccomment">/// ChunkedWriter is used to implement [`oio::Write`] based on chunk:
+/// flush the underlying storage at the `chunk`` size.
+///
+/// ChunkedWriter makes sure that the size of the data written to the
+/// underlying storage is
+/// - exactly `chunk` bytes if `exact` is true
+/// - at least `chunk` bytes if `exact` is false
+</span><span class="kw">pub struct </span>ChunkedWriter<W: oio::Write> {
+ inner: W,
<span class="doccomment">/// The size for buffer, we will flush the underlying storage at the size of this buffer.
- </span>chunk_size: <span class="prelude-ty">Option</span><usize>,
+ </span>chunk_size: usize,
<span class="doccomment">/// If `exact` is true, the size of the data written to the underlying storage is
/// exactly `chunk_size` bytes.
</span>exact: bool,
buffer: oio::QueueBuf,
}
-<span class="kw">impl </span>WriteGenerator<oio::Writer> {
+<span class="kw">impl</span><W: oio::Write> ChunkedWriter<W> {
<span class="doccomment">/// Create a new exact buf writer.
- </span><span class="kw">pub async fn </span>create(ctx: Arc<WriteContext>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
- <span class="kw">let </span>(chunk_size, exact) = ctx.calculate_chunk_size();
- <span class="kw">let </span>(<span class="kw">_</span>, w) = ctx.acc.write(ctx.path(), ctx.args().clone()).<span class="kw">await</span><span class="question-mark">?</span>;
-
- <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
- w,
- chunk_size,
- exact,
- buffer: oio::QueueBuf::new(),
- })
- }
-
- <span class="doccomment">/// Allow building from existing oio::Writer for easier testing.
- </span><span class="attr">#[cfg(test)]
- </span><span class="kw">fn </span>new(w: oio::Writer, chunk_size: <span class="prelude-ty">Option</span><usize>, exact: bool) -> <span class="self">Self </span>{
+ </span><span class="kw">pub fn </span>new(inner: W, chunk_size: usize, exact: bool) -> <span class="self">Self </span>{
<span class="self">Self </span>{
- w,
+ inner,
chunk_size,
exact,
buffer: oio::QueueBuf::new(),
@@ -734,167 +473,75 @@
}
}
-<span class="kw">impl </span>WriteGenerator<oio::Writer> {
- <span class="doccomment">/// Write the entire buffer into writer.
- </span><span class="kw">pub async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, <span class="kw-2">mut </span>bs: Buffer) -> <span class="prelude-ty">Result</span><usize> {
- <span class="kw">let </span><span class="prelude-val">Some</span>(chunk_size) = <span class="self">self</span>.chunk_size <span class="kw">else </span>{
- <span class="kw">return </span><span class="self">self</span>.w.write_dyn(bs).<span class="kw">await</span>;
- };
+<span class="kw">impl</span><W: oio::Write> oio::Write <span class="kw">for </span>ChunkedWriter<W> {
+ <span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, <span class="kw-2">mut </span>bs: Buffer) -> <span class="prelude-ty">Result</span><usize> {
+ <span class="kw">if </span><span class="self">self</span>.exact {
+ <span class="kw">if </span><span class="self">self</span>.buffer.len() >= <span class="self">self</span>.chunk_size {
+ <span class="kw">let </span>written = <span class="self">self</span>.inner.write(<span class="self">self</span>.buffer.clone().collect()).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="self">self</span>.buffer.advance(written);
+ }
- <span class="kw">if </span><span class="self">self</span>.buffer.len() + bs.len() < chunk_size {
- <span class="kw">let </span>size = bs.len();
+ <span class="kw">let </span>remaining = <span class="self">self</span>.chunk_size - <span class="self">self</span>.buffer.len();
+ bs.truncate(remaining);
+ <span class="kw">let </span>n = bs.len();
<span class="self">self</span>.buffer.push(bs);
- <span class="kw">return </span><span class="prelude-val">Ok</span>(size);
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(n);
}
+ <span class="comment">// We are in inexact mode.
- <span class="comment">// Condition:
- // - exact is false
- // - buffer + bs is larger than chunk_size.
- // Action:
- // - write buffer + bs directly.
- </span><span class="kw">if </span>!<span class="self">self</span>.exact {
- <span class="kw">let </span>fill_size = bs.len();
+ </span><span class="kw">if </span><span class="self">self</span>.buffer.len() + bs.len() < <span class="self">self</span>.chunk_size {
+ <span class="comment">// We haven't buffered enough data.
+ </span><span class="kw">let </span>n = bs.len();
<span class="self">self</span>.buffer.push(bs);
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buffer.take().collect();
- <span class="kw">let </span>written = <span class="self">self</span>.w.write_dyn(buf.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
- buf.advance(written);
- <span class="self">self</span>.buffer.push(buf);
- <span class="kw">return </span><span class="prelude-val">Ok</span>(fill_size);
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(n);
}
+ <span class="comment">// We have enough data to send.
- <span class="comment">// Condition:
- // - exact is true: we need write buffer in exact chunk size.
- // - buffer is larger than chunk_size
- // - in exact mode, the size must be chunk_size, use `>=` just for safe coding.
- // Action:
- // - write existing buffer in chunk_size to make more rooms for writing data.
- </span><span class="kw">if </span><span class="self">self</span>.buffer.len() >= chunk_size {
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buffer.take().collect();
- <span class="kw">let </span>written = <span class="self">self</span>.w.write_dyn(buf.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
- buf.advance(written);
- <span class="self">self</span>.buffer.push(buf);
+ </span><span class="kw">if </span><span class="self">self</span>.buffer.is_empty() {
+ <span class="comment">// Fast path: Sends the buffer directly if the buffer queue is empty.
+ </span><span class="kw">return </span><span class="self">self</span>.inner.write(bs).<span class="kw">await</span>;
}
- <span class="comment">// Condition
- // - exact is true.
- // - buffer size must lower than chunk_size.
- // Action:
- // - write bs to buffer with remaining size.
- </span><span class="kw">let </span>remaining = chunk_size - <span class="self">self</span>.buffer.len();
- bs.truncate(remaining);
- <span class="kw">let </span>n = bs.len();
+ <span class="comment">// If we always push `bs` to the buffer queue, the buffer queue may grow infinitely if inner
+ // doesn't fully consume the queue. So we clone the buffer queue and send it with `bs` first.
+ </span><span class="kw">let </span><span class="kw-2">mut </span>buffer = <span class="self">self</span>.buffer.clone();
+ buffer.push(bs.clone());
+ <span class="kw">let </span>written = <span class="self">self</span>.inner.write(buffer.collect()).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="comment">// The number of bytes in `self.buffer` that already written.
+ </span><span class="kw">let </span>queue_written = written.min(<span class="self">self</span>.buffer.len());
+ <span class="self">self</span>.buffer.advance(queue_written);
+ <span class="comment">// The number of bytes in `bs` that already written.
+ </span><span class="kw">let </span>bs_written = written - queue_written;
+ <span class="comment">// Skip bytes that already written.
+ </span>bs.advance(bs_written);
+ <span class="comment">// We already sent `written` bytes so we put more `written` bytes into the buffer queue.
+ </span>bs.truncate(written);
+ <span class="kw">let </span>n = bs_written + bs.len();
<span class="self">self</span>.buffer.push(bs);
<span class="prelude-val">Ok</span>(n)
}
- <span class="doccomment">/// Finish the write process.
- </span><span class="kw">pub async fn </span>close(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">async fn </span>close(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">loop </span>{
<span class="kw">if </span><span class="self">self</span>.buffer.is_empty() {
<span class="kw">break</span>;
}
- <span class="kw">let </span>written = <span class="self">self</span>.w.write_dyn(<span class="self">self</span>.buffer.clone().collect()).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>written = <span class="self">self</span>.inner.write(<span class="self">self</span>.buffer.clone().collect()).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="self">self</span>.buffer.advance(written);
}
- <span class="self">self</span>.w.close().<span class="kw">await
+ <span class="self">self</span>.inner.close().<span class="kw">await
</span>}
- <span class="doccomment">/// Abort the write process.
- </span><span class="kw">pub async fn </span>abort(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">async fn </span>abort(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
<span class="self">self</span>.buffer.clear();
- <span class="self">self</span>.w.abort().<span class="kw">await
+ <span class="self">self</span>.inner.abort().<span class="kw">await
</span>}
}
-<span class="kw">impl </span>WriteGenerator<oio::BlockingWriter> {
- <span class="doccomment">/// Create a new exact buf writer.
- </span><span class="kw">pub fn </span>blocking_create(ctx: Arc<WriteContext>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
- <span class="kw">let </span>(chunk_size, exact) = ctx.calculate_chunk_size();
- <span class="kw">let </span>(<span class="kw">_</span>, w) = ctx.acc.blocking_write(ctx.path(), ctx.args().clone())<span class="question-mark">?</span>;
-
- <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
- w,
- chunk_size,
- exact,
- buffer: oio::QueueBuf::new(),
- })
- }
-}
-
-<span class="kw">impl </span>WriteGenerator<oio::BlockingWriter> {
- <span class="doccomment">/// Write the entire buffer into writer.
- </span><span class="kw">pub fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, <span class="kw-2">mut </span>bs: Buffer) -> <span class="prelude-ty">Result</span><usize> {
- <span class="kw">let </span><span class="prelude-val">Some</span>(chunk_size) = <span class="self">self</span>.chunk_size <span class="kw">else </span>{
- <span class="kw">return </span><span class="self">self</span>.w.write(bs);
- };
-
- <span class="kw">if </span><span class="self">self</span>.buffer.len() + bs.len() < chunk_size {
- <span class="kw">let </span>size = bs.len();
- <span class="self">self</span>.buffer.push(bs);
- <span class="kw">return </span><span class="prelude-val">Ok</span>(size);
- }
-
- <span class="comment">// Condition:
- // - exact is false
- // - buffer + bs is larger than chunk_size.
- // Action:
- // - write buffer + bs directly.
- </span><span class="kw">if </span>!<span class="self">self</span>.exact {
- <span class="kw">let </span>fill_size = bs.len();
- <span class="self">self</span>.buffer.push(bs);
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buffer.take().collect();
- <span class="kw">let </span>written = <span class="self">self</span>.w.write(buf.clone())<span class="question-mark">?</span>;
- buf.advance(written);
- <span class="self">self</span>.buffer.push(buf);
- <span class="kw">return </span><span class="prelude-val">Ok</span>(fill_size);
- }
-
- <span class="comment">// Condition:
- // - exact is true: we need write buffer in exact chunk size.
- // - buffer is larger than chunk_size
- // - in exact mode, the size must be chunk_size, use `>=` just for safe coding.
- // Action:
- // - write existing buffer in chunk_size to make more rooms for writing data.
- </span><span class="kw">if </span><span class="self">self</span>.buffer.len() >= chunk_size {
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buffer.take().collect();
- <span class="kw">let </span>written = <span class="self">self</span>.w.write(buf.clone())<span class="question-mark">?</span>;
- buf.advance(written);
- <span class="self">self</span>.buffer.push(buf);
- }
-
- <span class="comment">// Condition
- // - exact is true.
- // - buffer size must lower than chunk_size.
- // Action:
- // - write bs to buffer with remaining size.
- </span><span class="kw">let </span>remaining = chunk_size - <span class="self">self</span>.buffer.len();
- bs.truncate(remaining);
- <span class="kw">let </span>n = bs.len();
- <span class="self">self</span>.buffer.push(bs);
- <span class="prelude-val">Ok</span>(n)
- }
-
- <span class="doccomment">/// Finish the write process.
- </span><span class="kw">pub fn </span>close(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
- <span class="kw">loop </span>{
- <span class="kw">if </span><span class="self">self</span>.buffer.is_empty() {
- <span class="kw">break</span>;
- }
-
- <span class="kw">let </span>written = <span class="self">self</span>.w.write(<span class="self">self</span>.buffer.clone().collect())<span class="question-mark">?</span>;
- <span class="self">self</span>.buffer.advance(written);
- }
-
- <span class="self">self</span>.w.close()
- }
-}
-
<span class="attr">#[cfg(test)]
</span><span class="kw">mod </span>tests {
- <span class="kw">use super</span>::<span class="kw-2">*</span>;
- <span class="kw">use </span><span class="kw">crate</span>::raw::oio::Write;
<span class="kw">use </span>bytes::Buf;
<span class="kw">use </span>bytes::Bytes;
<span class="kw">use </span>log::debug;
@@ -904,10 +551,12 @@
<span class="kw">use </span>rand::RngCore;
<span class="kw">use </span>sha2::Digest;
<span class="kw">use </span>sha2::Sha256;
- <span class="kw">use </span>tokio::sync::Mutex;
+
+ <span class="kw">use super</span>::<span class="kw-2">*</span>;
+ <span class="kw">use </span><span class="kw">crate</span>::raw::oio::Write;
<span class="kw">struct </span>MockWriter {
- buf: Arc<Mutex<Vec<u8>>>,
+ buf: Vec<u8>,
}
<span class="kw">impl </span>Write <span class="kw">for </span>MockWriter {
@@ -915,8 +564,7 @@
<span class="macro">debug!</span>(<span class="string">"test_fuzz_exact_buf_writer: flush size: {}"</span>, <span class="kw-2">&</span>bs.len());
<span class="kw">let </span>chunk = bs.chunk();
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buf.lock().<span class="kw">await</span>;
- buf.extend_from_slice(chunk);
+ <span class="self">self</span>.buf.extend_from_slice(chunk);
<span class="prelude-val">Ok</span>(chunk.len())
}
@@ -941,8 +589,7 @@
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">5</span>];
rng.fill_bytes(<span class="kw-2">&mut </span>expected);
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
- <span class="kw">let </span><span class="kw-2">mut </span>w = WriteGenerator::new(Box::new(MockWriter { buf: buf.clone() }), <span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="bool-val">true</span>);
+ <span class="kw">let </span><span class="kw-2">mut </span>w = ChunkedWriter::new(MockWriter { buf: <span class="macro">vec!</span>[] }, <span class="number">10</span>, <span class="bool-val">true</span>);
<span class="kw">let </span><span class="kw-2">mut </span>bs = Bytes::from(expected.clone());
<span class="kw">while </span>!bs.is_empty() {
@@ -952,10 +599,9 @@
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(w.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>w.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
@@ -969,8 +615,7 @@
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.try_init();
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
- <span class="kw">let </span><span class="kw-2">mut </span>w = WriteGenerator::new(Box::new(MockWriter { buf: buf.clone() }), <span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="bool-val">false</span>);
+ <span class="kw">let </span><span class="kw-2">mut </span>w = ChunkedWriter::new(MockWriter { buf: <span class="macro">vec!</span>[] }, <span class="number">10</span>, <span class="bool-val">false</span>);
<span class="kw">let </span><span class="kw-2">mut </span>rng = thread_rng();
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">15</span>];
@@ -983,10 +628,9 @@
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(w.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>w.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
@@ -1000,8 +644,7 @@
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.try_init();
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
- <span class="kw">let </span><span class="kw-2">mut </span>w = WriteGenerator::new(Box::new(MockWriter { buf: buf.clone() }), <span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="bool-val">false</span>);
+ <span class="kw">let </span><span class="kw-2">mut </span>w = ChunkedWriter::new(MockWriter { buf: <span class="macro">vec!</span>[] }, <span class="number">10</span>, <span class="bool-val">false</span>);
<span class="kw">let </span><span class="kw-2">mut </span>rng = thread_rng();
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[];
@@ -1020,16 +663,19 @@
</span><span class="kw">let </span>content = new_content(<span class="number">5</span>);
<span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.into()).<span class="kw">await</span><span class="question-mark">?</span>);
<span class="comment">// content > chunk size, but 5 bytes in queue.
- </span><span class="kw">let </span>content = new_content(<span class="number">15</span>);
- <span class="comment">// The MockWriter can send all 15 bytes together, so we can only advance 5 bytes.
- </span><span class="macro">assert_eq!</span>(<span class="number">15</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ </span><span class="kw">let </span><span class="kw-2">mut </span>content = new_content(<span class="number">15</span>);
+ <span class="comment">// The MockWriter can only send 5 bytes each time, so we can only advance 5 bytes.
+ </span><span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ content.advance(<span class="number">5</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ content.advance(<span class="number">5</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(w.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>w.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
@@ -1043,8 +689,7 @@
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.try_init();
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
- <span class="kw">let </span><span class="kw-2">mut </span>w = WriteGenerator::new(Box::new(MockWriter { buf: buf.clone() }), <span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="bool-val">false</span>);
+ <span class="kw">let </span><span class="kw-2">mut </span>w = ChunkedWriter::new(MockWriter { buf: <span class="macro">vec!</span>[] }, <span class="number">10</span>, <span class="bool-val">false</span>);
<span class="kw">let </span><span class="kw-2">mut </span>rng = thread_rng();
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[];
@@ -1065,42 +710,51 @@
<span class="comment">// content < chunk size.
</span><span class="kw">let </span>content = new_content(<span class="number">3</span>);
<span class="macro">assert_eq!</span>(<span class="number">3</span>, w.write(content.into()).<span class="kw">await</span><span class="question-mark">?</span>);
- <span class="comment">// content > chunk size, but can send all chunks in the queue.
- </span><span class="kw">let </span>content = new_content(<span class="number">15</span>);
- <span class="macro">assert_eq!</span>(<span class="number">15</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ <span class="comment">// content > chunk size, but only sends the first chunk in the queue.
+ </span><span class="kw">let </span><span class="kw-2">mut </span>content = new_content(<span class="number">15</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ <span class="comment">// queue: 3, 5, bs: 10
+ </span>content.advance(<span class="number">5</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">3</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ <span class="comment">// queue: 5, 3, bs: 7
+ </span>content.advance(<span class="number">3</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">5</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ <span class="comment">// queue: 3, 5, bs: 2
+ </span>content.advance(<span class="number">5</span>);
+ <span class="macro">assert_eq!</span>(<span class="number">2</span>, w.write(content.clone().into()).<span class="kw">await</span><span class="question-mark">?</span>);
+ <span class="comment">// queue: 5, 2, bs: empty.
+ </span>content.advance(<span class="number">2</span>);
+ <span class="macro">assert!</span>(content.is_empty());
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(w.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>w.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">struct </span>PartialWriter {
- buf: Arc<Mutex<Vec<u8>>>,
+ buf: Vec<u8>,
}
<span class="kw">impl </span>Write <span class="kw">for </span>PartialWriter {
<span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, <span class="kw-2">mut </span>bs: Buffer) -> <span class="prelude-ty">Result</span><usize> {
- <span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="self">self</span>.buf.lock().<span class="kw">await</span>;
-
<span class="kw">if </span>Buffer::count(<span class="kw-2">&</span>bs) > <span class="number">1 </span>{
<span class="comment">// Always leaves last buffer for non-contiguous buffer.
</span><span class="kw">let </span><span class="kw-2">mut </span>written = <span class="number">0</span>;
<span class="kw">while </span>Buffer::count(<span class="kw-2">&</span>bs) > <span class="number">1 </span>{
<span class="kw">let </span>chunk = bs.chunk();
- buf.extend_from_slice(chunk);
+ <span class="self">self</span>.buf.extend_from_slice(chunk);
written += chunk.len();
bs.advance(chunk.len());
}
<span class="prelude-val">Ok</span>(written)
} <span class="kw">else </span>{
<span class="kw">let </span>chunk = bs.chunk();
- buf.extend_from_slice(chunk);
+ <span class="self">self</span>.buf.extend_from_slice(chunk);
<span class="prelude-val">Ok</span>(chunk.len())
}
}
@@ -1122,12 +776,7 @@
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.try_init();
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
- <span class="kw">let </span><span class="kw-2">mut </span>w = WriteGenerator::new(
- Box::new(PartialWriter { buf: buf.clone() }),
- <span class="prelude-val">Some</span>(<span class="number">10</span>),
- <span class="bool-val">false</span>,
- );
+ <span class="kw">let </span><span class="kw-2">mut </span>w = ChunkedWriter::new(PartialWriter { buf: <span class="macro">vec!</span>[] }, <span class="number">10</span>, <span class="bool-val">false</span>);
<span class="kw">let </span><span class="kw-2">mut </span>rng = thread_rng();
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[];
@@ -1148,10 +797,9 @@
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(w.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>w.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
@@ -1168,13 +816,8 @@
<span class="kw">let </span><span class="kw-2">mut </span>rng = thread_rng();
<span class="kw">let </span><span class="kw-2">mut </span>expected = <span class="macro">vec!</span>[];
- <span class="kw">let </span>buf = Arc::new(Mutex::new(<span class="macro">vec!</span>[]));
<span class="kw">let </span>buffer_size = rng.gen_range(<span class="number">1</span>..<span class="number">10</span>);
- <span class="kw">let </span><span class="kw-2">mut </span>writer = WriteGenerator::new(
- Box::new(MockWriter { buf: buf.clone() }),
- <span class="prelude-val">Some</span>(buffer_size),
- <span class="bool-val">true</span>,
- );
+ <span class="kw">let </span><span class="kw-2">mut </span>writer = ChunkedWriter::new(MockWriter { buf: <span class="macro">vec!</span>[] }, buffer_size, <span class="bool-val">true</span>);
<span class="macro">debug!</span>(<span class="string">"test_fuzz_exact_buf_writer: buffer size: {buffer_size}"</span>);
<span class="kw">for _ in </span><span class="number">0</span>..<span class="number">1000 </span>{
@@ -1193,10 +836,9 @@
}
writer.close().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>buf = buf.lock().<span class="kw">await</span>;
- <span class="macro">assert_eq!</span>(buf.len(), expected.len());
+ <span class="macro">assert_eq!</span>(writer.inner.buf.len(), expected.len());
<span class="macro">assert_eq!</span>(
- <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&*</span>buf)),
+ <span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>writer.inner.buf)),
<span class="macro">format!</span>(<span class="string">"{:x}"</span>, Sha256::digest(<span class="kw-2">&</span>expected))
);
<span class="prelude-val">Ok</span>(())
diff --git a/docs/rust/src/opendal/raw/oio/write/mod.rs.html b/docs/rust/src/opendal/raw/oio/write/mod.rs.html
index 9f6cb80989..c8bab85b63 100644
--- a/docs/rust/src/opendal/raw/oio/write/mod.rs.html
+++ b/docs/rust/src/opendal/raw/oio/write/mod.rs.html
@@ -46,6 +46,9 @@
<a href="#46" id="46">46</a>
<a href="#47" id="47">47</a>
<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -83,6 +86,9 @@
<span class="kw">pub use </span>one_shot_write::OneShotWrite;
<span class="kw">pub use </span>one_shot_write::OneShotWriter;
+<span class="kw">mod </span>chunked_write;
+<span class="kw">pub use </span>chunked_write::ChunkedWriter;
+
<span class="kw">mod </span>range_write;
<span class="kw">pub use </span>range_write::RangeWrite;
<span class="kw">pub use </span>range_write::RangeWriter;
diff --git a/docs/rust/src/opendal/raw/ops.rs.html b/docs/rust/src/opendal/raw/ops.rs.html
index bd709f82d2..5082c29ed7 100644
--- a/docs/rust/src/opendal/raw/ops.rs.html
+++ b/docs/rust/src/opendal/raw/ops.rs.html
@@ -722,18 +722,6 @@
<a href="#722" id="722">722</a>
<a href="#723" id="723">723</a>
<a href="#724" id="724">724</a>
-<a href="#725" id="725">725</a>
-<a href="#726" id="726">726</a>
-<a href="#727" id="727">727</a>
-<a href="#728" id="728">728</a>
-<a href="#729" id="729">729</a>
-<a href="#730" id="730">730</a>
-<a href="#731" id="731">731</a>
-<a href="#732" id="732">732</a>
-<a href="#733" id="733">733</a>
-<a href="#734" id="734">734</a>
-<a href="#735" id="735">735</a>
-<a href="#736" id="736">736</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1311,6 +1299,7 @@
</span><span class="attr">#[derive(Debug, Clone, Default)]
</span><span class="kw">pub struct </span>OpWrite {
append: bool,
+ chunk: <span class="prelude-ty">Option</span><usize>,
concurrent: usize,
content_type: <span class="prelude-ty">Option</span><String>,
content_disposition: <span class="prelude-ty">Option</span><String>,
@@ -1345,6 +1334,27 @@
<span class="self">self
</span>}
+ <span class="doccomment">/// Get the chunk from op.
+ ///
+ /// The chunk is used by service to decide the chunk size of the underlying writer.
+ </span><span class="kw">pub fn </span>chunk(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Option</span><usize> {
+ <span class="self">self</span>.chunk
+ }
+
+ <span class="doccomment">/// Set the chunk of op.
+ ///
+ /// If chunk is set, the data will be chunked by the underlying writer.
+ ///
+ /// ## NOTE
+ ///
+ /// Service could have their own minimum chunk size while perform write
+ /// operations like multipart uploads. So the chunk size may be larger than
+ /// the given buffer size.
+ </span><span class="kw">pub fn </span>with_chunk(<span class="kw-2">mut </span><span class="self">self</span>, chunk: usize) -> <span class="self">Self </span>{
+ <span class="self">self</span>.chunk = <span class="prelude-val">Some</span>(chunk);
+ <span class="self">self
+ </span>}
+
<span class="doccomment">/// Get the content type from option
</span><span class="kw">pub fn </span>content_type(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Option</span><<span class="kw-2">&</span>str> {
<span class="self">self</span>.content_type.as_deref()
@@ -1415,40 +1425,6 @@
</span>}
}
-<span class="doccomment">/// Args for `writer` operation.
-</span><span class="attr">#[derive(Debug, Clone, Default)]
-</span><span class="kw">pub struct </span>OpWriter {
- chunk: <span class="prelude-ty">Option</span><usize>,
-}
-
-<span class="kw">impl </span>OpWriter {
- <span class="doccomment">/// Create a new `OpWriter`.
- </span><span class="kw">pub fn </span>new() -> <span class="self">Self </span>{
- <span class="self">Self</span>::default()
- }
-
- <span class="doccomment">/// Get the chunk from op.
- ///
- /// The chunk is used by service to decide the chunk size of the underlying writer.
- </span><span class="kw">pub fn </span>chunk(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Option</span><usize> {
- <span class="self">self</span>.chunk
- }
-
- <span class="doccomment">/// Set the chunk of op.
- ///
- /// If chunk is set, the data will be chunked by the underlying writer.
- ///
- /// ## NOTE
- ///
- /// Service could have their own minimum chunk size while perform write
- /// operations like multipart uploads. So the chunk size may be larger than
- /// the given buffer size.
- </span><span class="kw">pub fn </span>with_chunk(<span class="kw-2">mut </span><span class="self">self</span>, chunk: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.chunk = <span class="prelude-val">Some</span>(chunk);
- <span class="self">self
- </span>}
-}
-
<span class="doccomment">/// Args for `copy` operation.
</span><span class="attr">#[derive(Debug, Clone, Default)]
</span><span class="kw">pub struct </span>OpCopy {}
diff --git a/docs/rust/src/opendal/services/aliyun_drive/backend.rs.html b/docs/rust/src/opendal/services/aliyun_drive/backend.rs.html
index 234ba095bf..ebb49b80a8 100644
--- a/docs/rust/src/opendal/services/aliyun_drive/backend.rs.html
+++ b/docs/rust/src/opendal/services/aliyun_drive/backend.rs.html
@@ -483,6 +483,11 @@
<a href="#483" id="483">483</a>
<a href="#484" id="484">484</a>
<a href="#485" id="485">485</a>
+<a href="#486" id="486">486</a>
+<a href="#487" id="487">487</a>
+<a href="#488" id="488">488</a>
+<a href="#489" id="489">489</a>
+<a href="#490" id="490">490</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -519,6 +524,7 @@
<span class="kw">use </span><span class="kw">super</span>::lister::AliyunDriveLister;
<span class="kw">use </span><span class="kw">super</span>::lister::AliyunDriveParent;
<span class="kw">use </span><span class="kw">super</span>::writer::AliyunDriveWriter;
+<span class="kw">use </span><span class="kw">super</span>::writer::AliyunDriveWriters;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -737,7 +743,7 @@
<span class="kw">impl </span>Access <span class="kw">for </span>AliyunDriveBackend {
<span class="kw">type </span>Reader = HttpBody;
- <span class="kw">type </span>Writer = AliyunDriveWriter;
+ <span class="kw">type </span>Writer = AliyunDriveWriters;
<span class="kw">type </span>Lister = oio::PageLister<AliyunDriveLister>;
<span class="kw">type </span>BlockingReader = ();
<span class="kw">type </span>BlockingWriter = ();
@@ -962,10 +968,14 @@
}
};
+ <span class="kw">let </span>executor = args.executor().cloned();
+
<span class="kw">let </span>writer =
AliyunDriveWriter::new(<span class="self">self</span>.core.clone(), <span class="kw-2">&</span>parent_file_id, get_basename(path), args);
- <span class="prelude-val">Ok</span>((RpWrite::default(), writer))
+ <span class="kw">let </span>w = oio::MultipartWriter::new(writer, executor, <span class="number">1</span>);
+
+ <span class="prelude-val">Ok</span>((RpWrite::default(), w))
}
}
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/aliyun_drive/core.rs.html b/docs/rust/src/opendal/services/aliyun_drive/core.rs.html
index 71eff681ca..a8509a8286 100644
--- a/docs/rust/src/opendal/services/aliyun_drive/core.rs.html
+++ b/docs/rust/src/opendal/services/aliyun_drive/core.rs.html
@@ -615,6 +615,7 @@
<a href="#615" id="615">615</a>
<a href="#616" id="616">616</a>
<a href="#617" id="617">617</a>
+<a href="#618" id="618">618</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1105,6 +1106,7 @@
</span><span class="kw">pub struct </span>CreateResponse {
<span class="kw">pub </span>file_id: String,
<span class="kw">pub </span>upload_id: <span class="prelude-ty">Option</span><String>,
+ <span class="kw">pub </span>part_info_list: <span class="prelude-ty">Option</span><Vec<PartInfo>>,
<span class="kw">pub </span>exist: <span class="prelude-ty">Option</span><bool>,
}
diff --git a/docs/rust/src/opendal/services/aliyun_drive/writer.rs.html b/docs/rust/src/opendal/services/aliyun_drive/writer.rs.html
index daabb21d69..724cfc046b 100644
--- a/docs/rust/src/opendal/services/aliyun_drive/writer.rs.html
+++ b/docs/rust/src/opendal/services/aliyun_drive/writer.rs.html
@@ -123,6 +123,86 @@
<a href="#123" id="123">123</a>
<a href="#124" id="124">124</a>
<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<a href="#170" id="170">170</a>
+<a href="#171" id="171">171</a>
+<a href="#172" id="172">172</a>
+<a href="#173" id="173">173</a>
+<a href="#174" id="174">174</a>
+<a href="#175" id="175">175</a>
+<a href="#176" id="176">176</a>
+<a href="#177" id="177">177</a>
+<a href="#178" id="178">178</a>
+<a href="#179" id="179">179</a>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+<a href="#184" id="184">184</a>
+<a href="#185" id="185">185</a>
+<a href="#186" id="186">186</a>
+<a href="#187" id="187">187</a>
+<a href="#188" id="188">188</a>
+<a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
+<a href="#204" id="204">204</a>
+<a href="#205" id="205">205</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -148,6 +228,9 @@
};
<span class="kw">use </span>bytes::Buf;
<span class="kw">use </span>std::sync::Arc;
+<span class="kw">use </span>tokio::sync::RwLock;
+
+<span class="kw">pub type </span>AliyunDriveWriters = oio::MultipartWriter<AliyunDriveWriter>;
<span class="kw">pub struct </span>AliyunDriveWriter {
core: Arc<AliyunDriveCore>,
@@ -156,9 +239,7 @@
parent_file_id: String,
name: String,
- file_id: <span class="prelude-ty">Option</span><String>,
- upload_id: <span class="prelude-ty">Option</span><String>,
- part_number: usize,
+ file_id: Arc<RwLock<<span class="prelude-ty">Option</span><String>>>,
}
<span class="kw">impl </span>AliyunDriveWriter {
@@ -168,84 +249,163 @@
_op: op,
parent_file_id: parent_file_id.to_string(),
name: name.to_string(),
- file_id: <span class="prelude-val">None</span>,
- upload_id: <span class="prelude-val">None</span>,
- part_number: <span class="number">1</span>, <span class="comment">// must start from 1
- </span>}
+ file_id: Arc::new(RwLock::new(<span class="prelude-val">None</span>)),
+ }
}
-}
-<span class="kw">impl </span>oio::Write <span class="kw">for </span>AliyunDriveWriter {
- <span class="kw">async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: Buffer) -> <span class="prelude-ty">Result</span><usize> {
- <span class="kw">let </span>(upload_id, file_id) = <span class="kw">match </span>(<span class="self">self</span>.upload_id.as_ref(), <span class="self">self</span>.file_id.as_ref()) {
- (<span class="prelude-val">Some</span>(upload_id), <span class="prelude-val">Some</span>(file_id)) => (upload_id, file_id),
- <span class="kw">_ </span>=> {
- <span class="kw">let </span>res = <span class="self">self
- </span>.core
- .create(
- <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="self">self</span>.parent_file_id),
- <span class="kw-2">&</span><span class="self">self</span>.name,
- CreateType::File,
- CheckNameMode::Refuse,
- )
- .<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>output: CreateResponse =
- serde_json::from_reader(res.reader()).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
- <span class="kw">if </span>output.exist.is_some_and(|x| x) {
- <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::AlreadyExists, <span class="string">"file exists"</span>));
- }
- <span class="self">self</span>.upload_id = output.upload_id;
- <span class="self">self</span>.file_id = <span class="prelude-val">Some</span>(output.file_id);
- (
- <span class="self">self</span>.upload_id.as_ref().expect(<span class="string">"cannot find upload_id"</span>),
- <span class="self">self</span>.file_id.as_ref().expect(<span class="string">"cannot find file_id"</span>),
- )
- }
+ <span class="kw">async fn </span>write_file_id(<span class="kw-2">&</span><span class="self">self</span>, id: String) {
+ <span class="kw">let </span><span class="kw-2">mut </span>file_id = <span class="self">self</span>.file_id.write().<span class="kw">await</span>;
+
+ <span class="kw-2">*</span>file_id = <span class="prelude-val">Some</span>(id);
+ }
+
+ <span class="kw">async fn </span>read_file_id(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><String> {
+ <span class="kw">let </span>file_id = <span class="self">self</span>.file_id.read().<span class="kw">await</span>;
+ <span class="kw">let </span><span class="prelude-val">Some</span>(<span class="kw-2">ref </span>file_id) = <span class="kw-2">*</span>file_id <span class="kw">else </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="string">"cannot find file_id"</span>));
};
+ <span class="prelude-val">Ok</span>(file_id.clone())
+ }
+
+ <span class="kw">async fn </span>write(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ body: <span class="prelude-ty">Option</span><Buffer>,
+ upload_url: <span class="prelude-ty">Option</span><<span class="kw-2">&</span>str>,
+ ) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><String>> {
+ <span class="kw">if let </span><span class="prelude-val">Some</span>(upload_url) = upload_url {
+ <span class="kw">let </span><span class="prelude-val">Some</span>(body) = body <span class="kw">else </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+ ErrorKind::Unexpected,
+ <span class="string">"cannot upload without body"</span>,
+ ));
+ };
+ <span class="kw">if let </span><span class="prelude-val">Err</span>(err) = <span class="self">self</span>.core.upload(upload_url, body).<span class="kw">await </span>{
+ <span class="kw">if </span>err.kind() != ErrorKind::AlreadyExists {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(err);
+ }
+ };
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+ }
+
<span class="kw">let </span>res = <span class="self">self
</span>.core
- .get_upload_url(file_id, upload_id, <span class="prelude-val">Some</span>(<span class="self">self</span>.part_number))
- .<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="kw">let </span>output: UploadUrlResponse =
- serde_json::from_reader(res.reader()).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+ .create(
+ <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="self">self</span>.parent_file_id),
+ <span class="kw-2">&</span><span class="self">self</span>.name,
+ CreateType::File,
+ CheckNameMode::Refuse,
+ )
+ .<span class="kw">await</span>;
- <span class="kw">let </span><span class="prelude-val">Some</span>(upload_url) = output
- .part_info_list
- .as_ref()
- .and_then(|list| list.first())
- .map(|part_info| <span class="kw-2">&</span>part_info.upload_url)
- <span class="kw">else </span>{
- <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="string">"cannot find upload_url"</span>));
+ <span class="kw">let </span>res = <span class="kw">match </span>res {
+ <span class="prelude-val">Err</span>(err) <span class="kw">if </span>err.kind() == ErrorKind::IsSameFile => {
+ <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+ }
+ <span class="prelude-val">Err</span>(err) => {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(err);
+ }
+ <span class="prelude-val">Ok</span>(res) => res,
};
- <span class="kw">let </span>size = bs.len();
+ <span class="kw">let </span>output: CreateResponse =
+ serde_json::from_reader(res.reader()).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+ <span class="self">self</span>.write_file_id(output.file_id).<span class="kw">await</span>;
+ <span class="kw">if </span>output.exist.is_some_and(|x| x) {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::AlreadyExists, <span class="string">"file exists"</span>));
+ }
- <span class="kw">if let </span><span class="prelude-val">Err</span>(err) = <span class="self">self</span>.core.upload(upload_url, bs).<span class="kw">await </span>{
- <span class="kw">if </span>err.kind() != ErrorKind::AlreadyExists {
- <span class="kw">return </span><span class="prelude-val">Err</span>(err);
+ <span class="kw">if </span>output.upload_id.is_some() {
+ <span class="kw">if let </span><span class="prelude-val">Some</span>(body) = body {
+ <span class="kw">let </span><span class="prelude-val">Some</span>(part_info_list) = output.part_info_list <span class="kw">else </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="string">"cannot find upload_url"</span>));
+ };
+ <span class="kw">if </span>part_info_list.is_empty() {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="string">"cannot find upload_url"</span>));
+ }
+ <span class="kw">if let </span><span class="prelude-val">Err</span>(err) = <span class="self">self</span>.core.upload(<span class="kw-2">&</span>part_info_list[<span class="number">0</span>].upload_url, body).<span class="kw">await </span>{
+ <span class="kw">if </span>err.kind() != ErrorKind::AlreadyExists {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(err);
+ }
+ }
}
- };
+ }
+
+ <span class="prelude-val">Ok</span>(output.upload_id)
+ }
- <span class="self">self</span>.part_number += <span class="number">1</span>;
+ <span class="kw">async fn </span>complete(<span class="kw-2">&</span><span class="self">self</span>, upload_id: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><Buffer> {
+ <span class="kw">let </span>file_id = <span class="self">self</span>.read_file_id().<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(size)
+ <span class="self">self</span>.core.complete(<span class="kw-2">&</span>file_id, upload_id).<span class="kw">await
+ </span>}
+
+ <span class="kw">async fn </span>delete(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">let </span>file_id = <span class="self">self</span>.read_file_id().<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="self">self</span>.core.delete_path(<span class="kw-2">&</span>file_id).<span class="kw">await
+ </span>}
+}
+
+<span class="kw">impl </span>oio::MultipartWrite <span class="kw">for </span>AliyunDriveWriter {
+ <span class="kw">async fn </span>write_once(<span class="kw-2">&</span><span class="self">self</span>, size: u64, body: <span class="kw">crate</span>::Buffer) -> <span class="prelude-ty">Result</span><()> {
+ <span class="kw">let </span>upload_id = <span class="self">self</span>.initiate_part().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="self">self</span>.write_part(<span class="kw-2">&</span>upload_id, <span class="number">0</span>, size, body).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="self">self</span>.complete(<span class="kw-2">&</span>upload_id).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="prelude-val">Ok</span>(())
}
- <span class="kw">async fn </span>close(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
- <span class="kw">let </span>(<span class="prelude-val">Some</span>(upload_id), <span class="prelude-val">Some</span>(file_id)) = (<span class="self">self</span>.upload_id.as_ref(), <span class="self">self</span>.file_id.as_ref())
- <span class="kw">else </span>{
- <span class="kw">return </span><span class="prelude-val">Ok</span>(());
+ <span class="kw">async fn </span>initiate_part(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><String> {
+ <span class="kw">let </span><span class="prelude-val">Some</span>(upload_id) = <span class="self">self</span>.write(<span class="prelude-val">None</span>, <span class="prelude-val">None</span>).<span class="kw">await</span><span class="question-mark">? </span><span class="kw">else </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unsupported, <span class="string">"cannot find upload_id"</span>));
};
- <span class="self">self</span>.core.complete(file_id, upload_id).<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(())
+
+ <span class="prelude-val">Ok</span>(upload_id)
}
- <span class="kw">async fn </span>abort(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
- <span class="kw">let </span><span class="prelude-val">Some</span>(file_id) = <span class="self">self</span>.file_id.as_ref() <span class="kw">else </span>{
- <span class="kw">return </span><span class="prelude-val">Ok</span>(());
+ <span class="kw">async fn </span>write_part(
+ <span class="kw-2">&</span><span class="self">self</span>,
+ upload_id: <span class="kw-2">&</span>str,
+ part_number: usize,
+ _size: u64,
+ body: <span class="kw">crate</span>::Buffer,
+ ) -> <span class="prelude-ty">Result</span><oio::MultipartPart> {
+ <span class="kw">let </span>file_id = <span class="self">self</span>.read_file_id().<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>res = <span class="self">self
+ </span>.core
+ .get_upload_url(<span class="kw-2">&</span>file_id, upload_id, <span class="prelude-val">Some</span>(part_number + <span class="number">1</span>))
+ .<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>output: UploadUrlResponse =
+ serde_json::from_reader(res.reader()).map_err(new_json_deserialize_error)<span class="question-mark">?</span>;
+
+ <span class="kw">let </span><span class="prelude-val">Some</span>(part_info_list) = output.part_info_list <span class="kw">else </span>{
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+ ErrorKind::Unexpected,
+ <span class="string">"cannot find part_info_list"</span>,
+ ));
};
- <span class="self">self</span>.core.delete_path(file_id).<span class="kw">await
+ <span class="kw">if </span>part_info_list.is_empty() {
+ <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected, <span class="string">"cannot find upload_url"</span>));
+ }
+ <span class="self">self</span>.write(<span class="prelude-val">Some</span>(body), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>part_info_list[<span class="number">0</span>].upload_url))
+ .<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="prelude-val">Ok</span>(oio::MultipartPart {
+ part_number,
+ etag: part_info_list[<span class="number">0</span>].etag.clone().unwrap_or(<span class="string">""</span>.to_string()),
+ checksum: <span class="prelude-val">None</span>,
+ })
+ }
+
+ <span class="kw">async fn </span>complete_part(<span class="kw-2">&</span><span class="self">self</span>, upload_id: <span class="kw-2">&</span>str, _parts: <span class="kw-2">&</span>[oio::MultipartPart]) -> <span class="prelude-ty">Result</span><()> {
+ <span class="self">self</span>.complete(upload_id).<span class="kw">await</span><span class="question-mark">?</span>;
+
+ <span class="prelude-val">Ok</span>(())
+ }
+
+ <span class="kw">async fn </span>abort_part(<span class="kw-2">&</span><span class="self">self</span>, _upload_id: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><()> {
+ <span class="self">self</span>.delete().<span class="kw">await
</span>}
}
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/blocking_write/blocking_writer.rs.html b/docs/rust/src/opendal/types/blocking_write/blocking_writer.rs.html
index 115d186ca1..5ac9096e4b 100644
--- a/docs/rust/src/opendal/types/blocking_write/blocking_writer.rs.html
+++ b/docs/rust/src/opendal/types/blocking_write/blocking_writer.rs.html
@@ -60,37 +60,6 @@
<a href="#60" id="60">60</a>
<a href="#61" id="61">61</a>
<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -109,7 +78,6 @@
// under the License.
</span><span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>std::sync::Arc;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -117,9 +85,7 @@
<span class="doccomment">/// BlockingWriter is designed to write data into given path in an blocking
/// manner.
</span><span class="kw">pub struct </span>BlockingWriter {
- <span class="doccomment">/// Keep a reference to write context in writer.
- </span>_ctx: Arc<WriteContext>,
- inner: WriteGenerator<oio::BlockingWriter>,
+ <span class="kw">pub</span>(<span class="kw">crate</span>) inner: oio::BlockingWriter,
}
<span class="kw">impl </span>BlockingWriter {
@@ -130,36 +96,13 @@
///
/// We don't want to expose those details to users so keep this function
/// in crate only.
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(ctx: WriteContext) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
- <span class="kw">let </span>ctx = Arc::new(ctx);
- <span class="kw">let </span>inner = WriteGenerator::blocking_create(ctx.clone())<span class="question-mark">?</span>;
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>create(acc: Accessor, path: <span class="kw-2">&</span>str, op: OpWrite) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
+ <span class="kw">let </span>(<span class="kw">_</span>, w) = acc.blocking_write(path, op)<span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(<span class="self">Self </span>{ _ctx: ctx, inner })
+ <span class="prelude-val">Ok</span>(BlockingWriter { inner: w })
}
- <span class="doccomment">/// Write [`Buffer`] into writer.
- ///
- /// This operation will write all data in given buffer into writer.
- ///
- /// ## Examples
- ///
- /// ```
- /// use bytes::Bytes;
- /// use opendal::BlockingOperator;
- /// use opendal::Result;
- ///
- /// async fn test(op: BlockingOperator) -> Result<()> {
- /// let mut w = op.writer("hello.txt")?;
- /// // Buffer can be created from continues bytes.
- /// w.write("hello, world")?;
- /// // Buffer can also be created from non-continues bytes.
- /// w.write(vec![Bytes::from("hello,"), Bytes::from("world!")])?;
- ///
- /// // Make sure file has been written completely.
- /// w.close()?;
- /// Ok(())
- /// }
- /// ```
+ <span class="doccomment">/// Write into inner writer.
</span><span class="kw">pub fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: <span class="kw">impl </span>Into<Buffer>) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span><span class="kw-2">mut </span>bs = bs.into();
<span class="kw">while </span>!bs.is_empty() {
@@ -169,12 +112,7 @@
<span class="prelude-val">Ok</span>(())
}
- <span class="doccomment">/// Close the writer and make sure all data have been committed.
- ///
- /// ## Notes
- ///
- /// Close should only be called when the writer is not closed or
- /// aborted, otherwise an unexpected error could be returned.
+ <span class="doccomment">/// Close the writer and make sure all data have been stored.
</span><span class="kw">pub fn </span>close(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><()> {
<span class="self">self</span>.inner.close()
}
diff --git a/docs/rust/src/opendal/types/blocking_write/std_writer.rs.html b/docs/rust/src/opendal/types/blocking_write/std_writer.rs.html
index 3920e389d1..eedd5227c5 100644
--- a/docs/rust/src/opendal/types/blocking_write/std_writer.rs.html
+++ b/docs/rust/src/opendal/types/blocking_write/std_writer.rs.html
@@ -119,6 +119,7 @@
<a href="#119" id="119">119</a>
<a href="#120" id="120">120</a>
<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -138,6 +139,7 @@
</span><span class="kw">use </span>std::io::Write;
+<span class="kw">use </span><span class="kw">crate</span>::raw::oio::BlockingWrite;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -150,14 +152,14 @@
/// Files are automatically closed when they go out of scope. Errors detected on closing are ignored
/// by the implementation of Drop. Use the method `close` if these errors must be manually handled.
</span><span class="kw">pub struct </span>StdWriter {
- w: <span class="prelude-ty">Option</span><WriteGenerator<oio::BlockingWriter>>,
+ w: <span class="prelude-ty">Option</span><oio::BlockingWriter>,
buf: oio::FlexBuf,
}
<span class="kw">impl </span>StdWriter {
<span class="doccomment">/// NOTE: don't allow users to create directly.
</span><span class="attr">#[inline]
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: WriteGenerator<oio::BlockingWriter>) -> <span class="self">Self </span>{
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: oio::BlockingWriter) -> <span class="self">Self </span>{
StdWriter {
w: <span class="prelude-val">Some</span>(w),
buf: oio::FlexBuf::new(<span class="number">256 </span>* <span class="number">1024</span>),
diff --git a/docs/rust/src/opendal/types/context/read.rs.html b/docs/rust/src/opendal/types/context.rs.html
similarity index 88%
rename from docs/rust/src/opendal/types/context/read.rs.html
rename to docs/rust/src/opendal/types/context.rs.html
index fc2f8a2021..cf6877b05e 100644
--- a/docs/rust/src/opendal/types/context/read.rs.html
+++ b/docs/rust/src/opendal/types/context.rs.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/types/context/read.rs`."><title>read.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/types/context.rs`."><title>context.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4 [...]
<a href="#2" id="2">2</a>
<a href="#3" id="3">3</a>
<a href="#4" id="4">4</a>
diff --git a/docs/rust/src/opendal/types/context/mod.rs.html b/docs/rust/src/opendal/types/context/mod.rs.html
deleted file mode 100644
index b49058fddb..0000000000
--- a/docs/rust/src/opendal/types/context/mod.rs.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/types/context/mod.rs`."><title>mod.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4 [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">mod </span>read;
-<span class="kw">pub use </span>read::<span class="kw-2">*</span>;
-
-<span class="kw">mod </span>write;
-<span class="kw">pub use </span>write::<span class="kw-2">*</span>;
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/mod.rs.html b/docs/rust/src/opendal/types/mod.rs.html
index 333ed9d3cb..ccd7d7121b 100644
--- a/docs/rust/src/opendal/types/mod.rs.html
+++ b/docs/rust/src/opendal/types/mod.rs.html
@@ -71,6 +71,7 @@
<a href="#71" id="71">71</a>
<a href="#72" id="72">72</a>
<a href="#73" id="73">73</a>
+<a href="#74" id="74">74</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -143,5 +144,6 @@
<span class="kw">pub use </span>capability::Capability;
<span class="kw">mod </span>context;
-<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">use </span>context::<span class="kw-2">*</span>;
+<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">use </span>context::ReadContext;
+<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">use </span>context::ReadGenerator;
</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
index 9a22c21246..cbe99b2f60 100644
--- a/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/blocking_operator.rs.html
@@ -1183,6 +1183,9 @@
<a href="#1183" id="1183">1183</a>
<a href="#1184" id="1184">1184</a>
<a href="#1185" id="1185">1185</a>
+<a href="#1186" id="1186">1186</a>
+<a href="#1187" id="1187">1187</a>
+<a href="#1188" id="1188">1188</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -1200,7 +1203,9 @@
// specific language governing permissions and limitations
// under the License.
-</span><span class="kw">use </span><span class="kw">super</span>::operator_functions::<span class="kw-2">*</span>;
+</span><span class="kw">use </span>bytes::Buf;
+
+<span class="kw">use </span><span class="kw">super</span>::operator_functions::<span class="kw-2">*</span>;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -1813,8 +1818,8 @@
FunctionWrite(OperatorFunction::new(
<span class="self">self</span>.inner().clone(),
path,
- (OpWrite::default(), OpWriter::default(), bs),
- |inner, path, (args, options, bs)| {
+ (OpWrite::default(), bs),
+ |inner, path, (args, <span class="kw-2">mut </span>bs)| {
<span class="kw">if </span>!validate_path(<span class="kw-2">&</span>path, EntryMode::FILE) {
<span class="kw">return </span><span class="prelude-val">Err</span>(
Error::new(ErrorKind::IsADirectory, <span class="string">"write path is a directory"</span>)
@@ -1824,10 +1829,13 @@
);
}
- <span class="kw">let </span>context = WriteContext::new(inner, path, args, options);
- <span class="kw">let </span><span class="kw-2">mut </span>w = BlockingWriter::new(context)<span class="question-mark">?</span>;
- w.write(bs)<span class="question-mark">?</span>;
+ <span class="kw">let </span>(<span class="kw">_</span>, <span class="kw-2">mut </span>w) = inner.blocking_write(<span class="kw-2">&</span>path, args)<span class="question-mark">?</span>;
+ <span class="kw">while </span>!bs.is_empty() {
+ <span class="kw">let </span>n = w.write(bs.clone())<span class="question-mark">?</span>;
+ bs.advance(n);
+ }
w.close()<span class="question-mark">?</span>;
+
<span class="prelude-val">Ok</span>(())
},
))
@@ -1883,8 +1891,8 @@
FunctionWriter(OperatorFunction::new(
<span class="self">self</span>.inner().clone(),
path,
- (OpWrite::default(), OpWriter::default()),
- |inner, path, (args, options)| {
+ OpWrite::default(),
+ |inner, path, args| {
<span class="kw">let </span>path = normalize_path(<span class="kw-2">&</span>path);
<span class="kw">if </span>!validate_path(<span class="kw-2">&</span>path, EntryMode::FILE) {
@@ -1896,9 +1904,7 @@
);
}
- <span class="kw">let </span>context = WriteContext::new(inner, path, args, options);
- <span class="kw">let </span>w = BlockingWriter::new(context)<span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(w)
+ BlockingWriter::create(inner.clone(), <span class="kw-2">&</span>path, args)
},
))
}
diff --git a/docs/rust/src/opendal/types/operator/operator.rs.html b/docs/rust/src/opendal/types/operator/operator.rs.html
index 85a374b535..c6c22fdd02 100644
--- a/docs/rust/src/opendal/types/operator/operator.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator.rs.html
@@ -2233,11 +2233,6 @@
<a href="#2233" id="2233">2233</a>
<a href="#2234" id="2234">2234</a>
<a href="#2235" id="2235">2235</a>
-<a href="#2236" id="2236">2236</a>
-<a href="#2237" id="2237">2237</a>
-<a href="#2238" id="2238">2238</a>
-<a href="#2239" id="2239">2239</a>
-<a href="#2240" id="2240">2240</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -3323,11 +3318,8 @@
OperatorFuture::new(
<span class="self">self</span>.inner().clone(),
path,
- (
- OpWrite::default().merge_executor(<span class="self">self</span>.default_executor.clone()),
- OpWriter::default(),
- ),
- |inner, path, (args, options)| <span class="kw">async move </span>{
+ OpWrite::default().merge_executor(<span class="self">self</span>.default_executor.clone()),
+ |inner, path, args| <span class="kw">async move </span>{
<span class="kw">if </span>!validate_path(<span class="kw-2">&</span>path, EntryMode::FILE) {
<span class="kw">return </span><span class="prelude-val">Err</span>(
Error::new(ErrorKind::IsADirectory, <span class="string">"write path is a directory"</span>)
@@ -3337,10 +3329,8 @@
);
}
- <span class="kw">let </span>context = WriteContext::new(inner, path, args, options);
- <span class="kw">let </span>w = Writer::new(context).<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(w)
- },
+ Writer::create(inner, <span class="kw-2">&</span>path, args).<span class="kw">await
+ </span>},
)
}
@@ -3474,10 +3464,9 @@
path,
(
OpWrite::default().merge_executor(<span class="self">self</span>.default_executor.clone()),
- OpWriter::default(),
bs,
),
- |inner, path, (args, options, bs)| <span class="kw">async move </span>{
+ |inner, path, (args, bs)| <span class="kw">async move </span>{
<span class="kw">if </span>!validate_path(<span class="kw-2">&</span>path, EntryMode::FILE) {
<span class="kw">return </span><span class="prelude-val">Err</span>(
Error::new(ErrorKind::IsADirectory, <span class="string">"write path is a directory"</span>)
@@ -3487,10 +3476,11 @@
);
}
- <span class="kw">let </span>context = WriteContext::new(inner, path, args, options);
- <span class="kw">let </span><span class="kw-2">mut </span>w = Writer::new(context).<span class="kw">await</span><span class="question-mark">?</span>;
- w.write(bs).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>(<span class="kw">_</span>, w) = inner.write(<span class="kw-2">&</span>path, args).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span><span class="kw-2">mut </span>w = Writer::new(w);
+ w.write(bs.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
w.close().<span class="kw">await</span><span class="question-mark">?</span>;
+
<span class="prelude-val">Ok</span>(())
},
)
diff --git a/docs/rust/src/opendal/types/operator/operator_functions.rs.html b/docs/rust/src/opendal/types/operator/operator_functions.rs.html
index b448109712..e095d456e3 100644
--- a/docs/rust/src/opendal/types/operator/operator_functions.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator_functions.rs.html
@@ -420,40 +420,6 @@
<a href="#420" id="420">420</a>
<a href="#421" id="421">421</a>
<a href="#422" id="422">422</a>
-<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
-<a href="#455" id="455">455</a>
-<a href="#456" id="456">456</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -527,7 +493,7 @@
</span><span class="kw">pub struct </span>FunctionWrite(
<span class="doccomment">/// The args for FunctionWrite is a bit special because we also
/// need to move the bytes input this function.
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) OperatorFunction<(OpWrite, OpWriter, Buffer), ()>,
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) OperatorFunction<(OpWrite, Buffer), ()>,
);
<span class="kw">impl </span>FunctionWrite {
@@ -539,9 +505,7 @@
///
/// Service could return `Unsupported` if the underlying storage does not support append.
</span><span class="kw">pub fn </span>append(<span class="kw-2">mut </span><span class="self">self</span>, v: bool) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options, bs)| (args.with_append(v), options, bs));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|(args, bs)| (args.with_append(v), bs));
<span class="self">self
</span>}
@@ -551,19 +515,10 @@
///
/// ## NOTE
///
- /// Service could have their own limitation for chunk size. It's possible that chunk size
- /// is not equal to the given chunk size.
- ///
- /// For example:
- ///
- /// - AWS S3 requires the part size to be in [5MiB, 5GiB].
- /// - GCS requires the part size to be aligned with 256 KiB.
- ///
- /// The services will alter the chunk size to meet their requirements.
+ /// Service could have their own minimum chunk size while perform write operations like
+ /// multipart uploads. So the chunk size may be larger than the given chunk size.
</span><span class="kw">pub fn </span>chunk(<span class="kw-2">mut </span><span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options, bs)| (args, options.with_chunk(v), bs));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|(args, bs)| (args.with_chunk(v), bs));
<span class="self">self
</span>}
@@ -571,7 +526,7 @@
</span><span class="kw">pub fn </span>content_type(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
<span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
</span>.<span class="number">0
- </span>.map_args(|(args, options, bs)| (args.with_content_type(v), options, bs));
+ </span>.map_args(|(args, bs)| (args.with_content_type(v), bs));
<span class="self">self
</span>}
@@ -579,7 +534,7 @@
</span><span class="kw">pub fn </span>content_disposition(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
<span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
</span>.<span class="number">0
- </span>.map_args(|(args, options, bs)| (args.with_content_disposition(v), options, bs));
+ </span>.map_args(|(args, bs)| (args.with_content_disposition(v), bs));
<span class="self">self
</span>}
@@ -587,7 +542,7 @@
</span><span class="kw">pub fn </span>cache_control(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
<span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
</span>.<span class="number">0
- </span>.map_args(|(args, options, bs)| (args.with_cache_control(v), options, bs));
+ </span>.map_args(|(args, bs)| (args.with_cache_control(v), bs));
<span class="self">self
</span>}
@@ -604,7 +559,7 @@
</span><span class="kw">pub struct </span>FunctionWriter(
<span class="doccomment">/// The args for FunctionWriter is a bit special because we also
/// need to move the bytes input this function.
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) OperatorFunction<(OpWrite, OpWriter), BlockingWriter>,
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) OperatorFunction<OpWrite, BlockingWriter>,
);
<span class="kw">impl </span>FunctionWriter {
@@ -616,61 +571,38 @@
///
/// Service could return `Unsupported` if the underlying storage does not support append.
</span><span class="kw">pub fn </span>append(<span class="kw-2">mut </span><span class="self">self</span>, v: bool) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options)| (args.with_append(v), options));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|args| args.with_append(v));
<span class="self">self
</span>}
- <span class="doccomment">/// Set the chunk size of op.
+ <span class="doccomment">/// Set the buffer size of op.
///
- /// If chunk size is set, the data will be chunked by the underlying writer.
+ /// If buffer size is set, the data will be buffered by the underlying writer.
///
/// ## NOTE
///
- /// Service could have their own limitation for chunk size. It's possible that chunk size
- /// is not equal to the given chunk size.
- ///
- /// For example:
- ///
- /// - AWS S3 requires the part size to be in [5MiB, 5GiB].
- /// - GCS requires the part size to be aligned with 256 KiB.
- ///
- /// The services will alter the chunk size to meet their requirements.
- </span><span class="kw">pub fn </span>chunk(<span class="kw-2">mut </span><span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options)| (args, options.with_chunk(v)));
+ /// Service could have their own minimum buffer size while perform write operations like
+ /// multipart uploads. So the buffer size may be larger than the given buffer size.
+ </span><span class="kw">pub fn </span>buffer(<span class="kw-2">mut </span><span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|args| args.with_chunk(v));
<span class="self">self
</span>}
- <span class="doccomment">/// Set the chunk size of op.
- </span><span class="attr">#[deprecated(note = <span class="string">"Please use `chunk` instead"</span>)]
- </span><span class="kw">pub fn </span>buffer(<span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.chunk(v)
- }
-
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>content_type(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options)| (args.with_content_type(v), options));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|args| args.with_content_type(v));
<span class="self">self
</span>}
<span class="doccomment">/// Set the content disposition of option
</span><span class="kw">pub fn </span>content_disposition(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options)| (args.with_content_disposition(v), options));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|args| args.with_content_disposition(v));
<span class="self">self
</span>}
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>cache_control(<span class="kw-2">mut </span><span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self
- </span>.<span class="number">0
- </span>.map_args(|(args, options)| (args.with_cache_control(v), options));
+ <span class="self">self</span>.<span class="number">0 </span>= <span class="self">self</span>.<span class="number">0</span>.map_args(|args| args.with_cache_control(v));
<span class="self">self
</span>}
diff --git a/docs/rust/src/opendal/types/operator/operator_futures.rs.html b/docs/rust/src/opendal/types/operator/operator_futures.rs.html
index 2ce851a34c..453effce02 100644
--- a/docs/rust/src/opendal/types/operator/operator_futures.rs.html
+++ b/docs/rust/src/opendal/types/operator/operator_futures.rs.html
@@ -775,7 +775,7 @@
<span class="doccomment">/// Future that generated by [`Operator::write_with`].
///
/// Users can add more options by public functions provided by this struct.
-</span><span class="kw">pub type </span>FutureWrite<F> = OperatorFuture<(OpWrite, OpWriter, Buffer), (), F>;
+</span><span class="kw">pub type </span>FutureWrite<F> = OperatorFuture<(OpWrite, Buffer), (), F>;
<span class="kw">impl</span><F: Future<Output = <span class="prelude-ty">Result</span><()>>> FutureWrite<F> {
<span class="doccomment">/// Set the append mode of op.
@@ -786,7 +786,7 @@
///
/// Service could return `Unsupported` if the underlying storage does not support append.
</span><span class="kw">pub fn </span>append(<span class="self">self</span>, v: bool) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_append(v), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_append(v), bs))
}
<span class="doccomment">/// Set the buffer size of op.
@@ -798,39 +798,39 @@
/// Service could have their own minimum buffer size while perform write operations like
/// multipart uploads. So the buffer size may be larger than the given buffer size.
</span><span class="kw">pub fn </span>chunk(<span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args, options.with_chunk(v), bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_chunk(v), bs))
}
<span class="doccomment">/// Set the maximum concurrent write task amount.
</span><span class="kw">pub fn </span>concurrent(<span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_concurrent(v), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_concurrent(v), bs))
}
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>cache_control(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_cache_control(v), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_cache_control(v), bs))
}
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>content_type(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_content_type(v), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_content_type(v), bs))
}
<span class="doccomment">/// Set the content disposition of option
</span><span class="kw">pub fn </span>content_disposition(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_content_disposition(v), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_content_disposition(v), bs))
}
<span class="doccomment">/// Set the executor for this operation.
</span><span class="kw">pub fn </span>executor(<span class="self">self</span>, executor: Executor) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options, bs)| (args.with_executor(executor), options, bs))
+ <span class="self">self</span>.map(|(args, bs)| (args.with_executor(executor), bs))
}
}
<span class="doccomment">/// Future that generated by [`Operator::writer_with`].
///
/// Users can add more options by public functions provided by this struct.
-</span><span class="kw">pub type </span>FutureWriter<F> = OperatorFuture<(OpWrite, OpWriter), Writer, F>;
+</span><span class="kw">pub type </span>FutureWriter<F> = OperatorFuture<OpWrite, Writer, F>;
<span class="kw">impl</span><F: Future<Output = <span class="prelude-ty">Result</span><Writer>>> FutureWriter<F> {
<span class="doccomment">/// Set the append mode of op.
@@ -841,7 +841,7 @@
///
/// Service could return `Unsupported` if the underlying storage does not support append.
</span><span class="kw">pub fn </span>append(<span class="self">self</span>, v: bool) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_append(v), options))
+ <span class="self">self</span>.map(|args| args.with_append(v))
}
<span class="doccomment">/// Set the chunk size of op.
@@ -860,32 +860,32 @@
///
/// The services will alter the chunk size to meet their requirements.
</span><span class="kw">pub fn </span>chunk(<span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args, options.with_chunk(v)))
+ <span class="self">self</span>.map(|args| args.with_chunk(v))
}
<span class="doccomment">/// Set the maximum concurrent write task amount.
</span><span class="kw">pub fn </span>concurrent(<span class="self">self</span>, v: usize) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_concurrent(v), options))
+ <span class="self">self</span>.map(|args| args.with_concurrent(v))
}
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>cache_control(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_cache_control(v), options))
+ <span class="self">self</span>.map(|args| args.with_cache_control(v))
}
<span class="doccomment">/// Set the content type of option
</span><span class="kw">pub fn </span>content_type(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_content_type(v), options))
+ <span class="self">self</span>.map(|args| args.with_content_type(v))
}
<span class="doccomment">/// Set the content disposition of option
</span><span class="kw">pub fn </span>content_disposition(<span class="self">self</span>, v: <span class="kw-2">&</span>str) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_content_disposition(v), options))
+ <span class="self">self</span>.map(|args| args.with_content_disposition(v))
}
<span class="doccomment">/// Set the executor for this operation.
</span><span class="kw">pub fn </span>executor(<span class="self">self</span>, executor: Executor) -> <span class="self">Self </span>{
- <span class="self">self</span>.map(|(args, options)| (args.with_executor(executor), options))
+ <span class="self">self</span>.map(|args| args.with_executor(executor))
}
}
diff --git a/docs/rust/src/opendal/types/write/buffer_sink.rs.html b/docs/rust/src/opendal/types/write/buffer_sink.rs.html
index fb05cb186a..50f37c7866 100644
--- a/docs/rust/src/opendal/types/write/buffer_sink.rs.html
+++ b/docs/rust/src/opendal/types/write/buffer_sink.rs.html
@@ -173,19 +173,6 @@
<a href="#173" id="173">173</a>
<a href="#174" id="174">174</a>
<a href="#175" id="175">175</a>
-<a href="#176" id="176">176</a>
-<a href="#177" id="177">177</a>
-<a href="#178" id="178">178</a>
-<a href="#179" id="179">179</a>
-<a href="#180" id="180">180</a>
-<a href="#181" id="181">181</a>
-<a href="#182" id="182">182</a>
-<a href="#183" id="183">183</a>
-<a href="#184" id="184">184</a>
-<a href="#185" id="185">185</a>
-<a href="#186" id="186">186</a>
-<a href="#187" id="187">187</a>
-<a href="#188" id="188">188</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -222,9 +209,9 @@
}
<span class="kw">enum </span>State {
- Idle(<span class="prelude-ty">Option</span><WriteGenerator<oio::Writer>>),
- Writing(BoxedStaticFuture<(WriteGenerator<oio::Writer>, <span class="prelude-ty">Result</span><usize>)>),
- Closing(BoxedStaticFuture<(WriteGenerator<oio::Writer>, <span class="prelude-ty">Result</span><()>)>),
+ Idle(<span class="prelude-ty">Option</span><oio::Writer>),
+ Writing(BoxedStaticFuture<(oio::Writer, <span class="prelude-ty">Result</span><usize>)>),
+ Closing(BoxedStaticFuture<(oio::Writer, <span class="prelude-ty">Result</span><()>)>),
}
<span class="doccomment">/// # Safety
@@ -235,7 +222,7 @@
<span class="kw">impl </span>BufferSink {
<span class="doccomment">/// Create a new sink from a [`oio::Writer`].
</span><span class="attr">#[inline]
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: WriteGenerator<oio::Writer>) -> <span class="self">Self </span>{
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: oio::Writer) -> <span class="self">Self </span>{
BufferSink {
state: State::Idle(<span class="prelude-val">Some</span>(w)),
buf: Buffer::new(),
@@ -271,7 +258,7 @@
};
<span class="kw">let </span>buf = this.buf.clone();
<span class="kw">let </span>fut = <span class="kw">async move </span>{
- <span class="kw">let </span>res = w.write(buf).<span class="kw">await</span>;
+ <span class="kw">let </span>res = w.write_dyn(buf).<span class="kw">await</span>;
(w, res)
};
this.state = State::Writing(Box::pin(fut));
@@ -310,14 +297,14 @@
<span class="kw">if </span>this.buf.is_empty() {
<span class="kw">let </span>fut = <span class="kw">async move </span>{
- <span class="kw">let </span>res = w.close().<span class="kw">await</span>;
+ <span class="kw">let </span>res = w.close_dyn().<span class="kw">await</span>;
(w, res)
};
this.state = State::Closing(Box::pin(fut));
} <span class="kw">else </span>{
<span class="kw">let </span>buf = this.buf.clone();
<span class="kw">let </span>fut = <span class="kw">async move </span>{
- <span class="kw">let </span>res = w.write(buf).<span class="kw">await</span>;
+ <span class="kw">let </span>res = w.write_dyn(buf).<span class="kw">await</span>;
(w, res)
};
this.state = State::Writing(Box::pin(fut));
@@ -351,25 +338,12 @@
<span class="attr">#[cfg(test)]
</span><span class="kw">mod </span>tests {
- <span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
- <span class="kw">use crate</span>::<span class="kw-2">*</span>;
- <span class="kw">use </span>std::collections::HashMap;
- <span class="kw">use </span>std::sync::Arc;
+ <span class="kw">use </span><span class="kw">crate</span>::raw::MaybeSend;
+ <span class="kw">use </span><span class="kw">crate</span>::BufferSink;
- <span class="attr">#[tokio::test]
- </span><span class="kw">async fn </span>test_trait() {
- <span class="kw">let </span>op = Operator::via_map(Scheme::Memory, HashMap::default()).unwrap();
-
- <span class="kw">let </span>acc = op.into_inner();
- <span class="kw">let </span>ctx = Arc::new(WriteContext::new(
- acc,
- <span class="string">"test"</span>.to_string(),
- OpWrite::new(),
- OpWriter::new().with_chunk(<span class="number">1</span>),
- ));
- <span class="kw">let </span>write_gen = WriteGenerator::create(ctx).<span class="kw">await</span>.unwrap();
-
- <span class="kw">let </span>v = BufferSink::new(write_gen);
+ <span class="attr">#[test]
+ </span><span class="kw">fn </span>test_trait() {
+ <span class="kw">let </span>v = BufferSink::new(Box::new(()));
<span class="kw">let _</span>: Box<<span class="kw">dyn </span>Unpin + MaybeSend + Sync + <span class="lifetime">'static</span>> = Box::new(v);
}
diff --git a/docs/rust/src/opendal/types/write/futures_async_writer.rs.html b/docs/rust/src/opendal/types/write/futures_async_writer.rs.html
index e4491e3440..e1ab5bc769 100644
--- a/docs/rust/src/opendal/types/write/futures_async_writer.rs.html
+++ b/docs/rust/src/opendal/types/write/futures_async_writer.rs.html
@@ -121,19 +121,6 @@
<a href="#121" id="121">121</a>
<a href="#122" id="122">122</a>
<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -176,7 +163,7 @@
<span class="kw">impl </span>FuturesAsyncWriter {
<span class="doccomment">/// NOTE: don't allow users to create directly.
</span><span class="attr">#[inline]
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: WriteGenerator<oio::Writer>) -> <span class="self">Self </span>{
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: oio::Writer) -> <span class="self">Self </span>{
FuturesAsyncWriter {
sink: BufferSink::new(w),
buf: oio::FlexBuf::new(<span class="number">256 </span>* <span class="number">1024</span>),
@@ -249,23 +236,10 @@
</span><span class="kw">mod </span>tests {
<span class="kw">use super</span>::<span class="kw-2">*</span>;
<span class="kw">use </span><span class="kw">crate</span>::raw::MaybeSend;
- <span class="kw">use </span>std::collections::HashMap;
- <span class="kw">use </span>std::sync::Arc;
- <span class="attr">#[tokio::test]
- </span><span class="kw">async fn </span>test_trait() {
- <span class="kw">let </span>op = Operator::via_map(Scheme::Memory, HashMap::default()).unwrap();
-
- <span class="kw">let </span>acc = op.into_inner();
- <span class="kw">let </span>ctx = Arc::new(WriteContext::new(
- acc,
- <span class="string">"test"</span>.to_string(),
- OpWrite::new(),
- OpWriter::new().with_chunk(<span class="number">1</span>),
- ));
- <span class="kw">let </span>write_gen = WriteGenerator::create(ctx).<span class="kw">await</span>.unwrap();
-
- <span class="kw">let </span>v = FuturesAsyncWriter::new(write_gen);
+ <span class="attr">#[test]
+ </span><span class="kw">fn </span>test_trait() {
+ <span class="kw">let </span>v = FuturesAsyncWriter::new(Box::new(()));
<span class="kw">let _</span>: Box<<span class="kw">dyn </span>Unpin + MaybeSend + Sync + <span class="lifetime">'static</span>> = Box::new(v);
}
diff --git a/docs/rust/src/opendal/types/write/futures_bytes_sink.rs.html b/docs/rust/src/opendal/types/write/futures_bytes_sink.rs.html
index eb7ddc9970..30da11bc5a 100644
--- a/docs/rust/src/opendal/types/write/futures_bytes_sink.rs.html
+++ b/docs/rust/src/opendal/types/write/futures_bytes_sink.rs.html
@@ -88,19 +88,6 @@
<a href="#88" id="88">88</a>
<a href="#89" id="89">89</a>
<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
-<a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -141,7 +128,7 @@
<span class="kw">impl </span>FuturesBytesSink {
<span class="doccomment">/// Create a new sink from a [`oio::Writer`].
</span><span class="attr">#[inline]
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: WriteGenerator<oio::Writer>) -> <span class="self">Self </span>{
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: oio::Writer) -> <span class="self">Self </span>{
FuturesBytesSink {
sink: BufferSink::new(w),
}
@@ -183,23 +170,10 @@
</span><span class="kw">mod </span>tests {
<span class="kw">use super</span>::<span class="kw-2">*</span>;
<span class="kw">use </span><span class="kw">crate</span>::raw::MaybeSend;
- <span class="kw">use </span>std::collections::HashMap;
- <span class="kw">use </span>std::sync::Arc;
- <span class="attr">#[tokio::test]
- </span><span class="kw">async fn </span>test_trait() {
- <span class="kw">let </span>op = Operator::via_map(Scheme::Memory, HashMap::default()).unwrap();
-
- <span class="kw">let </span>acc = op.into_inner();
- <span class="kw">let </span>ctx = Arc::new(WriteContext::new(
- acc,
- <span class="string">"test"</span>.to_string(),
- OpWrite::new(),
- OpWriter::new().with_chunk(<span class="number">1</span>),
- ));
- <span class="kw">let </span>write_gen = WriteGenerator::create(ctx).<span class="kw">await</span>.unwrap();
-
- <span class="kw">let </span>v = FuturesBytesSink::new(write_gen);
+ <span class="attr">#[test]
+ </span><span class="kw">fn </span>test_trait() {
+ <span class="kw">let </span>v = FuturesBytesSink::new(Box::new(()));
<span class="kw">let _</span>: Box<<span class="kw">dyn </span>Unpin + MaybeSend + Sync + <span class="lifetime">'static</span>> = Box::new(v);
}
diff --git a/docs/rust/src/opendal/types/write/writer.rs.html b/docs/rust/src/opendal/types/write/writer.rs.html
index b15efaa839..ac442f93f7 100644
--- a/docs/rust/src/opendal/types/write/writer.rs.html
+++ b/docs/rust/src/opendal/types/write/writer.rs.html
@@ -353,6 +353,14 @@
<a href="#353" id="353">353</a>
<a href="#354" id="354">354</a>
<a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
+<a href="#359" id="359">359</a>
+<a href="#360" id="360">360</a>
+<a href="#361" id="361">361</a>
+<a href="#362" id="362">362</a>
+<a href="#363" id="363">363</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -371,8 +379,8 @@
// under the License.
</span><span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>std::sync::Arc;
+<span class="kw">use </span><span class="kw">crate</span>::raw::oio::Write;
<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
@@ -452,18 +460,26 @@
/// - Services that doesn't support append will return [`ErrorKind::Unsupported`] error when
/// creating writer with `append` enabled.
</span><span class="kw">pub struct </span>Writer {
- <span class="doccomment">/// Keep a reference to write context in writer.
- </span>_ctx: Arc<WriteContext>,
- inner: WriteGenerator<oio::Writer>,
+ inner: oio::Writer,
}
<span class="kw">impl </span>Writer {
<span class="doccomment">/// Create a new writer from an `oio::Writer`.
- </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn </span>new(ctx: WriteContext) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
- <span class="kw">let </span>ctx = Arc::new(ctx);
- <span class="kw">let </span>inner = WriteGenerator::create(ctx.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(w: oio::Writer) -> <span class="self">Self </span>{
+ Writer { inner: w }
+ }
+
+ <span class="doccomment">/// Create a new writer.
+ ///
+ /// Create will use internal information to decide the most suitable
+ /// implementation for users.
+ ///
+ /// We don't want to expose those details to users so keep this function
+ /// in crate only.
+ </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn </span>create(acc: Accessor, path: <span class="kw-2">&</span>str, op: OpWrite) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
+ <span class="kw">let </span>(<span class="kw">_</span>, w) = acc.write(path, op).<span class="kw">await</span><span class="question-mark">?</span>;
- <span class="prelude-val">Ok</span>(<span class="self">Self </span>{ _ctx: ctx, inner })
+ <span class="prelude-val">Ok</span>(Writer { inner: w })
}
<span class="doccomment">/// Write [`Buffer`] into writer.
@@ -493,7 +509,7 @@
</span><span class="kw">pub async fn </span>write(<span class="kw-2">&mut </span><span class="self">self</span>, bs: <span class="kw">impl </span>Into<Buffer>) -> <span class="prelude-ty">Result</span><()> {
<span class="kw">let </span><span class="kw-2">mut </span>bs = bs.into();
<span class="kw">while </span>!bs.is_empty() {
- <span class="kw">let </span>n = <span class="self">self</span>.inner.write(bs.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>n = <span class="self">self</span>.inner.write_dyn(bs.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
bs.advance(n);
}
<span class="prelude-val">Ok</span>(())
@@ -510,7 +526,7 @@
<span class="kw">let </span><span class="kw-2">mut </span>bs = bs;
<span class="kw">let </span><span class="kw-2">mut </span>bs = Buffer::from(bs.copy_to_bytes(bs.remaining()));
<span class="kw">while </span>!bs.is_empty() {
- <span class="kw">let </span>n = <span class="self">self</span>.inner.write(bs.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
+ <span class="kw">let </span>n = <span class="self">self</span>.inner.write_dyn(bs.clone()).<span class="kw">await</span><span class="question-mark">?</span>;
bs.advance(n);
}
<span class="prelude-val">Ok</span>(())
diff --git a/docs/rust/trait.impl/core/clone/trait.Clone.js b/docs/rust/trait.impl/core/clone/trait.Clone.js
index bce6a512d4..5ac1ea2cea 100644
--- a/docs/rust/trait.impl/core/clone/trait.Clone.js
+++ b/docs/rust/trait.impl/core/clone/trait.Clone.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="enum" href="opendal/enum.ErrorKind.html" title="enum opendal::ErrorKind">Er [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="enum" href="opendal/enum.ErrorKind.html" title="enum opendal::ErrorKind">Er [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/default/trait.Default.js b/docs/rust/trait.impl/core/default/trait.Default.js
index 9a7fce7e1b..e6d2379be0 100644
--- a/docs/rust/trait.impl/core/default/trait.Default.js
+++ b/docs/rust/trait.impl/core/default/trait.Default.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="enum" href="opendal/enum.Scheme.html" title="enum opend [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="enum" href="opendal/enum.Scheme.html" title="enum opend [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/fmt/trait.Debug.js b/docs/rust/trait.impl/core/fmt/trait.Debug.js
index 0db5117077..879c04f0b3 100644
--- a/docs/rust/trait.impl/core/fmt/trait.Debug.js
+++ b/docs/rust/trait.impl/core/fmt/trait.Debug.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="opendal/enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind< [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>'],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="opendal/enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind< [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Freeze.js b/docs/rust/trait.impl/core/marker/trait.Freeze.js
index 6dd101099e..6fba6252af 100644
--- a/docs/rust/trait.impl/core/marker/trait.Freeze.js
+++ b/docs/rust/trait.impl/core/marker/trait.Freeze.js
@@ -1 +1 @@
-!function(){var e={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="opendal/operator_functions/struct.FunctionWrite.html" title="struct opendal::operator_functions::FunctionWrite">FunctionWrite</a>',1,["opendal::types::operator::operator_functions::FunctionWrite"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" [...]
\ No newline at end of file
+!function(){var e={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="opendal/operator_functions/struct.FunctionWrite.html" title="struct opendal::operator_functions::FunctionWrite">FunctionWrite</a>',1,["opendal::types::operator::operator_functions::FunctionWrite"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Send.js b/docs/rust/trait.impl/core/marker/trait.Send.js
index 8740023b9e..f0a31ef8d8 100644
--- a/docs/rust/trait.impl/core/marker/trait.Send.js
+++ b/docs/rust/trait.impl/core/marker/trait.Send.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="opendal/enum.ErrorKind.html [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="opendal/enum.ErrorKind.html [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Sync.js b/docs/rust/trait.impl/core/marker/trait.Sync.js
index e01061c13a..55aec3d99d 100644
--- a/docs/rust/trait.impl/core/marker/trait.Sync.js
+++ b/docs/rust/trait.impl/core/marker/trait.Sync.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="opendal/enum.ErrorKind.html [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="opendal/enum.ErrorKind.html [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Unpin.js b/docs/rust/trait.impl/core/marker/trait.Unpin.js
index 6d19717954..5ba30176b6 100644
--- a/docs/rust/trait.impl/core/marker/trait.Unpin.js
+++ b/docs/rust/trait.impl/core/marker/trait.Unpin.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="opendal/enum.ErrorKin [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="opendal/enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a>',1,["opendal::types::mode::EntryMode"]],['impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="opendal/enum.ErrorKin [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 6773ebc4ef..c3f906d7cf 100644
--- a/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1 +1 @@
-!function(){var e={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="opendal/raw/enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a>',1,["opendal::raw::ops::PresignOperation"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwind [...]
\ No newline at end of file
+!function(){var e={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="opendal/raw/enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a>',1,["opendal::raw::ops::PresignOperation"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwind [...]
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
index 998d7e4b2f..83d289c227 100644
--- a/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1 +1 @@
-!function(){var t={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="opendal/raw/enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a>',1,["opendal::raw::ops::PresignOperation"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" t [...]
\ No newline at end of file
+!function(){var t={opendal:[['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="opendal/raw/enum.PresignOperation.html" title="enum opendal::raw::PresignOperation">PresignOperation</a>',1,["opendal::raw::ops::PresignOperation"]],['impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" t [...]
\ No newline at end of file
diff --git a/docs/rust/type.impl/alloc/sync/struct.Arc.js b/docs/rust/type.impl/alloc/sync/struct.Arc.js
index 4a59f14ce2..80a3434c71 100644
--- a/docs/rust/type.impl/alloc/sync/struct.Arc.js
+++ b/docs/rust/type.impl/alloc/sync/struct.Arc.js
@@ -1 +1 @@
-!function(){var t={opendal:[['<details class="toggle implementors-toggle" open><summary><section id="impl-Access-for-Arc%3CT%3E" class="impl"><a class="src rightside" href="src/opendal/raw/accessor.rs.html#712-829">source</a><a href="#impl-Access-for-Arc%3CT%3E" class="anchor">\xa7</a><h3 class="code-header">impl<T: <a class="trait" href="opendal/raw/trait.Access.html" title="trait opendal::raw::Access">Access</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker [...]
\ No newline at end of file
+!function(){var t={opendal:[['<details class="toggle implementors-toggle" open><summary><section id="impl-Access-for-Arc%3CT%3E" class="impl"><a class="src rightside" href="src/opendal/raw/accessor.rs.html#712-829">source</a><a href="#impl-Access-for-Arc%3CT%3E" class="anchor">\xa7</a><h3 class="code-header">impl<T: <a class="trait" href="opendal/raw/trait.Access.html" title="trait opendal::raw::Access">Access</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker [...]
\ No newline at end of file
diff --git a/docs/unftp-sbe-opendal/search-index.js b/docs/unftp-sbe-opendal/search-index.js
index d98a9b3c28..429a00bc03 100644
--- a/docs/unftp-sbe-opendal/search-index.js
+++ b/docs/unftp-sbe-opendal/search-index.js
@@ -1 +1 @@
-var searchIndex=new Map(JSON.parse('[["unftp_sbe_opendal",{"t":"FFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["OpendalMetadata","OpendalStorage","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cwd","del","deref","deref","deref_mut","deref_mut","drop","drop","eq","equivalent","equivalent","fmt","fmt","from","from","get","gid","init","init","into","into","is_dir","is_file","is_symlink","len","list","metadata","mkd","modified","new","put", [...]
\ No newline at end of file
+var searchIndex=new Map(JSON.parse('[["unftp_sbe_opendal",{"t":"FFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["OpendalMetadata","OpendalStorage","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cwd","del","deref","deref","deref_mut","deref_mut","drop","drop","eq","equivalent","equivalent","fmt","fmt","from","from","get","gid","init","init","into","into","is_dir","is_file","is_symlink","len","list","metadata","mkd","modified","new","put", [...]
\ No newline at end of file
diff --git a/docs/unftp-sbe-opendal/search.desc/unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js b/docs/unftp-sbe-opendal/search.desc/unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js
index 06be41595f..cc7d891638 100644
--- a/docs/unftp-sbe-opendal/search.desc/unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js
+++ b/docs/unftp-sbe-opendal/search.desc/unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("unftp_sbe_opendal",0,"<code>unftp-sbe-opendal</code> is an unftp <code>StorageBackend</code> \u2026\nA wrapper around <code>opendal::Metadata</code> to implement \u2026\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls <code>U::from(self)</code>.\nCalls <code>U::from(self)</code>.");
\ No newline at end of file
+searchState.loadedDescShard("unftp_sbe_opendal",0,"A wrapper around <code>opendal::Metadata</code> to implement \u2026\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls <code>U::from(self)</code>.\nCalls <code>U::from(self)</code>.");
\ No newline at end of file
diff --git a/docs/unftp-sbe-opendal/src/unftp_sbe_opendal/lib.rs.html b/docs/unftp-sbe-opendal/src/unftp_sbe_opendal/lib.rs.html
index 715f1a4f97..e91e4567ec 100644
--- a/docs/unftp-sbe-opendal/src/unftp_sbe_opendal/lib.rs.html
+++ b/docs/unftp-sbe-opendal/src/unftp_sbe_opendal/lib.rs.html
@@ -215,49 +215,6 @@
<a href="#215" id="215">215</a>
<a href="#216" id="216">216</a>
<a href="#217" id="217">217</a>
-<a href="#218" id="218">218</a>
-<a href="#219" id="219">219</a>
-<a href="#220" id="220">220</a>
-<a href="#221" id="221">221</a>
-<a href="#222" id="222">222</a>
-<a href="#223" id="223">223</a>
-<a href="#224" id="224">224</a>
-<a href="#225" id="225">225</a>
-<a href="#226" id="226">226</a>
-<a href="#227" id="227">227</a>
-<a href="#228" id="228">228</a>
-<a href="#229" id="229">229</a>
-<a href="#230" id="230">230</a>
-<a href="#231" id="231">231</a>
-<a href="#232" id="232">232</a>
-<a href="#233" id="233">233</a>
-<a href="#234" id="234">234</a>
-<a href="#235" id="235">235</a>
-<a href="#236" id="236">236</a>
-<a href="#237" id="237">237</a>
-<a href="#238" id="238">238</a>
-<a href="#239" id="239">239</a>
-<a href="#240" id="240">240</a>
-<a href="#241" id="241">241</a>
-<a href="#242" id="242">242</a>
-<a href="#243" id="243">243</a>
-<a href="#244" id="244">244</a>
-<a href="#245" id="245">245</a>
-<a href="#246" id="246">246</a>
-<a href="#247" id="247">247</a>
-<a href="#248" id="248">248</a>
-<a href="#249" id="249">249</a>
-<a href="#250" id="250">250</a>
-<a href="#251" id="251">251</a>
-<a href="#252" id="252">252</a>
-<a href="#253" id="253">253</a>
-<a href="#254" id="254">254</a>
-<a href="#255" id="255">255</a>
-<a href="#256" id="256">256</a>
-<a href="#257" id="257">257</a>
-<a href="#258" id="258">258</a>
-<a href="#259" id="259">259</a>
-<a href="#260" id="260">260</a>
</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
@@ -275,49 +232,6 @@
// specific language governing permissions and limitations
// under the License.
-</span><span class="doccomment">//! `unftp-sbe-opendal` is an [unftp](https://crates.io/crates/unftp) `StorageBackend` implementation using opendal.
-//!
-//! This crate can help you to access ANY storage services with the same ftp API.
-//!
-//! # Example
-//!
-//! This example demonstrates how to use `unftp-sbe-opendal` with the `S3` service.
-//!
-//! ```no_run
-//! use anyhow::Result;
-//! use opendal::Operator;
-//! use opendal::Scheme;
-//! use opendal::services;
-//! use unftp_sbe_opendal::OpendalStorage;
-//!
-//! #[tokio::main]
-//! async fn main() -> Result<()> {
-//! // Create any service desired
-//! let op = opendal::Operator::from_map::<services::S3>(
-//! [
-//! ("bucket".to_string(), "my_bucket".to_string()),
-//! ("access_key".to_string(), "my_access_key".to_string()),
-//! ("secret_key".to_string(), "my_secret_key".to_string()),
-//! ("endpoint".to_string(), "my_endpoint".to_string()),
-//! ("region".to_string(), "my_region".to_string()),
-//! ]
-//! .into_iter()
-//! .collect(),
-//! )?.finish();
-//!
-//! // Wrap the operator with `OpendalStorage`
-//! let backend = OpendalStorage::new(op);
-//!
-//! // Build the actual unftp server
-//! let server = libunftp::ServerBuilder::new(Box::new(move || backend.clone())).build()?;
-//!
-//! // Start the server
-//! server.listen("0.0.0.0:0").await?;
-//!
-//! Ok(())
-//! }
-//! ```
-
</span><span class="kw">use </span>std::fmt::Debug;
<span class="kw">use </span>std::path::{Path, PathBuf};
diff --git a/docs/unftp-sbe-opendal/unftp_sbe_opendal/index.html b/docs/unftp-sbe-opendal/unftp_sbe_opendal/index.html
index ec3b758d26..6bbac95e69 100644
--- a/docs/unftp-sbe-opendal/unftp_sbe_opendal/index.html
+++ b/docs/unftp-sbe-opendal/unftp_sbe_opendal/index.html
@@ -1,38 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`unftp-sbe-opendal` is an unftp `StorageBackend` implementation using opendal."><title>unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf084 [...]
-<p>This crate can help you to access ANY storage services with the same ftp API.</p>
-<h2 id="example"><a class="doc-anchor" href="#example">§</a>Example</h2>
-<p>This example demonstrates how to use <code>unftp-sbe-opendal</code> with the <code>S3</code> service.</p>
-
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>opendal::Operator;
-<span class="kw">use </span>opendal::Scheme;
-<span class="kw">use </span>opendal::services;
-<span class="kw">use </span>unftp_sbe_opendal::OpendalStorage;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -> <span class="prelude-ty">Result</span><()> {
- <span class="comment">// Create any service desired
- </span><span class="kw">let </span>op = opendal::Operator::from_map::<services::S3>(
- [
- (<span class="string">"bucket"</span>.to_string(), <span class="string">"my_bucket"</span>.to_string()),
- (<span class="string">"access_key"</span>.to_string(), <span class="string">"my_access_key"</span>.to_string()),
- (<span class="string">"secret_key"</span>.to_string(), <span class="string">"my_secret_key"</span>.to_string()),
- (<span class="string">"endpoint"</span>.to_string(), <span class="string">"my_endpoint"</span>.to_string()),
- (<span class="string">"region"</span>.to_string(), <span class="string">"my_region"</span>.to_string()),
- ]
- .into_iter()
- .collect(),
- )<span class="question-mark">?</span>.finish();
-
- <span class="comment">// Wrap the operator with `OpendalStorage`
- </span><span class="kw">let </span>backend = OpendalStorage::new(op);
-
- <span class="comment">// Build the actual unftp server
- </span><span class="kw">let </span>server = libunftp::ServerBuilder::new(Box::new(<span class="kw">move </span>|| backend.clone())).build()<span class="question-mark">?</span>;
-
- <span class="comment">// Start the server
- </span>server.listen(<span class="string">"0.0.0.0:0"</span>).<span class="kw">await</span><span class="question-mark">?</span>;
-
- <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.OpendalMetadata.html" title="struct unftp_sbe_opendal::OpendalMetadata">OpendalMetadata</a></div><div class="desc docblock-short">A wrapper around [<code>opendal::Metadata</code>] to implement <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.Metadata.html" title="trait lib [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `unftp_sbe_opendal` crate."><title>unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-M [...]
\ No newline at end of file
diff --git a/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalMetadata.html b/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalMetadata.html
index bf2e5352e5..8ac184b845 100644
--- a/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalMetadata.html
+++ b/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalMetadata.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A wrapper around `opendal::Metadata` to implement `libunftp::storage::Metadata`."><title>OpendalMetadata in unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#82">source</a><a href="#impl-Clone-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
-and defaults to “rwxr-xr-x” (octal 7755)</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#82">source</a><a href="#impl-PartialEq-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq"> [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A wrapper around `opendal::Metadata` to implement `libunftp::storage::Metadata`."><title>OpendalMetadata in unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#39">source</a><a href="#impl-Clone-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
+and defaults to “rwxr-xr-x” (octal 7755)</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#39">source</a><a href="#impl-PartialEq-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq"> [...]
by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#82">source</a><a href="#impl-Eq-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.OpendalMetadata.ht [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-OpendalMetadata" class="impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#39">source</a><a href="#impl-Eq-for-OpendalMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.OpendalMetadata.ht [...]
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: 'a,</div></h3></section></summary><div class="impl-items"><section id="method.explicit" class="method trait-impl"><a href="#method.explicit" class="anchor">§</a><h4 class="code-header">fn <a class="fn">explicit</a>(self, class: Class, tag: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> TaggedParser<'a, Explicit, Self, E></h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-As [...]
T: 'a,</div></h3></section></summary><div class="impl-items"><section id="method.implicit" class="method trait-impl"><a href="#method.implicit" class="anchor">§</a><h4 class="code-header">fn <a class="fn">implicit</a>(
diff --git a/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalStorage.html b/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalStorage.html
index 37d7ec4edc..e4e412f7b3 100644
--- a/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalStorage.html
+++ b/docs/unftp-sbe-opendal/unftp_sbe_opendal/struct.OpendalStorage.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `OpendalStorage` struct in crate `unftp_sbe_opendal`."><title>OpendalStorage in unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraS [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `OpendalStorage` struct in crate `unftp_sbe_opendal`."><title>OpendalStorage in unftp_sbe_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraS [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -6,7 +6,7 @@
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Returns the <code>Metadata</code> for the given file.</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#153-176">source</a><a href="#method.list" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.Stor [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Returns the <code>Metadata</code> for the given file.</div></details><details class="toggle method-toggle" open><summary><section id="method.list" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#110-133">source</a><a href="#method.list" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.Stor [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -15,7 +15,7 @@
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Returns the list of files in the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#178-194">source</a><a href="#method.get" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBac [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Returns the list of files in the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#135-151">source</a><a href="#method.get" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBac [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -27,7 +27,7 @@
'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Returns the content of the given file from offset start_pos.
The starting position will only be greater than zero if the storage back-end implementation
advertises to support partial reads through the supported_features method i.e. the result
-from supported_features yield 1 if a logical and operation is applied with FEATURE_RESTART.</div></details><details class="toggle method-toggle" open><summary><section id="method.put" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#196-215">source</a><a href="#method.put" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymethod.put" class="fn">p [...]
+from supported_features yield 1 if a logical and operation is applied with FEATURE_RESTART.</div></details><details class="toggle method-toggle" open><summary><section id="method.put" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#153-172">source</a><a href="#method.put" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymethod.put" class="fn">p [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
input: R,
@@ -38,7 +38,7 @@ from supported_features yield 1 if a logical and operation is applied with FEATU
R: 'async_trait + AsyncRead + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + 'static,
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Writes bytes from the given reader to the specified path starting at offset start_pos in the file</div></details><details class="toggle method-toggle" open><summary><section id="method.del" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#217-222">source</a><a href="#method.del" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/l [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Writes bytes from the given reader to the specified path starting at offset start_pos in the file</div></details><details class="toggle method-toggle" open><summary><section id="method.del" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#174-179">source</a><a href="#method.del" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/l [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -46,7 +46,7 @@ from supported_features yield 1 if a logical and operation is applied with FEATU
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Deletes the file at the given path.</div></details><details class="toggle method-toggle" open><summary><section id="method.mkd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#224-229">source</a><a href="#method.mkd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tyme [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Deletes the file at the given path.</div></details><details class="toggle method-toggle" open><summary><section id="method.mkd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#181-186">source</a><a href="#method.mkd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tyme [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -54,7 +54,7 @@ from supported_features yield 1 if a logical and operation is applied with FEATU
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Creates the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#231-239">source</a><a href="#method.rename" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymet [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Creates the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.rename" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#188-196">source</a><a href="#method.rename" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymet [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
from: P,
@@ -63,7 +63,7 @@ from supported_features yield 1 if a logical and operation is applied with FEATU
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Renames the given file to the given new filename.</div></details><details class="toggle method-toggle" open><summary><section id="method.rmd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#241-246">source</a><a href="#method.rmd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBac [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Renames the given file to the given new filename.</div></details><details class="toggle method-toggle" open><summary><section id="method.rmd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#198-203">source</a><a href="#method.rmd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBac [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
@@ -71,7 +71,7 @@ from supported_features yield 1 if a logical and operation is applied with FEATU
P: 'async_trait + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.D [...]
Self: 'async_trait,
'life0: 'async_trait,
- 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Deletes the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.cwd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#248-259">source</a><a href="#method.cwd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymethod.cw [...]
+ 'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Deletes the given directory.</div></details><details class="toggle method-toggle" open><summary><section id="method.cwd" class="method trait-impl"><a class="src rightside" href="../src/unftp_sbe_opendal/lib.rs.html#205-216">source</a><a href="#method.cwd" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/libunftp/0.20.1/libunftp/storage/storage_backend/trait.StorageBackend.html#tymethod.cw [...]
&'life0 self,
_: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'life1 User</a>,
path: P,
diff --git a/download/index.html b/download/index.html
index f747017ac2..65f1fafe65 100644
--- a/download/index.html
+++ b/download/index.html
@@ -6,14 +6,14 @@
<title data-rh="true">Apache OpenDAL™ Downloads | 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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
<p>The official Apache OpenDAL releases are provided as source artifacts.</p>
<h2 class="anchor anchorWithStickyNavbar_Ey9h" id="releases">Releases<a class="hash-link" aria-label="Direct link to Releases" title="Direct link to Releases" href="/download#releases"></a></h2>
<!-- -->
-<p>The latest source release is <a href="https://www.apache.org/dyn/closer.lua/opendal/0.47.1/apache-opendal-core-0.47.1-src.tar.gz?action=download" target="_blank" rel="noopener noreferrer">0.47.1</a> (<a href="https://downloads.apache.org/opendal/0.47.1/apache-opendal-core-0.47.1-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">asc</a>, <a href="https://downloads.apache.org/opendal/0.47.1/apache-opendal-core-0.47.1-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">s [...]
+<p>The latest source release is <a href="https://www.apache.org/dyn/closer.lua/opendal/0.47.2/apache-opendal-core-0.47.2-src.tar.gz?action=download" target="_blank" rel="noopener noreferrer">0.47.2</a> (<a href="https://downloads.apache.org/opendal/0.47.2/apache-opendal-core-0.47.2-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">asc</a>, <a href="https://downloads.apache.org/opendal/0.47.2/apache-opendal-core-0.47.2-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">s [...]
<p>For older releases, please check the <a href="https://archive.apache.org/dist/opendal/" target="_blank" rel="noopener noreferrer">archive</a>.</p>
<p>For even older releases during the incubating phase, please check the <a href="https://archive.apache.org/dist/incubator/opendal/" target="_blank" rel="noopener noreferrer">incubator archive</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_Ey9h" id="notes">Notes<a class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes" href="/download#notes"></a></h2>
diff --git a/index.html b/index.html
index 11407afe0b..917ef43447 100644
--- a/index.html
+++ b/index.html
@@ -6,7 +6,7 @@
<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" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b86df8bd.css">
<script src="/assets/js/runtime~main.c0639086.js" defer="defer"></script>
-<script src="/assets/js/main.0d9f5821.js" defer="defer"></script>
+<script src="/assets/js/main.20117305.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentEle [...]
diff --git a/lunr-index-1719919260560.json b/lunr-index-1719919260560.json
deleted file mode 100644
index d1976d3209..0000000000
--- a/lunr-index-1719919260560.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,143.804,1,53.06,2,331.624,3,231.541,4,226.638,5,400.215,6,299.023,7,345.123]],["content/0",[0,1.271,1,1.256,2,7.852,3,5.895,4,5.77,5,8.577,6,5.533,7,7.396,8,3.051,9,3.347,10,4.098,11,2.19,12,3.778,13,4.819,14,5.501,15,4.063,16,10.189,17,3.187,18,4.098,19,5.501,20,4.098,21,3.051,22,3.347,23,1.126,24,2.422,25,2.359,26,5.239,27,3.347,28,5.239,29,4.585,30,7.08,31,4.585,32,4.585,33,3.778,34,3.538,35,3.778 [...]
\ No newline at end of file
diff --git a/lunr-index-1719977199931.json b/lunr-index-1719977199931.json
new file mode 100644
index 0000000000..47760a06fe
--- /dev/null
+++ b/lunr-index-1719977199931.json
@@ -0,0 +1 @@
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,218.108,1,80.477,2,384.852,3,484.782]],["content/0",[]],["keywords/0",[]],["title/1",[0,250.462,1,92.415,4,697.052]],["content/1",[0,1.48,1,1.359,5,5.597,6,3.836,7,2.676,8,2.899,9,1.652,10,3.289,11,3.412,12,4.118,13,2.549,14,7.796,15,4.606,16,3.077,17,2.332,18,3.71,19,3.551,20,2.613,21,3.551,22,6.221,23,3.077,24,2.491,25,4.118,26,5.925,27,4.77,28,5.337,29,5.337,30,5.337,31,2.069,32,5.337,33,8.524,34, [...]
\ No newline at end of file
diff --git a/lunr-index.json b/lunr-index.json
index d1976d3209..47760a06fe 100644
--- a/lunr-index.json
+++ b/lunr-index.json
@@ -1 +1 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,143.804,1,53.06,2,331.624,3,231.541,4,226.638,5,400.215,6,299.023,7,345.123]],["content/0",[0,1.271,1,1.256,2,7.852,3,5.895,4,5.77,5,8.577,6,5.533,7,7.396,8,3.051,9,3.347,10,4.098,11,2.19,12,3.778,13,4.819,14,5.501,15,4.063,16,10.189,17,3.187,18,4.098,19,5.501,20,4.098,21,3.051,22,3.347,23,1.126,24,2.422,25,2.359,26,5.239,27,3.347,28,5.239,29,4.585,30,7.08,31,4.585,32,4.585,33,3.778,34,3.538,35,3.778 [...]
\ No newline at end of file
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,218.108,1,80.477,2,384.852,3,484.782]],["content/0",[]],["keywords/0",[]],["title/1",[0,250.462,1,92.415,4,697.052]],["content/1",[0,1.48,1,1.359,5,5.597,6,3.836,7,2.676,8,2.899,9,1.652,10,3.289,11,3.412,12,4.118,13,2.549,14,7.796,15,4.606,16,3.077,17,2.332,18,3.71,19,3.551,20,2.613,21,3.551,22,6.221,23,3.077,24,2.491,25,4.118,26,5.925,27,4.77,28,5.337,29,5.337,30,5.337,31,2.069,32,5.337,33,8.524,34, [...]
\ No newline at end of file
diff --git a/search-doc-1719919260560.json b/search-doc-1719919260560.json
deleted file mode 100644
index 912b6ea7e9..0000000000
--- a/search-doc-1719919260560.json
+++ /dev/null
@@ -1 +0,0 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ participates in Open Source Promotion Plan 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-ospp-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Open Source Promotion Plan (OSPP) 2024. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some u [...]
\ No newline at end of file
diff --git a/search-doc-1719977199931.json b/search-doc-1719977199931.json
new file mode 100644
index 0000000000..f6477721bf
--- /dev/null
+++ b/search-doc-1719977199931.json
@@ -0,0 +1 @@
+{"searchDocs":[{"title":"Apache OpenDAL™ is now Graduated","type":0,"sectionRef":"#","url":"/blog/apache-opendal-graduated","content":"","keywords":"","version":null},{"title":"What's Apache OpenDAL?","type":1,"pageTitle":"Apache OpenDAL™ is now Graduated","url":"/blog/apache-opendal-graduated#whats-apache-opendal","content":" Apache OpenDAL is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is acce [...]
\ No newline at end of file
diff --git a/search-doc.json b/search-doc.json
index 912b6ea7e9..f6477721bf 100644
--- a/search-doc.json
+++ b/search-doc.json
@@ -1 +1 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ participates in Open Source Promotion Plan 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-ospp-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Open Source Promotion Plan (OSPP) 2024. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some u [...]
\ No newline at end of file
+{"searchDocs":[{"title":"Apache OpenDAL™ is now Graduated","type":0,"sectionRef":"#","url":"/blog/apache-opendal-graduated","content":"","keywords":"","version":null},{"title":"What's Apache OpenDAL?","type":1,"pageTitle":"Apache OpenDAL™ is now Graduated","url":"/blog/apache-opendal-graduated#whats-apache-opendal","content":" Apache OpenDAL is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is acce [...]
\ No newline at end of file