Files
greptimedb/object_store/services/struct.S3.html
2025-12-23 10:07:07 +00:00

699 lines
140 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="Aws S3 and compatible services (including minio, digitalocean space, Tencent Cloud Object Storage(COS) and so on) support. For more information about s3-compatible services, refer to Compatible Services."><title>S3 in object_store::services - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="object_store" data-themes="" data-resource-suffix="" data-rustdoc-version="1.92.0-nightly (fa3155a64 2025-09-30)" data-channel="nightly" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-828709d0.js" data-settings-js="settings-c38705f0.js" ><script src="../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-ce535bd0.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-263c88ec.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-044be391.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">S3</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../object_store/index.html">object_<wbr>store</a><span class="version">1.0.0-beta.3</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">S3</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#capabilities" title="Capabilities">Capabilities</a></li><li><a href="#configuration" title="Configuration">Configuration</a></li><li><a href="#temporary-security-credentials" title="Temporary security credentials">Temporary security credentials</a></li><li><a href="#server-side-encryption" title="Server Side Encryption">Server Side Encryption</a></li><li><a href="#example" title="Example">Example</a></li><li><a href="#via-builder" title="Via Builder">Via Builder</a><ul><li><a href="#basic-setup" title="Basic Setup">Basic Setup</a></li><li><a href="#s3-with-sse-c" title="S3 with SSE-C">S3 with SSE-C</a></li><li><a href="#s3-with-sse-kms-and-aws-managed-kms-key" title="S3 with SSE-KMS and aws managed kms key">S3 with SSE-KMS and aws managed kms key</a></li><li><a href="#s3-with-sse-kms-and-customer-managed-kms-key" title="S3 with SSE-KMS and customer managed kms key">S3 with SSE-KMS and customer managed kms key</a></li><li><a href="#s3-with-sse-s3" title="S3 with SSE-S3">S3 with SSE-S3</a></li></ul></li><li><a href="#compatible-services" title="Compatible Services">Compatible Services</a><ul><li><a href="#aws-s3" title="AWS S3">AWS S3</a></li><li><a href="#alibaba-object-storage-service-oss" title="Alibaba Object Storage Service (OSS)">Alibaba Object Storage Service (OSS)</a></li><li><a href="#minio" title="Minio">Minio</a></li><li><a href="#qingstor-object-storage" title="QingStor Object Storage">QingStor Object Storage</a></li><li><a href="#scaleway-object-storage" title="Scaleway Object Storage">Scaleway Object Storage</a></li><li><a href="#tencent-cloud-object-storage-cos" title="Tencent Cloud Object Storage (COS)">Tencent Cloud Object Storage (COS)</a></li><li><a href="#wasabi-object-storage" title="Wasabi Object Storage">Wasabi Object Storage</a></li><li><a href="#cloudflare-r2" title="Cloudflare R2">Cloudflare R2</a></li><li><a href="#google-cloud-storage-xml-api" title="Google Cloud Storage XML API">Google Cloud Storage XML API</a></li><li><a href="#ceph-rados-gateway" title="Ceph Rados Gateway">Ceph Rados Gateway</a></li></ul></li></ul><h3><a href="#fields">Fields</a></h3><ul class="block structfield"><li><a href="#structfield.config" title="config">config</a></li><li><a href="#structfield.customized_credential_load" title="customized_credential_load">customized_credential_load</a></li><li><a href="#structfield.http_client" title="http_client">http_client</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.access_key_id" title="access_key_id">access_key_id</a></li><li><a href="#method.allow_anonymous" title="allow_anonymous">allow_anonymous</a></li><li><a href="#method.batch_max_operations" title="batch_max_operations">batch_max_operations</a></li><li><a href="#method.bucket" title="bucket">bucket</a></li><li><a href="#method.checksum_algorithm" title="checksum_algorithm">checksum_algorithm</a></li><li><a href="#method.customized_credential_load" title="customized_credential_load">customized_credential_load</a></li><li><a href="#method.default_storage_class" title="default_storage_class">default_storage_class</a></li><li><a href="#method.delete_max_size" title="delete_max_size">delete_max_size</a></li><li><a href="#method.detect_region" title="detect_region">detect_region</a></li><li><a href="#method.disable_config_load" title="disable_config_load">disable_config_load</a></li><li><a href="#method.disable_ec2_metadata" title="disable_ec2_metadata">disable_ec2_metadata</a></li><li><a href="#method.disable_list_objects_v2" title="disable_list_objects_v2">disable_list_objects_v2</a></li><li><a href="#method.disable_stat_with_override" title="disable_stat_with_override">disable_stat_with_override</a></li><li><a href="#method.disable_write_with_if_match" title="disable_write_with_if_match">disable_write_with_if_match</a></li><li><a href="#method.enable_request_payer" title="enable_request_payer">enable_request_payer</a></li><li><a href="#method.enable_versioning" title="enable_versioning">enable_versioning</a></li><li><a href="#method.enable_virtual_host_style" title="enable_virtual_host_style">enable_virtual_host_style</a></li><li><a href="#method.enable_write_with_append" title="enable_write_with_append">enable_write_with_append</a></li><li><a href="#method.endpoint" title="endpoint">endpoint</a></li><li><a href="#method.external_id" title="external_id">external_id</a></li><li><a href="#method.http_client" title="http_client">http_client</a></li><li><a href="#method.region" title="region">region</a></li><li><a href="#method.role_arn" title="role_arn">role_arn</a></li><li><a href="#method.role_session_name" title="role_session_name">role_session_name</a></li><li><a href="#method.root" title="root">root</a></li><li><a href="#method.secret_access_key" title="secret_access_key">secret_access_key</a></li><li><a href="#method.security_token" title="security_token">security_token</a></li><li><a href="#method.server_side_encryption" title="server_side_encryption">server_side_encryption</a></li><li><a href="#method.server_side_encryption_aws_kms_key_id" title="server_side_encryption_aws_kms_key_id">server_side_encryption_aws_kms_key_id</a></li><li><a href="#method.server_side_encryption_customer_algorithm" title="server_side_encryption_customer_algorithm">server_side_encryption_customer_algorithm</a></li><li><a href="#method.server_side_encryption_customer_key" title="server_side_encryption_customer_key">server_side_encryption_customer_key</a></li><li><a href="#method.server_side_encryption_customer_key_md5" title="server_side_encryption_customer_key_md5">server_side_encryption_customer_key_md5</a></li><li><a href="#method.server_side_encryption_with_aws_managed_kms_key" title="server_side_encryption_with_aws_managed_kms_key">server_side_encryption_with_aws_managed_kms_key</a></li><li><a href="#method.server_side_encryption_with_customer_key" title="server_side_encryption_with_customer_key">server_side_encryption_with_customer_key</a></li><li><a href="#method.server_side_encryption_with_customer_managed_kms_key" title="server_side_encryption_with_customer_managed_kms_key">server_side_encryption_with_customer_managed_kms_key</a></li><li><a href="#method.server_side_encryption_with_s3_key" title="server_side_encryption_with_s3_key">server_side_encryption_with_s3_key</a></li><li><a href="#method.session_token" title="session_token">session_token</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-Builder-for-S3" title="Builder">Builder</a></li><li><a href="#impl-Debug-for-S3" title="Debug">Debug</a></li><li><a href="#impl-Default-for-S3" title="Default">Default</a></li><li><a href="#impl-From%3C%26S3Connection%3E-for-S3" title="From&#60;&#38;S3Connection&#62;">From&#60;&#38;S3Connection&#62;</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-RefUnwindSafe-for-S3" title="!RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-UnwindSafe-for-S3" title="!UnwindSafe">!UnwindSafe</a></li><li><a href="#impl-Freeze-for-S3" title="Freeze">Freeze</a></li><li><a href="#impl-Send-for-S3" title="Send">Send</a></li><li><a href="#impl-Sync-for-S3" title="Sync">Sync</a></li><li><a href="#impl-Unpin-for-S3" title="Unpin">Unpin</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T" title="Any">Any</a></li><li><a href="#impl-Any-for-T-1" title="Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T" title="Borrow&#60;T&#62;">Borrow&#60;T&#62;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T" title="BorrowMut&#60;T&#62;">BorrowMut&#60;T&#62;</a></li><li><a href="#impl-Conv-for-T" title="Conv">Conv</a></li><li><a href="#impl-ErasedDestructor-for-T" title="ErasedDestructor">ErasedDestructor</a></li><li><a href="#impl-FmtForward-for-T" title="FmtForward">FmtForward</a></li><li><a href="#impl-From%3CT%3E-for-T" title="From&#60;T&#62;">From&#60;T&#62;</a></li><li><a href="#impl-FutureExt-for-T" title="FutureExt">FutureExt</a></li><li><a href="#impl-Instrument-for-T" title="Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E-for-T" title="Into&#60;U&#62;">Into&#60;U&#62;</a></li><li><a href="#impl-IntoRequest%3CT%3E-for-T" title="IntoRequest&#60;T&#62;">IntoRequest&#60;T&#62;</a></li><li><a href="#impl-LayerExt%3CL%3E-for-L" title="LayerExt&#60;L&#62;">LayerExt&#60;L&#62;</a></li><li><a href="#impl-MaybeSend-for-T" title="MaybeSend">MaybeSend</a></li><li><a href="#impl-Pipe-for-T" title="Pipe">Pipe</a></li><li><a href="#impl-PolicyExt-for-T" title="PolicyExt">PolicyExt</a></li><li><a href="#impl-Same-for-T" title="Same">Same</a></li><li><a href="#impl-ServiceExt-for-T" title="ServiceExt">ServiceExt</a></li><li><a href="#impl-Tap-for-T" title="Tap">Tap</a></li><li><a href="#impl-TryConv-for-T" title="TryConv">TryConv</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T" title="TryFrom&#60;U&#62;">TryFrom&#60;U&#62;</a></li><li><a href="#impl-TryInto%3CU%3E-for-T" title="TryInto&#60;U&#62;">TryInto&#60;U&#62;</a></li><li><a href="#impl-VZip%3CV%3E-for-T" title="VZip&#60;V&#62;">VZip&#60;V&#62;</a></li><li><a href="#impl-WithSubscriber-for-T" title="WithSubscriber">WithSubscriber</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In object_<wbr>store::<wbr>services</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../index.html">object_store</a>::<wbr><a href="index.html">services</a></div><h1>Struct <span class="struct">S3</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"></span></div><pre class="rust item-decl"><code>pub struct S3 {
config: <a class="struct" href="struct.S3Config.html" title="struct object_store::services::S3Config">S3Config</a>,
customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn CredentialLoad&gt;&gt;,
http_client: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="../struct.HttpClient.html" title="struct object_store::HttpClient">HttpClient</a>&gt;,
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Aws S3 and compatible services (including minio, digitalocean space, Tencent Cloud Object Storage(COS) and so on) support.
For more information about s3-compatible services, refer to <a href="#compatible-services">Compatible Services</a>.</p>
<h3 id="capabilities"><a class="doc-anchor" href="#capabilities">§</a>Capabilities</h3>
<p>This service can be used to:</p>
<ul>
<li><input disabled="" type="checkbox" checked=""/>
stat</li>
<li><input disabled="" type="checkbox" checked=""/>
read</li>
<li><input disabled="" type="checkbox" checked=""/>
write</li>
<li><input disabled="" type="checkbox" checked=""/>
append</li>
<li><input disabled="" type="checkbox" checked=""/>
create_dir</li>
<li><input disabled="" type="checkbox" checked=""/>
delete</li>
<li><input disabled="" type="checkbox" checked=""/>
copy</li>
<li><input disabled="" type="checkbox"/>
rename</li>
<li><input disabled="" type="checkbox" checked=""/>
list</li>
<li><input disabled="" type="checkbox" checked=""/>
presign</li>
<li><input disabled="" type="checkbox"/>
blocking</li>
</ul>
<h3 id="configuration"><a class="doc-anchor" href="#configuration">§</a>Configuration</h3>
<ul>
<li><code>root</code>: Set the work dir for backend.</li>
<li><code>bucket</code>: Set the container name for backend.</li>
<li><code>endpoint</code>: Set the endpoint for backend.</li>
<li><code>region</code>: Set the region for backend.</li>
<li><code>access_key_id</code>: Set the access_key_id for backend.</li>
<li><code>secret_access_key</code>: Set the secret_access_key for backend.</li>
<li><code>session_token</code>: Set the session_token for backend.</li>
<li><code>default_storage_class</code>: Set the default storage_class for backend.</li>
<li><code>server_side_encryption</code>: Set the server_side_encryption for backend.</li>
<li><code>server_side_encryption_aws_kms_key_id</code>: Set the server_side_encryption_aws_kms_key_id for backend.</li>
<li><code>server_side_encryption_customer_algorithm</code>: Set the server_side_encryption_customer_algorithm for backend.</li>
<li><code>server_side_encryption_customer_key</code>: Set the server_side_encryption_customer_key for backend.</li>
<li><code>server_side_encryption_customer_key_md5</code>: Set the server_side_encryption_customer_key_md5 for backend.</li>
<li><code>disable_config_load</code>: Disable aws config load from env.</li>
<li><code>enable_virtual_host_style</code>: Enable virtual host style.</li>
<li><code>disable_write_with_if_match</code>: Disable write with if match.</li>
<li><code>enable_request_payer</code>: Enable the request payer for backend.</li>
</ul>
<p>Refer to <a href="struct.S3.html" title="struct object_store::services::S3"><code>S3Builder</code></a>s public API docs for more information.</p>
<h3 id="temporary-security-credentials"><a class="doc-anchor" href="#temporary-security-credentials">§</a>Temporary security credentials</h3>
<p>OpenDAL now provides support for S3 temporary security credentials in IAM.</p>
<p>The way to take advantage of this feature is to build your S3 backend with <code>Builder::session_token</code>.</p>
<p>But OpenDAL will not refresh the temporary security credentials, please keep in mind to refresh those credentials in time.</p>
<h3 id="server-side-encryption"><a class="doc-anchor" href="#server-side-encryption">§</a>Server Side Encryption</h3>
<p>OpenDAL provides full support of S3 Server Side Encryption(SSE) features.</p>
<p>The easiest way to configure them is to use helper functions like</p>
<ul>
<li>SSE-KMS: <code>server_side_encryption_with_aws_managed_kms_key</code></li>
<li>SSE-KMS: <code>server_side_encryption_with_customer_managed_kms_key</code></li>
<li>SSE-S3: <code>server_side_encryption_with_s3_key</code></li>
<li>SSE-C: <code>server_side_encryption_with_customer_key</code></li>
</ul>
<p>If those functions dont fulfill need, low-level options are also provided:</p>
<ul>
<li>Use service managed kms key
<ul>
<li><code>server_side_encryption="aws:kms"</code></li>
</ul>
</li>
<li>Use customer provided kms key
<ul>
<li><code>server_side_encryption="aws:kms"</code></li>
<li><code>server_side_encryption_aws_kms_key_id="your-kms-key"</code></li>
</ul>
</li>
<li>Use S3 managed key
<ul>
<li><code>server_side_encryption="AES256"</code></li>
</ul>
</li>
<li>Use customer key
<ul>
<li><code>server_side_encryption_customer_algorithm="AES256"</code></li>
<li><code>server_side_encryption_customer_key="base64-of-your-aes256-key"</code></li>
<li><code>server_side_encryption_customer_key_md5="base64-of-your-aes256-key-md5"</code></li>
</ul>
</li>
</ul>
<p>After SSE have been configured, all requests send by this backed will attach those headers.</p>
<p>Reference: <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html">Protecting data using server-side encryption</a></p>
<h3 id="example"><a class="doc-anchor" href="#example">§</a>Example</h3><h3 id="via-builder"><a class="doc-anchor" href="#via-builder">§</a>Via Builder</h3><h4 id="basic-setup"><a class="doc-anchor" href="#basic-setup">§</a>Basic Setup</h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::Arc;
<span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>opendal::services::S3;
<span class="kw">use </span>opendal::Operator;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="comment">// Create s3 backend builder.
</span><span class="kw">let </span><span class="kw-2">mut </span>builder = S3::default()
<span class="comment">// Set the root for s3, all operations will happen under this root.
//
// NOTE: the root must be absolute path.
</span>.root(<span class="string">"/path/to/dir"</span>)
<span class="comment">// Set the bucket name. This is required.
</span>.bucket(<span class="string">"test"</span>)
<span class="comment">// Set the region. This is required for some services, if you don't care about it, for example Minio service, just set it to "auto", it will be ignored.
</span>.region(<span class="string">"us-east-1"</span>)
<span class="comment">// Set the endpoint.
//
// For examples:
// - "https://s3.amazonaws.com"
// - "http://127.0.0.1:9000"
// - "https://oss-ap-northeast-1.aliyuncs.com"
// - "https://cos.ap-seoul.myqcloud.com"
//
// Default to "https://s3.amazonaws.com"
</span>.endpoint(<span class="string">"https://s3.amazonaws.com"</span>)
<span class="comment">// Set the access_key_id and secret_access_key.
//
// OpenDAL will try load credential from the env.
// If credential not set and no valid credential in env, OpenDAL will
// send request without signing like anonymous user.
</span>.access_key_id(<span class="string">"access_key_id"</span>)
.secret_access_key(<span class="string">"secret_access_key"</span>);
<span class="kw">let </span>op: Operator = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="prelude-val">Ok</span>(())
}
</code></pre></div><h4 id="s3-with-sse-c"><a class="doc-anchor" href="#s3-with-sse-c">§</a>S3 with SSE-C</h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>log::info;
<span class="kw">use </span>opendal::services::S3;
<span class="kw">use </span>opendal::Operator;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>builder = S3::default()
.root(<span class="string">"/path/to/dir"</span>)
.bucket(<span class="string">"test"</span>)
.region(<span class="string">"us-east-1"</span>)
.endpoint(<span class="string">"https://s3.amazonaws.com"</span>)
.access_key_id(<span class="string">"access_key_id"</span>)
.secret_access_key(<span class="string">"secret_access_key"</span>)
<span class="comment">// Enable SSE-C
</span>.server_side_encryption_with_customer_key(<span class="string">"AES256"</span>, <span class="string">"customer_key"</span>.as_bytes());
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="macro">info!</span>(<span class="string">"operator: {:?}"</span>, op);
<span class="comment">// Writing your testing code here.
</span><span class="prelude-val">Ok</span>(())
}</code></pre></div><h4 id="s3-with-sse-kms-and-aws-managed-kms-key"><a class="doc-anchor" href="#s3-with-sse-kms-and-aws-managed-kms-key">§</a>S3 with SSE-KMS and aws managed kms key</h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>log::info;
<span class="kw">use </span>opendal::services::S3;
<span class="kw">use </span>opendal::Operator;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>builder = S3::default()
<span class="comment">// Setup builders
</span>.root(<span class="string">"/path/to/dir"</span>)
.bucket(<span class="string">"test"</span>)
.region(<span class="string">"us-east-1"</span>)
.endpoint(<span class="string">"https://s3.amazonaws.com"</span>)
.access_key_id(<span class="string">"access_key_id"</span>)
.secret_access_key(<span class="string">"secret_access_key"</span>)
<span class="comment">// Enable SSE-KMS with aws managed kms key
</span>.server_side_encryption_with_aws_managed_kms_key();
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="macro">info!</span>(<span class="string">"operator: {:?}"</span>, op);
<span class="comment">// Writing your testing code here.
</span><span class="prelude-val">Ok</span>(())
}</code></pre></div><h4 id="s3-with-sse-kms-and-customer-managed-kms-key"><a class="doc-anchor" href="#s3-with-sse-kms-and-customer-managed-kms-key">§</a>S3 with SSE-KMS and customer managed kms key</h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>log::info;
<span class="kw">use </span>opendal::services::S3;
<span class="kw">use </span>opendal::Operator;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>builder = S3::default()
<span class="comment">// Setup builders
</span>.root(<span class="string">"/path/to/dir"</span>)
.bucket(<span class="string">"test"</span>)
.region(<span class="string">"us-east-1"</span>)
.endpoint(<span class="string">"https://s3.amazonaws.com"</span>)
.access_key_id(<span class="string">"access_key_id"</span>)
.secret_access_key(<span class="string">"secret_access_key"</span>)
<span class="comment">// Enable SSE-KMS with customer managed kms key
</span>.server_side_encryption_with_customer_managed_kms_key(<span class="string">"aws_kms_key_id"</span>);
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="macro">info!</span>(<span class="string">"operator: {:?}"</span>, op);
<span class="comment">// Writing your testing code here.
</span><span class="prelude-val">Ok</span>(())
}</code></pre></div><h4 id="s3-with-sse-s3"><a class="doc-anchor" href="#s3-with-sse-s3">§</a>S3 with SSE-S3</h4>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
<span class="kw">use </span>log::info;
<span class="kw">use </span>opendal::services::S3;
<span class="kw">use </span>opendal::Operator;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>builder = S3::default()
<span class="comment">// Setup builders
</span>.root(<span class="string">"/path/to/dir"</span>)
.bucket(<span class="string">"test"</span>)
.region(<span class="string">"us-east-1"</span>)
.endpoint(<span class="string">"https://s3.amazonaws.com"</span>)
.access_key_id(<span class="string">"access_key_id"</span>)
.secret_access_key(<span class="string">"secret_access_key"</span>)
<span class="comment">// Enable SSE-S3
</span>.server_side_encryption_with_s3_key();
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="macro">info!</span>(<span class="string">"operator: {:?}"</span>, op);
<span class="comment">// Writing your testing code here.
</span><span class="prelude-val">Ok</span>(())
}</code></pre></div><h3 id="compatible-services"><a class="doc-anchor" href="#compatible-services">§</a>Compatible Services</h3><h4 id="aws-s3"><a class="doc-anchor" href="#aws-s3">§</a>AWS S3</h4>
<p><a href="https://aws.amazon.com/s3/">AWS S3</a> is the default implementations of s3 services. Only <code>bucket</code> is required.</p>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code>builder.bucket(<span class="string">"&lt;bucket_name&gt;"</span>);</code></pre></div><h4 id="alibaba-object-storage-service-oss"><a class="doc-anchor" href="#alibaba-object-storage-service-oss">§</a>Alibaba Object Storage Service (OSS)</h4>
<p><a href="https://www.alibabacloud.com/product/object-storage-service">OSS</a> is a s3 compatible service provided by <a href="https://www.alibabacloud.com">Alibaba Cloud</a>.</p>
<p>To connect to OSS, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of oss, for example: <code>https://oss-cn-hangzhou.aliyuncs.com</code></li>
<li><code>bucket</code>: The bucket name of oss.</li>
</ul>
<blockquote>
<p>OSS provide internal endpoint for used at alibabacloud internally, please visit <a href="https://www.alibabacloud.com/help/en/object-storage-service/latest/regions-and-endpoints">OSS Regions and endpoints</a> for more details.</p>
</blockquote>
<blockquote>
<p>OSS only supports the virtual host style, users could meet errors like:</p>
<div class="example-wrap"><pre class="language-xml"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Error&gt;
&lt;Code&gt;SecondLevelDomainForbidden&lt;/Code&gt;
&lt;Message&gt;The bucket you are attempting to access must be addressed using OSS third level domain.&lt;/Message&gt;
&lt;RequestId&gt;62A1C265292C0632377F021F&lt;/RequestId&gt;
&lt;HostId&gt;oss-cn-hangzhou.aliyuncs.com&lt;/HostId&gt;
&lt;/Error&gt;</code></pre></div>
<p>In that case, please enable virtual host style for requesting.</p>
</blockquote>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code>builder.endpoint(<span class="string">"https://oss-cn-hangzhou.aliyuncs.com"</span>);
builder.region(<span class="string">"&lt;region&gt;"</span>);
builder.bucket(<span class="string">"&lt;bucket_name&gt;"</span>);
builder.enable_virtual_host_style();</code></pre></div><h4 id="minio"><a class="doc-anchor" href="#minio">§</a>Minio</h4>
<p><a href="https://min.io/">minio</a> is an open-source s3 compatible services.</p>
<p>To connect to minio, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of minio, for example: <code>http://127.0.0.1:9000</code></li>
<li><code>region</code>: The region of minio. If you dont care about it, just set it to “auto”, it will be ignored.</li>
<li><code>bucket</code>: The bucket name of minio.</li>
</ul>
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested"></a><pre class="rust rust-example-rendered"><code>builder.endpoint(<span class="string">"http://127.0.0.1:9000"</span>);
builder.region(<span class="string">"&lt;region&gt;"</span>);
builder.bucket(<span class="string">"&lt;bucket_name&gt;"</span>);</code></pre></div><h4 id="qingstor-object-storage"><a class="doc-anchor" href="#qingstor-object-storage">§</a>QingStor Object Storage</h4>
<p><a href="https://www.qingcloud.com/products/qingstor">QingStor Object Storage</a> is a S3-compatible service provided by <a href="https://www.qingcloud.com/">QingCloud</a>.</p>
<p>To connect to QingStor Object Storage, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of QingStor s3 compatible endpoint, for example: <code>https://s3.pek3b.qingstor.com</code></li>
<li><code>bucket</code>: The bucket name.</li>
</ul>
<h4 id="scaleway-object-storage"><a class="doc-anchor" href="#scaleway-object-storage">§</a>Scaleway Object Storage</h4>
<p><a href="https://www.scaleway.com/en/object-storage/">Scaleway Object Storage</a> is a S3-compatible and multi-AZ redundant object storage service.</p>
<p>To connect to Scaleway Object Storage, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of scaleway, for example: <code>https://s3.nl-ams.scw.cloud</code></li>
<li><code>region</code>: The region of scaleway.</li>
<li><code>bucket</code>: The bucket name of scaleway.</li>
</ul>
<h4 id="tencent-cloud-object-storage-cos"><a class="doc-anchor" href="#tencent-cloud-object-storage-cos">§</a>Tencent Cloud Object Storage (COS)</h4>
<p><a href="https://intl.cloud.tencent.com/products/cos">COS</a> is a s3 compatible service provided by <a href="https://intl.cloud.tencent.com/">Tencent Cloud</a>.</p>
<p>To connect to COS, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of cos, for example: <code>https://cos.ap-beijing.myqcloud.com</code></li>
<li><code>bucket</code>: The bucket name of cos.</li>
</ul>
<h4 id="wasabi-object-storage"><a class="doc-anchor" href="#wasabi-object-storage">§</a>Wasabi Object Storage</h4>
<p><a href="https://wasabi.com/">Wasabi</a> is a s3 compatible service.</p>
<blockquote>
<p>Cloud storage pricing that is 80% less than Amazon S3.</p>
</blockquote>
<p>To connect to wasabi, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of wasabi, for example: <code>https://s3.us-east-2.wasabisys.com</code></li>
<li><code>bucket</code>: The bucket name of wasabi.</li>
</ul>
<blockquote>
<p>Refer to <a href="https://wasabi-support.zendesk.com/hc/en-us/articles/360015106031">What are the service URLs for Wasabis different storage regions?</a> for more details.</p>
</blockquote>
<h4 id="cloudflare-r2"><a class="doc-anchor" href="#cloudflare-r2">§</a>Cloudflare R2</h4>
<p><a href="https://developers.cloudflare.com/r2/">Cloudflare R2</a> provides s3 compatible API.</p>
<blockquote>
<p>Cloudflare R2 Storage allows developers to store large amounts of unstructured data without the costly egress bandwidth fees associated with typical cloud storage services.</p>
</blockquote>
<p>To connect to r2, we need to set:</p>
<ul>
<li><code>endpoint</code>: The endpoint of r2, for example: <code>https://&lt;account_id&gt;.r2.cloudflarestorage.com</code></li>
<li><code>bucket</code>: The bucket name of r2.</li>
<li><code>region</code>: When you create a new bucket, the data location is set to Automatic by default. So please use <code>auto</code> for region.</li>
<li><code>batch_max_operations</code>: R2s delete objects will return <code>Internal Error</code> if the batch is larger than <code>700</code>. Please set this value <code>&lt;= 700</code> to make sure batch delete work as expected.</li>
<li><code>enable_exact_buf_write</code>: R2 requires the non-tailing parts size to be exactly the same. Please enable this option to avoid the error <code>All non-trailing parts must have the same length</code>.</li>
</ul>
<h4 id="google-cloud-storage-xml-api"><a class="doc-anchor" href="#google-cloud-storage-xml-api">§</a>Google Cloud Storage XML API</h4>
<p><a href="https://cloud.google.com/storage/docs/xml-api/overview">Google Cloud Storage XML API</a> provides s3 compatible API.</p>
<ul>
<li><code>endpoint</code>: The endpoint of Google Cloud Storage XML API, for example: <code>https://storage.googleapis.com</code></li>
<li><code>bucket</code>: The bucket name.</li>
<li>To access GCS via S3 API, please enable <code>features = ["native-tls"]</code> in your <code>Cargo.toml</code> to avoid connection being reset when using <code>rustls</code>. Tracking in <a href="https://github.com/seanmonstar/reqwest/issues/1809">https://github.com/seanmonstar/reqwest/issues/1809</a></li>
</ul>
<h4 id="ceph-rados-gateway"><a class="doc-anchor" href="#ceph-rados-gateway">§</a>Ceph Rados Gateway</h4>
<p>Ceph supports a RESTful API that is compatible with the basic data access model of the Amazon S3 API.</p>
<p>For more information, refer: <a href="https://docs.ceph.com/en/latest/radosgw/s3/">https://docs.ceph.com/en/latest/radosgw/s3/</a></p>
</div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.config" class="structfield section-header"><a href="#structfield.config" class="anchor field">§</a><code>config: <a class="struct" href="struct.S3Config.html" title="struct object_store::services::S3Config">S3Config</a></code></span><span id="structfield.customized_credential_load" class="structfield section-header"><a href="#structfield.customized_credential_load" class="anchor field">§</a><code>customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn CredentialLoad&gt;&gt;</code></span><span id="structfield.http_client" class="structfield section-header"><a href="#structfield.http_client" class="anchor field">§</a><code>http_client: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="../struct.HttpClient.html" title="struct object_store::HttpClient">HttpClient</a>&gt;</code></span><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.53.0: Use <code>Operator::update_http_client</code> instead</span></div></span><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-S3" class="impl"><a href="#impl-S3" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.root" class="method"><h4 class="code-header">pub fn <a href="#method.root" class="fn">root</a>(self, root: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set root of this backend.</p>
<p>All operations will happen under this root.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set bucket name of this backend.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set endpoint of this backend.</p>
<p>Endpoint must be full uri, e.g.</p>
<ul>
<li>AWS S3: <code>https://s3.amazonaws.com</code> or <code>https://s3.{region}.amazonaws.com</code></li>
<li>Cloudflare R2: <code>https://&lt;ACCOUNT_ID&gt;.r2.cloudflarestorage.com</code></li>
<li>Aliyun OSS: <code>https://{region}.aliyuncs.com</code></li>
<li>Tencent COS: <code>https://cos.{region}.myqcloud.com</code></li>
<li>Minio: <code>http://127.0.0.1:9000</code></li>
</ul>
<p>If user inputs endpoint without scheme like “s3.amazonaws.com”, we
will prepend “https://” before it.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.region" class="method"><h4 class="code-header">pub fn <a href="#method.region" class="fn">region</a>(self, region: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Region represent the signing region of this endpoint. This is required
if you are using the default AWS S3 endpoint.</p>
<p>If using a custom endpoint,</p>
<ul>
<li>If region is set, we will take users input first.</li>
<li>If not, we will try to load it from environment.</li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set access_key_id of this backend.</p>
<ul>
<li>If access_key_id is set, we will take users input first.</li>
<li>If not, we will try to load it from environment.</li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_access_key" class="method"><h4 class="code-header">pub fn <a href="#method.secret_access_key" class="fn">secret_access_key</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set secret_access_key of this backend.</p>
<ul>
<li>If secret_access_key is set, we will take users input first.</li>
<li>If not, we will try to load it from environment.</li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.role_arn" class="method"><h4 class="code-header">pub fn <a href="#method.role_arn" class="fn">role_arn</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set role_arn for this backend.</p>
<p>If <code>role_arn</code> is set, we will use already known config as source
credential to assume role with <code>role_arn</code>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.external_id" class="method"><h4 class="code-header">pub fn <a href="#method.external_id" class="fn">external_id</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set external_id for this backend.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.role_session_name" class="method"><h4 class="code-header">pub fn <a href="#method.role_session_name" class="fn">role_session_name</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set role_session_name for this backend.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.default_storage_class" class="method"><h4 class="code-header">pub fn <a href="#method.default_storage_class" class="fn">default_storage_class</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set default storage_class for this backend.</p>
<p>Available values:</p>
<ul>
<li><code>DEEP_ARCHIVE</code></li>
<li><code>GLACIER</code></li>
<li><code>GLACIER_IR</code></li>
<li><code>INTELLIGENT_TIERING</code></li>
<li><code>ONEZONE_IA</code></li>
<li><code>OUTPOSTS</code></li>
<li><code>REDUCED_REDUNDANCY</code></li>
<li><code>STANDARD</code></li>
<li><code>STANDARD_IA</code></li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption" class="fn">server_side_encryption</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption for this backend.</p>
<p>Available values: <code>AES256</code>, <code>aws:kms</code>.</p>
<h5 id="note"><a class="doc-anchor" href="#note">§</a>Note</h5>
<p>This function is the low-level setting for SSE related features.</p>
<p>SSE related options should be set carefully to make them works.
Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_aws_kms_key_id" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_aws_kms_key_id" class="fn">server_side_encryption_aws_kms_key_id</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption_aws_kms_key_id for this backend</p>
<ul>
<li>If <code>server_side_encryption</code> set to <code>aws:kms</code>, and <code>server_side_encryption_aws_kms_key_id</code>
is not set, S3 will use aws managed kms key to encrypt data.</li>
<li>If <code>server_side_encryption</code> set to <code>aws:kms</code>, and <code>server_side_encryption_aws_kms_key_id</code>
is a valid kms key id, S3 will use the provided kms key to encrypt data.</li>
<li>If the <code>server_side_encryption_aws_kms_key_id</code> is invalid or not found, an error will be
returned.</li>
<li>If <code>server_side_encryption</code> is not <code>aws:kms</code>, setting <code>server_side_encryption_aws_kms_key_id</code> is a noop.</li>
</ul>
<h5 id="note-1"><a class="doc-anchor" href="#note-1">§</a>Note</h5>
<p>This function is the low-level setting for SSE related features.</p>
<p>SSE related options should be set carefully to make them works.
Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_algorithm" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_algorithm" class="fn">server_side_encryption_customer_algorithm</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption_customer_algorithm for this backend.</p>
<p>Available values: <code>AES256</code>.</p>
<h5 id="note-2"><a class="doc-anchor" href="#note-2">§</a>Note</h5>
<p>This function is the low-level setting for SSE related features.</p>
<p>SSE related options should be set carefully to make them works.
Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_key" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_key" class="fn">server_side_encryption_customer_key</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption_customer_key for this backend.</p>
<h5 id="args"><a class="doc-anchor" href="#args">§</a>Args</h5>
<p><code>v</code>: base64 encoded key that matches algorithm specified in
<code>server_side_encryption_customer_algorithm</code>.</p>
<h5 id="note-3"><a class="doc-anchor" href="#note-3">§</a>Note</h5>
<p>This function is the low-level setting for SSE related features.</p>
<p>SSE related options should be set carefully to make them works.
Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_key_md5" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_key_md5" class="fn">server_side_encryption_customer_key_md5</a>(self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption_customer_key_md5 for this backend.</p>
<h5 id="args-1"><a class="doc-anchor" href="#args-1">§</a>Args</h5>
<p><code>v</code>: MD5 digest of key specified in <code>server_side_encryption_customer_key</code>.</p>
<h5 id="note-4"><a class="doc-anchor" href="#note-4">§</a>Note</h5>
<p>This function is the low-level setting for SSE related features.</p>
<p>SSE related options should be set carefully to make them works.
Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_aws_managed_kms_key" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_aws_managed_kms_key" class="fn">server_side_encryption_with_aws_managed_kms_key</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with aws managed kms key</p>
<p>As known as: SSE-KMS</p>
<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_managed_kms_key" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_managed_kms_key" class="fn">server_side_encryption_with_customer_managed_kms_key</a>(
self,
aws_kms_key_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with customer managed kms key</p>
<p>As known as: SSE-KMS</p>
<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_s3_key" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_s3_key" class="fn">server_side_encryption_with_s3_key</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with s3 managed key</p>
<p>As known as: SSE-S3</p>
<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_key" class="method"><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_key" class="fn">server_side_encryption_with_customer_key</a>(
self,
algorithm: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
key: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>],
) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with customer key.</p>
<p>As known as: SSE-C</p>
<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.session_token" class="method"><h4 class="code-header">pub fn <a href="#method.session_token" class="fn">session_token</a>(self, token: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set temporary credential used in AWS S3 connections</p>
<h5 id="warning"><a class="doc-anchor" href="#warning">§</a>Warning</h5>
<p>session tokens lifetime is short and requires users to refresh in time.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.security_token" class="method"><h4 class="code-header">pub fn <a href="#method.security_token" class="fn">security_token</a>(self, token: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated: Please use <code>session_token</code> instead</span></div></span></summary><div class="docblock"><p>Set temporary credential used in AWS S3 connections</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_config_load" class="method"><h4 class="code-header">pub fn <a href="#method.disable_config_load" class="fn">disable_config_load</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Disable config load so that opendal will not load config from
environment.</p>
<p>For examples:</p>
<ul>
<li>envs like <code>AWS_ACCESS_KEY_ID</code></li>
<li>files like <code>~/.aws/config</code></li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_list_objects_v2" class="method"><h4 class="code-header">pub fn <a href="#method.disable_list_objects_v2" class="fn">disable_list_objects_v2</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Disable list objects v2 so that opendal will not use the older
List Objects V1 to list objects.</p>
<p>By default, OpenDAL uses List Objects V2 to list objects. However,
some legacy services do not yet support V2.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_request_payer" class="method"><h4 class="code-header">pub fn <a href="#method.enable_request_payer" class="fn">enable_request_payer</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable request payer so that OpenDAL will send requests with <code>x-amz-request-payer</code> header.</p>
<p>With this option the client accepts to pay for the request and data transfer costs.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_ec2_metadata" class="method"><h4 class="code-header">pub fn <a href="#method.disable_ec2_metadata" class="fn">disable_ec2_metadata</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Disable load credential from ec2 metadata.</p>
<p>This option is used to disable the default behavior of opendal
to load credential from ec2 metadata, a.k.a, IMDSv2</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.allow_anonymous" class="method"><h4 class="code-header">pub fn <a href="#method.allow_anonymous" class="fn">allow_anonymous</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Allow anonymous will allow opendal to send request without signing
when credential is not loaded.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_virtual_host_style" class="method"><h4 class="code-header">pub fn <a href="#method.enable_virtual_host_style" class="fn">enable_virtual_host_style</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable virtual host style so that opendal will send API requests
in virtual host style instead of path style.</p>
<ul>
<li>By default, opendal will send API to <code>https://s3.us-east-1.amazonaws.com/bucket_name</code></li>
<li>Enabled, opendal will send API to <code>https://bucket_name.s3.us-east-1.amazonaws.com</code></li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_stat_with_override" class="method"><h4 class="code-header">pub fn <a href="#method.disable_stat_with_override" class="fn">disable_stat_with_override</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Disable stat with override so that opendal will not send stat request with override queries.</p>
<p>For example, R2 doesnt support stat with <code>response_content_type</code> query.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.customized_credential_load" class="method"><h4 class="code-header">pub fn <a href="#method.customized_credential_load" class="fn">customized_credential_load</a>(
self,
cred: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn CredentialLoad&gt;,
) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Adding a customized credential load for service.</p>
<p>If customized_credential_load has been set, we will ignore all other
credential load methods.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(self, client: <a class="struct" href="../struct.HttpClient.html" title="struct object_store::HttpClient">HttpClient</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.53.0: Use <code>Operator::update_http_client</code> instead</span></div></span></summary><div class="docblock"><p>Specify the http client that used by this service.</p>
<h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
<p>This API is part of OpenDALs Raw API. <code>HttpClient</code> could be changed
during minor updates.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_versioning" class="method"><h4 class="code-header">pub fn <a href="#method.enable_versioning" class="fn">enable_versioning</a>(self, enabled: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set bucket versioning status for this backend</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.batch_max_operations" class="method"><h4 class="code-header">pub fn <a href="#method.batch_max_operations" class="fn">batch_max_operations</a>(self, batch_max_operations: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.52.0: Please use <code>delete_max_size</code> instead of <code>batch_max_operations</code></span></div></span></summary><div class="docblock"><p>Set maximum batch operations of this backend.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_max_size" class="method"><h4 class="code-header">pub fn <a href="#method.delete_max_size" class="fn">delete_max_size</a>(self, delete_max_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set maximum delete operations of this backend.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.checksum_algorithm" class="method"><h4 class="code-header">pub fn <a href="#method.checksum_algorithm" class="fn">checksum_algorithm</a>(self, checksum_algorithm: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Set checksum algorithm of this backend.
This is necessary when writing to AWS S3 Buckets with Object Lock enabled for example.</p>
<p>Available options:</p>
<ul>
<li>“crc32c”</li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_write_with_if_match" class="method"><h4 class="code-header">pub fn <a href="#method.disable_write_with_if_match" class="fn">disable_write_with_if_match</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Disable write with if match so that opendal will not send write request with if match headers.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_write_with_append" class="method"><h4 class="code-header">pub fn <a href="#method.enable_write_with_append" class="fn">enable_write_with_append</a>(self) -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class="docblock"><p>Enable write with append so that opendal will send write request with append headers.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.detect_region" class="method"><h4 class="code-header">pub async fn <a href="#method.detect_region" class="fn">detect_region</a>(endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;</h4></section></summary><div class="docblock"><p>Detect region of S3 bucket.</p>
<h5 id="args-2"><a class="doc-anchor" href="#args-2">§</a>Args</h5>
<ul>
<li>endpoint: the endpoint of S3 service</li>
<li>bucket: the bucket of S3 service</li>
</ul>
<h5 id="return"><a class="doc-anchor" href="#return">§</a>Return</h5>
<ul>
<li><code>Some(region)</code> means we detect the region successfully</li>
<li><code>None</code> means we cant detect the region or meeting errors.</li>
</ul>
<h5 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h5>
<p>We will try to detect region by the following methods.</p>
<ul>
<li>Match endpoint with given rules to get region
<ul>
<li>Cloudflare R2</li>
<li>AWS S3</li>
<li>Aliyun OSS</li>
</ul>
</li>
<li>Send a <code>HEAD</code> request to endpoint with bucket name to get <code>x-amz-bucket-region</code>.</li>
</ul>
<h5 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::services::S3;
<span class="kw">let </span>region: <span class="prelude-ty">Option</span>&lt;String&gt; = S3::detect_region(<span class="string">"https://s3.amazonaws.com"</span>, <span class="string">"example"</span>).<span class="kw">await</span>;</code></pre></div><h5 id="reference"><a class="doc-anchor" href="#reference">§</a>Reference</h5>
<ul>
<li><a href="https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_HeadBucket.html">Amazon S3 HeadBucket API</a></li>
</ul>
</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-S3" class="impl"><a href="#impl-Builder-for-S3" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="../trait.ObjectStoreBuilder.html" title="trait object_store::ObjectStoreBuilder">Builder</a> for <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.SCHEME" class="associatedconstant trait-impl"><a href="#associatedconstant.SCHEME" class="anchor">§</a><h4 class="code-header">const <a href="../trait.ObjectStoreBuilder.html#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="../enum.Scheme.html" title="enum object_store::Scheme">Scheme</a> = Scheme::S3</h4></section></summary><div class='docblock'>Associated scheme for this builder. It indicates what underlying service is.</div></details><details class="toggle" open><summary><section id="associatedtype.Config" class="associatedtype trait-impl"><a href="#associatedtype.Config" class="anchor">§</a><h4 class="code-header">type <a href="../trait.ObjectStoreBuilder.html#associatedtype.Config" class="associatedtype">Config</a> = <a class="struct" href="struct.S3Config.html" title="struct object_store::services::S3Config">S3Config</a></h4></section></summary><div class='docblock'>Associated configuration for this builder.</div></details><details class="toggle method-toggle" open><summary><section id="method.build" class="method trait-impl"><a href="#method.build" class="anchor">§</a><h4 class="code-header">fn <a href="../trait.ObjectStoreBuilder.html#tymethod.build" class="fn">build</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;impl <a class="trait" href="../trait.Access.html" title="trait object_store::Access">Access</a>, <a class="struct" href="../struct.Error.html" title="struct object_store::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Consume the accessor builder to build a service.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-S3" class="impl"><a href="#impl-Debug-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/core/fmt/struct.Error.html" title="struct core::fmt::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-S3" class="impl"><a href="#impl-Default-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.default" class="method trait-impl"><a href="#method.default" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default" class="fn">default</a>() -&gt; <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-From%3C%26S3Connection%3E-for-S3" class="impl"><a class="src rightside" href="../../src/object_store/config.rs.html#127-153">Source</a><a href="#impl-From%3C%26S3Connection%3E-for-S3" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;&amp;<a class="struct" href="../config/struct.S3Connection.html" title="struct object_store::config::S3Connection">S3Connection</a>&gt; for <a class="struct" href="struct.S3.html" title="struct object_store::services::S3">S3</a></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/object_store/config.rs.html#128-152">Source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(connection: &amp;<a class="struct" href="../config/struct.S3Connection.html" title="struct object_store::config::S3Connection">S3Connection</a>) -&gt; Self</h4></section></summary><div class='docblock'>Converts to this type from the input type.</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-S3" class="impl"><a href="#impl-Freeze-for-S3" 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" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section><section id="impl-RefUnwindSafe-for-S3" class="impl"><a href="#impl-RefUnwindSafe-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section><section id="impl-Send-for-S3" class="impl"><a href="#impl-Send-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section><section id="impl-Sync-for-S3" class="impl"><a href="#impl-Sync-for-S3" 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.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section><section id="impl-Unpin-for-S3" class="impl"><a href="#impl-Unpin-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></h3></section><section id="impl-UnwindSafe-for-S3" class="impl"><a href="#impl-UnwindSafe-for-S3" class="anchor">§</a><h3 class="code-header">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="struct" href="struct.S3.html" title="struct object_store::services::S3">S3Builder</a></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 rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#138">Source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
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#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#212">Source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
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#214">Source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#221">Source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
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#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></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&lt;T&gt; Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.conv" class="method trait-impl"><a href="#method.conv" class="anchor">§</a><h4 class="code-header">fn <a class="fn">conv</a>&lt;T&gt;(self) -&gt; T<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into&lt;T&gt;</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FmtForward-for-T" class="impl"><a href="#impl-FmtForward-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FmtForward for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt_binary" class="method trait-impl"><a href="#method.fmt_binary" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_binary</a>(self) -&gt; FmtBinary&lt;Self&gt;<div class="where">where
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-header">fn <a class="fn">fmt_display</a>(self) -&gt; FmtDisplay&lt;Self&gt;<div class="where">where
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) -&gt; FmtLowerExp&lt;Self&gt;<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) -&gt; FmtLowerHex&lt;Self&gt;<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) -&gt; FmtOctal&lt;Self&gt;<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">fn <a class="fn">fmt_pointer</a>(self) -&gt; FmtPointer&lt;Self&gt;<div class="where">where
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) -&gt; FmtUpperExp&lt;Self&gt;<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) -&gt; FmtUpperHex&lt;Self&gt;<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) -&gt; FmtList&lt;Self&gt;<div class="where">where
&amp;'a Self: for&lt;'a&gt; <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"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#785">Source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#788">Source</a><a href="#method.from-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-T" class="impl"><a href="#impl-FutureExt-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_context</a>(self, otel_cx: Context) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the provided <a href="Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="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&lt;T&gt; 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-header">fn <a class="fn">instrument</a>(self, span: Span) -&gt; Instrumented&lt;Self&gt;</h4></section></summary><div class='docblock'>Instruments this type with the provided [<code>Span</code>], returning an
<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) -&gt; Instrumented&lt;Self&gt;</h4></section></summary><div class='docblock'>Instruments this type with the <a href="super::Span::current()">current</a> <a href="crate::Span"><code>Span</code></a>, returning an
<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#767-769">Source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</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#777">Source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<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>&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-T" class="impl"><a href="#impl-IntoRequest%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; IntoRequest&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into_request" class="method trait-impl"><a href="#method.into_request" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_request</a>(self) -&gt; Request&lt;T&gt;</h4></section></summary><div class='docblock'>Wrap the input message <code>T</code> in a <code>tonic::Request</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-LayerExt%3CL%3E-for-L" class="impl"><a href="#impl-LayerExt%3CL%3E-for-L" class="anchor">§</a><h3 class="code-header">impl&lt;L&gt; LayerExt&lt;L&gt; for L</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.named_layer" class="method trait-impl"><a href="#method.named_layer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">named_layer</a>&lt;S&gt;(&amp;self, service: S) -&gt; Layered&lt;&lt;L as Layer&lt;S&gt;&gt;::Service, S&gt;<div class="where">where
L: Layer&lt;S&gt;,</div></h4></section></summary><div class='docblock'>Applies the layer to a service and wraps it in [<code>Layered</code>].</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pipe-for-T" class="impl"><a href="#impl-Pipe-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pipe for T<div class="where">where
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>&lt;R&gt;(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>(Self) -&gt; R) -&gt; R<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'>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</a>&lt;'a, R&gt;(&amp;'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>(&amp;'a Self) -&gt; R) -&gt; R<div class="where">where
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>&lt;'a, R&gt;(&amp;'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>(&amp;'a mut Self) -&gt; R) -&gt; R<div class="where">where
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>&lt;'a, B, R&gt;(&amp;'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/primitive.reference.html">&amp;'a B</a>) -&gt; R) -&gt; R<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
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>&lt;'a, B, R&gt;(
&amp;'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">&amp;'a mut B</a>) -&gt; R,
) -&gt; 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>&lt;B&gt;,
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>&lt;'a, U, R&gt;(&amp;'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/primitive.reference.html">&amp;'a U</a>) -&gt; R) -&gt; R<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;U&gt;,
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>&lt;'a, U, R&gt;(&amp;'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">&amp;'a mut U</a>) -&gt; R) -&gt; R<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;U&gt;,
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>&lt;'a, T, R&gt;(&amp;'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/primitive.reference.html">&amp;'a T</a>) -&gt; R) -&gt; R<div class="where">where
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>&lt;Target = T&gt;,
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>&lt;'a, T, R&gt;(
&amp;'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">&amp;'a mut T</a>) -&gt; R,
) -&gt; 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>&lt;Target = T&gt; + <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-PolicyExt-for-T" class="impl"><a href="#impl-PolicyExt-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; PolicyExt for T<div class="where">where
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.and" class="method trait-impl"><a href="#method.and" class="anchor">§</a><h4 class="code-header">fn <a class="fn">and</a>&lt;P, B, E&gt;(self, other: P) -&gt; And&lt;T, P&gt;<div class="where">where
T: Policy&lt;B, E&gt;,
P: Policy&lt;B, E&gt;,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] only if <code>self</code> and <code>other</code> return
<code>Action::Follow</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.or" class="method trait-impl"><a href="#method.or" class="anchor">§</a><h4 class="code-header">fn <a class="fn">or</a>&lt;P, B, E&gt;(self, other: P) -&gt; Or&lt;T, P&gt;<div class="where">where
T: Policy&lt;B, E&gt;,
P: Policy&lt;B, E&gt;,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] if either <code>self</code> or <code>other</code> returns
<code>Action::Follow</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Same-for-T" class="impl"><a class="src rightside" href="https://docs.rs/typenum/1.18.0/src/typenum/type_operators.rs.html#34">Source</a><a href="#impl-Same-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/typenum/1.18.0/typenum/type_operators/trait.Same.html" title="trait typenum::type_operators::Same">Same</a> for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a class="src rightside" href="https://docs.rs/typenum/1.18.0/src/typenum/type_operators.rs.html#35">Source</a><a href="#associatedtype.Output" class="anchor">§</a><h4 class="code-header">type <a href="https://docs.rs/typenum/1.18.0/typenum/type_operators/trait.Same.html#associatedtype.Output" class="associatedtype">Output</a> = T</h4></section></summary><div class='docblock'>Should always be <code>Self</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ServiceExt-for-T" class="impl"><a href="#impl-ServiceExt-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; ServiceExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.propagate_header" class="method trait-impl"><a href="#method.propagate_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_header</a>(self, header: HeaderName) -&gt; PropagateHeader&lt;Self&gt;<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'>Propagate a header from the request to the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.add_extension" class="method trait-impl"><a href="#method.add_extension" class="anchor">§</a><h4 class="code-header">fn <a class="fn">add_extension</a>&lt;T&gt;(self, value: T) -&gt; AddExtension&lt;Self, T&gt;<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'>Add some shareable value to <a href="https://docs.rs/http/latest/http/struct.Extensions.html">request extensions</a>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_request_body" class="method trait-impl"><a href="#method.map_request_body" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_request_body</a>&lt;F&gt;(self, f: F) -&gt; MapRequestBody&lt;Self, F&gt;<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'>Apply a transformation to the request body. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_response_body" class="method trait-impl"><a href="#method.map_response_body" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_response_body</a>&lt;F&gt;(self, f: F) -&gt; MapResponseBody&lt;Self, F&gt;<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'>Apply a transformation to the response body. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.compression" class="method trait-impl"><a href="#method.compression" class="anchor">§</a><h4 class="code-header">fn <a class="fn">compression</a>(self) -&gt; Compression&lt;Self&gt;<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'>Compresses response bodies. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.decompression" class="method trait-impl"><a href="#method.decompression" class="anchor">§</a><h4 class="code-header">fn <a class="fn">decompression</a>(self) -&gt; Decompression&lt;Self&gt;<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'>Decompress response bodies. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trace_for_http" class="method trait-impl"><a href="#method.trace_for_http" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trace_for_http</a>(self) -&gt; Trace&lt;Self, SharedClassifier&lt;ServerErrorsAsFailures&gt;&gt;<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'>High level tracing that classifies responses using HTTP status codes. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trace_for_grpc" class="method trait-impl"><a href="#method.trace_for_grpc" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trace_for_grpc</a>(self) -&gt; Trace&lt;Self, SharedClassifier&lt;GrpcErrorsAsFailures&gt;&gt;<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'>High level tracing that classifies responses using gRPC headers. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.follow_redirects" class="method trait-impl"><a href="#method.follow_redirects" class="anchor">§</a><h4 class="code-header">fn <a class="fn">follow_redirects</a>(self) -&gt; FollowRedirect&lt;Self&gt;<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'>Follow redirect resposes using the <a href="crate::follow_redirect::policy::Standard"><code>Standard</code></a> policy. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_headers" class="method trait-impl"><a href="#method.sensitive_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_headers</a>(
self,
headers: impl <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>&lt;Item = HeaderName&gt;,
) -&gt; SetSensitiveRequestHeaders&lt;SetSensitiveResponseHeaders&lt;Self&gt;&gt;<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'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on both requests and responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_request_headers" class="method trait-impl"><a href="#method.sensitive_request_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_request_headers</a>(
self,
headers: impl <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>&lt;Item = HeaderName&gt;,
) -&gt; SetSensitiveRequestHeaders&lt;Self&gt;<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'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on requests. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_response_headers" class="method trait-impl"><a href="#method.sensitive_response_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_response_headers</a>(
self,
headers: impl <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>&lt;Item = HeaderName&gt;,
) -&gt; SetSensitiveResponseHeaders&lt;Self&gt;<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'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.override_request_header" class="method trait-impl"><a href="#method.override_request_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">override_request_header</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetRequestHeader&lt;Self, M&gt;<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'>Insert a header into the request. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_request_header" class="method trait-impl"><a href="#method.append_request_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_request_header</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetRequestHeader&lt;Self, M&gt;<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'>Append a header into the request. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.insert_request_header_if_not_present" class="method trait-impl"><a href="#method.insert_request_header_if_not_present" class="anchor">§</a><h4 class="code-header">fn <a class="fn">insert_request_header_if_not_present</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetRequestHeader&lt;Self, M&gt;<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'>Insert a header into the request, if the header is not already present. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.override_response_header" class="method trait-impl"><a href="#method.override_response_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">override_response_header</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetResponseHeader&lt;Self, M&gt;<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'>Insert a header into the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_response_header" class="method trait-impl"><a href="#method.append_response_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_response_header</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetResponseHeader&lt;Self, M&gt;<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'>Append a header into the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.insert_response_header_if_not_present" class="method trait-impl"><a href="#method.insert_response_header_if_not_present" class="anchor">§</a><h4 class="code-header">fn <a class="fn">insert_response_header_if_not_present</a>&lt;M&gt;(
self,
header_name: HeaderName,
make: M,
) -&gt; SetResponseHeader&lt;Self, M&gt;<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'>Insert a header into the response, if the header is not already present. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.set_request_id" class="method trait-impl"><a href="#method.set_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">set_request_id</a>&lt;M&gt;(
self,
header_name: HeaderName,
make_request_id: M,
) -&gt; SetRequestId&lt;Self, M&gt;<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>,
M: MakeRequestId,</div></h4></section></summary><div class='docblock'>Add request id header and extension. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.set_x_request_id" class="method trait-impl"><a href="#method.set_x_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">set_x_request_id</a>&lt;M&gt;(self, make_request_id: M) -&gt; SetRequestId&lt;Self, M&gt;<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>,
M: MakeRequestId,</div></h4></section></summary><div class='docblock'>Add request id header and extension, using <code>x-request-id</code> as the header name. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.propagate_request_id" class="method trait-impl"><a href="#method.propagate_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_request_id</a>(
self,
header_name: HeaderName,
) -&gt; PropagateRequestId&lt;Self&gt;<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'>Propgate request ids from requests to responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.propagate_x_request_id" class="method trait-impl"><a href="#method.propagate_x_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_x_request_id</a>(self) -&gt; PropagateRequestId&lt;Self&gt;<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'>Propgate request ids from requests to responses, using <code>x-request-id</code> as the header name. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.catch_panic" class="method trait-impl"><a href="#method.catch_panic" class="anchor">§</a><h4 class="code-header">fn <a class="fn">catch_panic</a>(self) -&gt; CatchPanic&lt;Self, DefaultResponseForPanic&gt;<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'>Catch panics and convert them into <code>500 Internal Server</code> responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.request_body_limit" class="method trait-impl"><a href="#method.request_body_limit" class="anchor">§</a><h4 class="code-header">fn <a class="fn">request_body_limit</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; RequestBodyLimit&lt;Self&gt;<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'>Intercept requests with over-sized payloads and convert them into
<code>413 Payload Too Large</code> responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trim_trailing_slash" class="method trait-impl"><a href="#method.trim_trailing_slash" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trim_trailing_slash</a>(self) -&gt; NormalizePath&lt;Self&gt;<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'>Remove trailing slashes from paths. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_trailing_slash" class="method trait-impl"><a href="#method.append_trailing_slash" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_trailing_slash</a>(self) -&gt; NormalizePath&lt;Self&gt;<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'>Append trailing slash to paths. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Tap-for-T" class="impl"><a href="#impl-Tap-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Tap for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.tap" class="method trait-impl"><a href="#method.tap" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap</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>(&amp;Self)) -&gt; Self</h4></section></summary><div class='docblock'>Immutable access to a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_mut" class="method trait-impl"><a href="#method.tap_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_mut</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>(&amp;mut Self)) -&gt; Self</h4></section></summary><div class='docblock'>Mutable access to a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow" class="method trait-impl"><a href="#method.tap_borrow" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow</a>&lt;B&gt;(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">&amp;B</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
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&lt;B&gt;</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="fn">tap_borrow_mut</a>&lt;B&gt;(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">&amp;mut B</a>)) -&gt; Self<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>&lt;B&gt;,
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&lt;B&gt;</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</a>&lt;R&gt;(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">&amp;R</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;R&gt;,
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&lt;R&gt;</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="fn">tap_ref_mut</a>&lt;R&gt;(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">&amp;mut R</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;R&gt;,
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&lt;R&gt;</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_deref</a>&lt;T&gt;(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">&amp;T</a>)) -&gt; Self<div class="where">where
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>&lt;Target = T&gt;,
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">tap_deref_mut</a>&lt;T&gt;(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">&amp;mut T</a>)) -&gt; Self<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>&lt;Target = T&gt; + <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>(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>(&amp;Self)) -&gt; Self</h4></section></summary><div class='docblock'>Calls <code>.tap()</code> only in debug builds, and is erased in release builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_mut_dbg" class="method trait-impl"><a href="#method.tap_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_mut_dbg</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>(&amp;mut Self)) -&gt; Self</h4></section></summary><div class='docblock'>Calls <code>.tap_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_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>&lt;B&gt;(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">&amp;B</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
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>&lt;B&gt;(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">&amp;mut B</a>)) -&gt; Self<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>&lt;B&gt;,
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>&lt;R&gt;(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">&amp;R</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;R&gt;,
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>&lt;R&gt;(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">&amp;mut R</a>)) -&gt; Self<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;R&gt;,
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>&lt;T&gt;(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">&amp;T</a>)) -&gt; Self<div class="where">where
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>&lt;Target = T&gt;,
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>&lt;T&gt;(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">&amp;mut T</a>)) -&gt; Self<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>&lt;Target = T&gt; + <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-TryConv-for-T" class="impl"><a href="#impl-TryConv-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; TryConv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.try_conv" class="method trait-impl"><a href="#method.try_conv" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_conv</a>&lt;T&gt;(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" title="type core::convert::TryInto::Error">Error</a>&gt;<div class="where">where
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;T&gt;,</div></h4></section></summary><div class='docblock'>Attempts to convert <code>self</code> into <code>T</code> using <code>TryInto&lt;T&gt;</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="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#827-829">Source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#831">Source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#834">Source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#811-813">Source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#815">Source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#818">Source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-VZip%3CV%3E-for-T" class="impl"><a href="#impl-VZip%3CV%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;V, T&gt; VZip&lt;V&gt; for T<div class="where">where
V: MultiLane&lt;T&gt;,</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) -&gt; 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&lt;T&gt; WithSubscriber for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_subscriber" class="method trait-impl"><a href="#method.with_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_subscriber</a>&lt;S&gt;(self, subscriber: S) -&gt; WithDispatch&lt;Self&gt;<div class="where">where
S: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</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) -&gt; WithDispatch&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::dispatcher#setting-the-default-subscriber">default</a> <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details><section id="impl-Any-for-T-1" class="impl"><a href="#impl-Any-for-T-1" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Any for T<div class="where">where
T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section><section id="impl-ErasedDestructor-for-T" class="impl"><a href="#impl-ErasedDestructor-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; ErasedDestructor for T<div class="where">where
T: 'static,</div></h3></section><section id="impl-MaybeSend-for-T" class="impl"><a href="#impl-MaybeSend-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; MaybeSend for T<div class="where">where
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>