blob: 0e51e758e9d9bd9127ddf98461cb3265a3bb8501 [file] [log] [blame]
<!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="Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services."><title>opendal_core - 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-ca0dd0c4.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="opendal_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.92.0-nightly (be0ade2b6 2025-10-11)" data-channel="nightly" data-search-js="search-8d3311b9.js" data-stringdex-js="stringdex-828709d0.js" data-settings-js="settings-c38705f0.js"><script src="../static.files/storage-e2aeef58.js"></script><script defer="" src="../crates.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 mod crate"><!--[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="#">Crate opendal_core</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../opendal_core/index.html"><img src="/img/external/71c0d8847d34b7f8ce3fd204c652c6f9.svg" alt="logo"></a><h2><a href="../opendal_core/index.html">opendal_<wbr>core</a><span class="version">0.55.0</span></h2></div><div class="sidebar-elems"><ul class="block"><li><a id="all-types" href="all.html">All Items</a></li></ul><section id="rustdoc-toc"><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#quick-start" title="Quick Start">Quick Start</a><ul><li><a href="#init-a-service" title="Init a service">Init a service</a></li><li><a href="#compose-layers" title="Compose layers">Compose layers</a></li><li><a href="#use-operator" title="Use operator">Use operator</a></li></ul></li><li><a href="#useful-links" title="Useful Links">Useful Links</a></li></ul><h3><a href="#modules">Crate Items</a></h3><ul class="block"><li><a href="#modules" title="Modules">Modules</a></li><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#enums" title="Enums">Enums</a></li><li><a href="#statics" title="Statics">Statics</a></li><li><a href="#traits" title="Traits">Traits</a></li><li><a href="#types" title="Type Aliases">Type Aliases</a></li></ul></section><div id="rustdoc-modnav"></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"><h1>Crate <span>opendal_<wbr>core</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"><a class="src" href="../src/opendal_core/lib.rs.html#18-206">Source</a> </span></div><details class="toggle top-doc" open=""><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services.</p>
<p>OpenDAL’s development is guided by its vision of <strong>One Layer, All Storage</strong> and its core principles: <strong>Open Community</strong>, <strong>Solid Foundation</strong>, <strong>Fast Access</strong>, <strong>Object Storage First</strong>, and <strong>Extensible Architecture</strong>. Read the explained vision at <a href="https://opendal.apache.org/vision">OpenDAL Vision</a>.</p>
<h2 id="quick-start"><a class="doc-anchor" href="#quick-start">§</a>Quick Start</h2>
<p>OpenDAL’s API entry points are <a href="struct.Operator.html" title="struct opendal_core::Operator"><code>Operator</code></a> and <a href="blocking/struct.Operator.html" title="struct opendal_core::blocking::Operator"><code>blocking::Operator</code></a>. All
public APIs are accessible through the operator. To utilize OpenDAL, you
need to:</p>
<ul>
<li><a href="#init-a-service">Init a service</a></li>
<li><a href="#compose-layers">Compose layers</a></li>
<li><a href="#use-operator">Use operator</a></li>
</ul>
<h3 id="init-a-service"><a class="doc-anchor" href="#init-a-service">§</a>Init a service</h3>
<p>The first step is to pick a service and init it with a builder. All supported
services could be found at <a href="services/index.html" title="mod opendal_core::services"><code>services</code></a>.</p>
<p>Let’s take <a href="services/struct.Memory.html" title="struct opendal_core::services::Memory"><code>services::Memory</code></a> as an example:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal_core::services;
<span class="kw">use </span>opendal_core::Operator;
<span class="kw">use </span>opendal_core::Result;
<span class="kw">fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
<span class="comment">// Pick a builder and configure it.
</span><span class="kw">let </span>builder = services::Memory::default();
<span class="comment">// Init an operator
</span><span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
<span class="prelude-val">Ok</span>(())
}</code></pre></div><h3 id="compose-layers"><a class="doc-anchor" href="#compose-layers">§</a>Compose layers</h3>
<p>The next setup is to compose layers. Layers are modules that provide extra
features for every operation. All builtin layers could be found at <a href="layers/index.html" title="mod opendal_core::layers"><code>layers</code></a>.</p>
<p>Let’s use <a href="layers/struct.HttpClientLayer.html" title="struct opendal_core::layers::HttpClientLayer"><code>layers::HttpClientLayer</code></a> as an example; this layer allows
customizing the HTTP client used by OpenDAL.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal_core::layers::HttpClientLayer;
<span class="kw">use </span>opendal_core::raw::HttpClient;
<span class="kw">use </span>opendal_core::services;
<span class="kw">use </span>opendal_core::Operator;
<span class="kw">use </span>opendal_core::Result;
<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">// Pick a builder and configure it.
</span><span class="kw">let </span>builder = services::Memory::default();
<span class="comment">// Init an operator
</span><span class="kw">let </span>client = HttpClient::new()<span class="question-mark">?</span>;
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?
</span><span class="comment">// Init with custom HTTP client.
</span>.layer(HttpClientLayer::new(client))
.finish();
<span class="prelude-val">Ok</span>(())
}</code></pre></div><h3 id="use-operator"><a class="doc-anchor" href="#use-operator">§</a>Use operator</h3>
<p>The final step is to use the operator. OpenDAL supports both async <a href="struct.Operator.html" title="struct opendal_core::Operator"><code>Operator</code></a>
and blocking <a href="blocking/struct.Operator.html" title="struct opendal_core::blocking::Operator"><code>blocking::Operator</code></a>. Please pick the one that fits your use case.</p>
<p>Every Operator API follows a consistent pattern. For example, consider the <code>read</code> operation:</p>
<ul>
<li><a href="struct.Operator.html#method.read" title="method opendal_core::Operator::read"><code>Operator::read</code></a>: Executes a read operation.</li>
<li><a href="struct.Operator.html#method.read_with" title="method opendal_core::Operator::read_with"><code>Operator::read_with</code></a>: Executes a read operation with additional options using the builder pattern.</li>
<li><a href="struct.Operator.html#method.read_options" title="method opendal_core::Operator::read_options"><code>Operator::read_options</code></a>: Executes a read operation with extra options provided via a <a href="options/struct.ReadOptions.html" title="struct opendal_core::options::ReadOptions"><code>options::ReadOptions</code></a> struct.</li>
<li><a href="struct.Operator.html#method.reader" title="method opendal_core::Operator::reader"><code>Operator::reader</code></a>: Creates a reader for streaming data, allowing for flexible access.</li>
<li><a href="struct.Operator.html#method.reader_with" title="method opendal_core::Operator::reader_with"><code>Operator::reader_with</code></a>: Creates a reader with advanced options using the builder pattern.</li>
<li><a href="struct.Operator.html#method.reader_options" title="method opendal_core::Operator::reader_options"><code>Operator::reader_options</code></a>: Creates a reader with extra options provided via a <a href="options/struct.ReadOptions.html" title="struct opendal_core::options::ReadOptions"><code>options::ReadOptions</code></a> struct.</li>
</ul>
<p>The <a href="struct.Reader.html" title="struct opendal_core::Reader"><code>Reader</code></a> created by <a href="struct.Operator.html" title="struct opendal_core::Operator"><code>Operator</code></a> supports custom read control methods and can be converted
into [<code>futures::AsyncRead</code>] or [<code>futures::Stream</code>] for broader ecosystem compatibility.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal_core::layers::HttpClientLayer;
<span class="kw">use </span>opendal_core::options;
<span class="kw">use </span>opendal_core::raw::HttpClient;
<span class="kw">use </span>opendal_core::services;
<span class="kw">use </span>opendal_core::Operator;
<span class="kw">use </span>opendal_core::Result;
<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">// Pick a builder and configure it.
</span><span class="kw">let </span>builder = services::Memory::default();
<span class="comment">// Init an operator
</span><span class="kw">let </span>client = HttpClient::new()<span class="question-mark">?</span>;
<span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?
</span><span class="comment">// Init with custom HTTP client.
</span>.layer(HttpClientLayer::new(client))
.finish();
<span class="comment">// Fetch this file's metadata
</span><span class="kw">let </span>meta = op.stat(<span class="string">"hello.txt"</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let </span>length = meta.content_length();
<span class="comment">// Read data from `hello.txt` with options.
</span><span class="kw">let </span>bs = op
.read_with(<span class="string">"hello.txt"</span>)
.range(<span class="number">0</span>..<span class="number">8 </span>* <span class="number">1024 </span>* <span class="number">1024</span>)
.chunk(<span class="number">1024 </span>* <span class="number">1024</span>)
.concurrent(<span class="number">4</span>)
.<span class="kw">await</span><span class="question-mark">?</span>;
<span class="comment">// The same to:
</span><span class="kw">let </span>bs = op
.read_options(<span class="string">"hello.txt"</span>, options::ReadOptions {
range: (<span class="number">0</span>..<span class="number">8 </span>* <span class="number">1024 </span>* <span class="number">1024</span>).into(),
chunk: <span class="prelude-val">Some</span>(<span class="number">1024 </span>* <span class="number">1024</span>),
concurrent: <span class="number">4</span>,
..Default::default()
})
.<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div><h2 id="useful-links"><a class="doc-anchor" href="#useful-links">§</a>Useful Links</h2>
<ul>
<li><a href="docs/concepts/index.html" title="mod opendal_core::docs::concepts">Concept</a></li>
<li><a href="docs/internals/index.html" title="mod opendal_core::docs::internals">Internals</a></li>
<li><a href="docs/performance/index.html" title="mod opendal_core::docs::performance">Performance Guide</a></li>
</ul>
</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><dl class="item-table"><dt><a class="mod" href="blocking/index.html" title="mod opendal_core::blocking">blocking</a><wbr><span class="stab portability" title="Available on crate feature `blocking` only"><code>blocking</code></span></dt><dd>blocking module provides blocking APIs for OpenDAL.</dd><dt><a class="mod" href="docs/index.html" title="mod opendal_core::docs">docs</a><wbr><span class="stab portability" title="Available on `docsrs` only"><code>docsrs</code></span></dt><dd>This module holds documentation for OpenDAL.</dd><dt><a class="mod" href="executors/index.html" title="mod opendal_core::executors">executors</a></dt><dd>executors module provides implementations for the <a href="trait.Execute.html" title="trait opendal_core::Execute"><code>Execute</code></a> trait for widely used runtimes.</dd><dt><a class="mod" href="layers/index.html" title="mod opendal_core::layers">layers</a></dt><dd><code>Layer</code> is the mechanism to intercept operations.</dd><dt><a class="mod" href="operator_futures/index.html" title="mod opendal_core::operator_futures">operator_<wbr>futures</a></dt><dd>Futures provides the futures generated by <a href="struct.Operator.html" title="struct opendal_core::Operator"><code>Operator</code></a></dd><dt><a class="mod" href="options/index.html" title="mod opendal_core::options">options</a></dt><dd>Options module provides options definitions for operations.</dd><dt><a class="mod" href="raw/index.html" title="mod opendal_core::raw">raw</a></dt><dd>Raw modules provide raw APIs that used by underlying services</dd><dt><a class="mod" href="services/index.html" title="mod opendal_core::services">services</a></dt><dd>Services will provide builders to build underlying backends.</dd></dl><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Buffer.html" title="struct opendal_core::Buffer">Buffer</a></dt><dd>Buffer is a wrapper of contiguous <code>Bytes</code> and non-contiguous <code>[Bytes]</code>.</dd><dt><a class="struct" href="struct.BufferSink.html" title="struct opendal_core::BufferSink">Buffer<wbr>Sink</a></dt><dd>BufferSink is the adapter of [<code>futures::Sink</code>] generated by <a href="struct.Writer.html#method.into_sink" title="method opendal_core::Writer::into_sink"><code>Writer::into_sink</code></a></dd><dt><a class="struct" href="struct.BufferStream.html" title="struct opendal_core::BufferStream">Buffer<wbr>Stream</a></dt><dd>BufferStream is a stream of buffers, created by <a href="struct.Reader.html#method.into_stream" title="method opendal_core::Reader::into_stream"><code>Reader::into_stream</code></a></dd><dt><a class="struct" href="struct.Capability.html" title="struct opendal_core::Capability">Capability</a></dt><dd>Capability defines the supported operations and their constraints for a storage Operator.</dd><dt><a class="struct" href="struct.DeleteInput.html" title="struct opendal_core::DeleteInput">Delete<wbr>Input</a></dt><dd>DeleteInput is the input for delete operations.</dd><dt><a class="struct" href="struct.Deleter.html" title="struct opendal_core::Deleter">Deleter</a></dt><dd>Deleter is designed to continuously remove content from storage.</dd><dt><a class="struct" href="struct.Entry.html" title="struct opendal_core::Entry">Entry</a></dt><dd>Entry returned by <a href="struct.Lister.html" title="struct opendal_core::Lister"><code>Lister</code></a> or [<code>BlockingLister</code>] to represent a path and it’s relative metadata.</dd><dt><a class="struct" href="struct.Error.html" title="struct opendal_core::Error">Error</a></dt><dd>Error is the error struct returned by all opendal functions.</dd><dt><a class="struct" href="struct.Executor.html" title="struct opendal_core::Executor">Executor</a></dt><dd>Executor that runs futures in background.</dd><dt><a class="struct" href="struct.FuturesAsyncReader.html" title="struct opendal_core::FuturesAsyncReader">Futures<wbr>Async<wbr>Reader</a></dt><dd>FuturesAsyncReader is the adapter of [<code>AsyncRead</code>], [<code>AsyncBufRead</code>]
and [<code>AsyncSeek</code>] generated by <a href="struct.Reader.html#method.into_futures_async_read" title="method opendal_core::Reader::into_futures_async_read"><code>Reader::into_futures_async_read</code></a>.</dd><dt><a class="struct" href="struct.FuturesAsyncWriter.html" title="struct opendal_core::FuturesAsyncWriter">Futures<wbr>Async<wbr>Writer</a></dt><dd>FuturesIoAsyncWriter is the adapter of [<code>AsyncWrite</code>] for <a href="struct.Writer.html" title="struct opendal_core::Writer"><code>Writer</code></a>.</dd><dt><a class="struct" href="struct.FuturesBytesSink.html" title="struct opendal_core::FuturesBytesSink">Futures<wbr>Bytes<wbr>Sink</a></dt><dd>FuturesBytesSink is the adapter of [<code>futures::Sink</code>] generated by <a href="struct.Writer.html#method.into_bytes_sink" title="method opendal_core::Writer::into_bytes_sink"><code>Writer::into_bytes_sink</code></a>.</dd><dt><a class="struct" href="struct.FuturesBytesStream.html" title="struct opendal_core::FuturesBytesStream">Futures<wbr>Bytes<wbr>Stream</a></dt><dd>FuturesBytesStream is the adapter of [<code>Stream</code>] generated by <a href="struct.Reader.html#method.into_bytes_stream" title="method opendal_core::Reader::into_bytes_stream"><code>Reader::into_bytes_stream</code></a>.</dd><dt><a class="struct" href="struct.FuturesDeleteSink.html" title="struct opendal_core::FuturesDeleteSink">Futures<wbr>Delete<wbr>Sink</a></dt><dd>FuturesDeleteSink is a sink that generated by <a href="struct.Deleter.html" title="struct opendal_core::Deleter"><code>Deleter</code></a></dd><dt><a class="struct" href="struct.Lister.html" title="struct opendal_core::Lister">Lister</a></dt><dd>Lister is designed to list entries at given path in an asynchronous
manner.</dd><dt><a class="struct" href="struct.Metadata.html" title="struct opendal_core::Metadata">Metadata</a></dt><dd>Metadata contains all the information related to a specific path.</dd><dt><a class="struct" href="struct.Operator.html" title="struct opendal_core::Operator">Operator</a></dt><dd>The <code>Operator</code> serves as the entry point for all public asynchronous APIs.</dd><dt><a class="struct" href="struct.OperatorBuilder.html" title="struct opendal_core::OperatorBuilder">Operator<wbr>Builder</a></dt><dd>OperatorBuilder is a typed builder to build an Operator.</dd><dt><a class="struct" href="struct.OperatorInfo.html" title="struct opendal_core::OperatorInfo">Operator<wbr>Info</a></dt><dd>Metadata for operator, users can use this metadata to get information of operator.</dd><dt><a class="struct" href="struct.OperatorRegistry.html" title="struct opendal_core::OperatorRegistry">Operator<wbr>Registry</a></dt><dd>Global registry that maps schemes to <a href="type.OperatorFactory.html" title="type opendal_core::OperatorFactory"><code>OperatorFactory</code></a> functions.</dd><dt><a class="struct" href="struct.OperatorUri.html" title="struct opendal_core::OperatorUri">Operator<wbr>Uri</a></dt><dd>Parsed representation of an operator URI with normalized components.</dd><dt><a class="struct" href="struct.Reader.html" title="struct opendal_core::Reader">Reader</a></dt><dd>Reader is designed to read data from given path in an asynchronous
manner.</dd><dt><a class="struct" href="struct.Writer.html" title="struct opendal_core::Writer">Writer</a></dt><dd>Writer is designed to write data into given path in an asynchronous
manner.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.EntryMode.html" title="enum opendal_core::EntryMode">Entry<wbr>Mode</a></dt><dd>EntryMode represents the mode.</dd><dt><a class="enum" href="enum.ErrorKind.html" title="enum opendal_core::ErrorKind">Error<wbr>Kind</a></dt><dd>ErrorKind is all kinds of Error of opendal.</dd></dl><h2 id="statics" class="section-header">Statics<a href="#statics" class="anchor">§</a></h2><dl class="item-table"><dt><a class="static" href="static.DEFAULT_OPERATOR_REGISTRY.html" title="static opendal_core::DEFAULT_OPERATOR_REGISTRY">DEFAULT_<wbr>OPERATOR_<wbr>REGISTRY</a></dt><dd>Default registry initialized with builtin services.</dd></dl><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.Builder.html" title="trait opendal_core::Builder">Builder</a></dt><dd>Builder is used to set up underlying services.</dd><dt><a class="trait" href="trait.Configurator.html" title="trait opendal_core::Configurator">Configurator</a></dt><dd>Configurator is used to configure the underlying service.</dd><dt><a class="trait" href="trait.Execute.html" title="trait opendal_core::Execute">Execute</a></dt><dd>Execute trait is used to execute task in background.</dd><dt><a class="trait" href="trait.IntoDeleteInput.html" title="trait opendal_core::IntoDeleteInput">Into<wbr>Delete<wbr>Input</a></dt><dd>IntoDeleteInput is a helper trait that makes it easier for users to play with <code>Deleter</code>.</dd><dt><a class="trait" href="trait.IntoOperatorUri.html" title="trait opendal_core::IntoOperatorUri">Into<wbr>Operator<wbr>Uri</a></dt><dd>Conversion trait that builds <a href="struct.OperatorUri.html" title="struct opendal_core::OperatorUri"><code>OperatorUri</code></a> from various inputs.</dd></dl><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><dl class="item-table"><dt><a class="type" href="type.OperatorFactory.html" title="type opendal_core::OperatorFactory">Operator<wbr>Factory</a></dt><dd>Factory signature used to construct <a href="struct.Operator.html" title="struct opendal_core::Operator"><code>Operator</code></a> from a URI and extra options.</dd><dt><a class="type" href="type.Result.html" title="type opendal_core::Result">Result</a></dt><dd>Result that is a wrapper of <code>Result&lt;T, opendal::Error&gt;</code></dd></dl><script type="text/json" id="notable-traits-data">{"&[u8]":"<h3>Notable traits for <code>&amp;[<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.u8.html\">u8</a>]</code></h3><pre><code><div class=\"where\">impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for &amp;[<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.u8.html\">u8</a>]</div>","<Arc<S> as Service<Request>>::Future":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/std/fs/struct.File.html\" title=\"struct std::fs::File\">File</a>&gt;</code></h3><pre><code><div class=\"where\">impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/std/fs/struct.File.html\" title=\"struct std::fs::File\">File</a>&gt;</div><div class=\"where\">impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/std/fs/struct.File.html\" title=\"struct std::fs::File\">File</a>&gt;</div>"}</script></section></div></main></body></html>