blob: d34079e7da708aecf8d5ad1c29a77c8a915c57d2 [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="A handle to release window capacity to a remote stream."><meta name="keywords" content="rust, rustlang, rust-lang, FlowControl"><title>FlowControl in h2 - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.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]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../h2/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../h2/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">FlowControl</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.available_capacity">available_capacity</a></li><li><a href="#method.release_capacity">release_capacity</a></li><li><a href="#method.stream_id">stream_id</a></li><li><a href="#method.used_capacity">used_capacity</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block"><li><a href="#impl-Clone-for-FlowControl">Clone</a></li><li><a href="#impl-Debug-for-FlowControl">Debug</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-FlowControl">RefUnwindSafe</a></li><li><a href="#impl-Send-for-FlowControl">Send</a></li><li><a href="#impl-Sync-for-FlowControl">Sync</a></li><li><a href="#impl-Unpin-for-FlowControl">Unpin</a></li><li><a href="#impl-UnwindSafe-for-FlowControl">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-FlowControl">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-FlowControl">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-FlowControl">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-FlowControl">From&lt;T&gt;</a></li><li><a href="#impl-Instrument-for-FlowControl">Instrument</a></li><li><a href="#impl-Into%3CU%3E-for-FlowControl">Into&lt;U&gt;</a></li><li><a href="#impl-ToOwned-for-FlowControl">ToOwned</a></li><li><a href="#impl-TryFrom%3CU%3E-for-FlowControl">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-FlowControl">TryInto&lt;U&gt;</a></li><li><a href="#impl-WithSubscriber-for-FlowControl">WithSubscriber</a></li></ul></section><h2><a href="index.html">In h2</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Struct <a href="index.html">h2</a>::<wbr><a class="struct" href="#">FlowControl</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/h2/share.rs.html#195-197">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust struct"><code>pub struct FlowControl { /* private fields */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A handle to release window capacity to a remote stream.</p>
<p>This type allows the caller to manage inbound data <a href="../index.html#flow-control">flow control</a>. The
caller is expected to call <a href="struct.FlowControl.html#method.release_capacity"><code>release_capacity</code></a> after dropping data frames.</p>
<h2 id="overview"><a href="#overview">Overview</a></h2>
<p>Each stream has a window size. This window size is the maximum amount of
inbound data that can be in-flight. In-flight data is defined as data that
has been received, but not yet released.</p>
<p>When a stream is created, the window size is set to the connection’s initial
window size value. When a data frame is received, the window size is then
decremented by size of the data frame before the data is provided to the
caller. As the caller finishes using the data, <a href="struct.FlowControl.html#method.release_capacity"><code>release_capacity</code></a> must be
called. This will then increment the window size again, allowing the peer to
send more data.</p>
<p>There is also a connection level window as well as the stream level window.
Received data counts against the connection level window as well and calls
to <a href="struct.FlowControl.html#method.release_capacity"><code>release_capacity</code></a> will also increment the connection level window.</p>
<h2 id="sending-window_update-frames"><a href="#sending-window_update-frames">Sending <code>WINDOW_UPDATE</code> frames</a></h2>
<p><code>WINDOW_UPDATE</code> frames will not be sent out for <strong>every</strong> call to
<code>release_capacity</code>, as this would end up slowing down the protocol. Instead,
<code>h2</code> waits until the window size is increased to a certain threshold and
then sends out a single <code>WINDOW_UPDATE</code> frame representing all the calls to
<code>release_capacity</code> since the last <code>WINDOW_UPDATE</code> frame.</p>
<p>This essentially batches window updating.</p>
<h2 id="scenarios"><a href="#scenarios">Scenarios</a></h2>
<p>Following is a basic scenario with an HTTP/2 connection containing a
single active stream.</p>
<ul>
<li>A new stream is activated. The receive window is initialized to 1024 (the
value of the initial window size for this connection).</li>
<li>A <code>DATA</code> frame is received containing a payload of 600 bytes.</li>
<li>The receive window size is reduced to 424 bytes.</li>
<li><a href="struct.FlowControl.html#method.release_capacity"><code>release_capacity</code></a> is called with 200.</li>
<li>The receive window size is now 624 bytes. The peer may send no more than
this.</li>
<li>A <code>DATA</code> frame is received with a payload of 624 bytes.</li>
<li>The window size is now 0 bytes. The peer may not send any more data.</li>
<li><a href="struct.FlowControl.html#method.release_capacity"><code>release_capacity</code></a> is called with 1024.</li>
<li>The receive window size is now 1024 bytes. The peer may now send more
data.</li>
</ul>
</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-FlowControl" class="impl has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#493-540">source</a><a href="#impl-FlowControl" class="anchor"></a><h3 class="code-header">impl <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.stream_id" class="method has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#500-502">source</a><h4 class="code-header">pub fn <a href="#method.stream_id" class="fnname">stream_id</a>(&amp;self) -&gt; <a class="struct" href="struct.StreamId.html" title="struct h2::StreamId">StreamId</a></h4></section></summary><div class="docblock"><p>Returns the stream ID of the stream whose capacity will
be released by this <code>FlowControl</code>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.available_capacity" class="method has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#505-507">source</a><h4 class="code-header">pub fn <a href="#method.available_capacity" class="fnname">available_capacity</a>(&amp;self) -&gt; isize</h4></section></summary><div class="docblock"><p>Get the current available capacity of data this stream <em>could</em> receive.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.used_capacity" class="method has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#512-514">source</a><h4 class="code-header">pub fn <a href="#method.used_capacity" class="fnname">used_capacity</a>(&amp;self) -&gt; usize</h4></section></summary><div class="docblock"><p>Get the currently <em>used</em> capacity for this stream.</p>
<p>This is the amount of bytes that can be released back to the remote.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.release_capacity" class="method has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#532-539">source</a><h4 class="code-header">pub fn <a href="#method.release_capacity" class="fnname">release_capacity</a>(&amp;mut self, sz: usize) -&gt; Result&lt;(), <a class="struct" href="struct.Error.html" title="struct h2::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Release window capacity back to remote stream.</p>
<p>This releases capacity back to the stream level and the connection level
windows. Both window sizes will be increased by <code>sz</code>.</p>
<p>See <a href="#">struct level</a> documentation for more details.</p>
<h5 id="errors"><a href="#errors">Errors</a></h5>
<p>This function errors if increasing the receive window size by <code>sz</code> would
result in a window size greater than the target window size. In other
words, the caller cannot release more capacity than data has been
received. If 1024 bytes of data have been received, at most 1024 bytes
can be released.</p>
</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Clone-for-FlowControl" class="impl has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#194">source</a><a href="#impl-Clone-for-FlowControl" class="anchor"></a><h3 class="code-header">impl Clone for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#194">source</a><a href="#method.clone" class="anchor"></a><h4 class="code-header">fn <a class="fnname">clone</a>(&amp;self) -&gt; <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h4></section></summary><div class='docblock'>Returns a copy of the value. <a>Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_from" class="method trait-impl has-srclink"><span class="since rightside" title="Stable since Rust version 1.0.0">1.0.0</span><a href="#method.clone_from" class="anchor"></a><h4 class="code-header">const fn <a class="fnname">clone_from</a>(&amp;mut self, source: &amp;Self)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug-for-FlowControl" class="impl has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#194">source</a><a href="#impl-Debug-for-FlowControl" class="anchor"></a><h3 class="code-header">impl Debug for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/h2/share.rs.html#194">source</a><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a class="fnname">fmt</a>(&amp;self, f: &amp;mut Formatter&lt;'_&gt;) -&gt; Result</h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a>Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-FlowControl" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-FlowControl" class="anchor"></a><h3 class="code-header">impl RefUnwindSafe for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section><section id="impl-Send-for-FlowControl" class="impl has-srclink"><a href="#impl-Send-for-FlowControl" class="anchor"></a><h3 class="code-header">impl Send for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section><section id="impl-Sync-for-FlowControl" class="impl has-srclink"><a href="#impl-Sync-for-FlowControl" class="anchor"></a><h3 class="code-header">impl Sync for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section><section id="impl-Unpin-for-FlowControl" class="impl has-srclink"><a href="#impl-Unpin-for-FlowControl" class="anchor"></a><h3 class="code-header">impl Unpin for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section><section id="impl-UnwindSafe-for-FlowControl" class="impl has-srclink"><a href="#impl-UnwindSafe-for-FlowControl" class="anchor"></a><h3 class="code-header">impl UnwindSafe for <a class="struct" href="struct.FlowControl.html" title="struct h2::FlowControl">FlowControl</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any-for-FlowControl" class="impl has-srclink"><a href="#impl-Any-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Any for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a class="fnname">type_id</a>(&amp;self) -&gt; TypeId</h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-Borrow%3CT%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Borrow&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow</a>(&amp;self) -&gt; &amp;T</h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-BorrowMut%3CT%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; BorrowMut&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow_mut</a>(&amp;mut self) -&gt; &amp;mut T</h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-From%3CT%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; From&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Instrument-for-FlowControl" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#276">source</a><a href="#impl-Instrument-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="../tracing/instrument/trait.Instrument.html" title="trait tracing::instrument::Instrument">Instrument</a> for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.instrument" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#82">source</a><a href="#method.instrument" class="anchor"></a><h4 class="code-header">fn <a href="../tracing/instrument/trait.Instrument.html#method.instrument" class="fnname">instrument</a>(self, span: <a class="struct" href="../tracing/span/struct.Span.html" title="struct tracing::span::Span">Span</a>) -&gt; <a class="struct" href="../tracing/instrument/struct.Instrumented.html" title="struct tracing::instrument::Instrumented">Instrumented</a>&lt;Self&gt;</h4></section></summary><div class='docblock'>Instruments this type with the provided <a href="../tracing/span/struct.Span.html" title="Span"><code>Span</code></a>, returning an
<code>Instrumented</code> wrapper. <a href="../tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#121">source</a><a href="#method.in_current_span" class="anchor"></a><h4 class="code-header">fn <a href="../tracing/instrument/trait.Instrument.html#method.in_current_span" class="fnname">in_current_span</a>(self) -&gt; <a class="struct" href="../tracing/instrument/struct.Instrumented.html" title="struct tracing::instrument::Instrumented">Instrumented</a>&lt;Self&gt;</h4></section></summary><div class='docblock'>Instruments this type with the <a href="../tracing/span/struct.Span.html#method.current">current</a> <a href="../tracing/span/struct.Span.html"><code>Span</code></a>, returning an
<code>Instrumented</code> wrapper. <a href="../tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-Into%3CU%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; Into&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: From&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">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>[From]&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-ToOwned-for-FlowControl" class="impl has-srclink"><a href="#impl-ToOwned-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; ToOwned for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: Clone,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Owned" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Owned</a> = T</h4></section></summary><div class='docblock'>The resulting type after obtaining ownership.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_owned" class="method trait-impl has-srclink"><a href="#method.to_owned" class="anchor"></a><h4 class="code-header">fn <a class="fnname">to_owned</a>(&amp;self) -&gt; T</h4></section></summary><div class='docblock'>Creates owned data from borrowed data, usually by cloning. <a>Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_into" class="method trait-impl has-srclink"><a href="#method.clone_into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">clone_into</a>(&amp;self, target: &amp;mut T)</h4></section></summary><div class='docblock'>Uses borrowed data to replace owned data, usually by cloning. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-TryFrom%3CU%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryFrom&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: Into&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = Infallible</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_from</a>(value: U) -&gt; Result&lt;T, &lt;T as TryFrom&lt;U&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-FlowControl" class="impl has-srclink"><a href="#impl-TryInto%3CU%3E-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryInto&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: TryFrom&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = &lt;U as TryFrom&lt;T&gt;&gt;::Error</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_into</a>(self) -&gt; Result&lt;U, &lt;U as TryFrom&lt;T&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-FlowControl" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#334">source</a><a href="#impl-WithSubscriber-for-FlowControl" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="../tracing/instrument/trait.WithSubscriber.html" title="trait tracing::instrument::WithSubscriber">WithSubscriber</a> for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.with_subscriber" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#169-171">source</a><a href="#method.with_subscriber" class="anchor"></a><h4 class="code-header">fn <a href="../tracing/instrument/trait.WithSubscriber.html#method.with_subscriber" class="fnname">with_subscriber</a>&lt;S&gt;(self, subscriber: S) -&gt; <a class="struct" href="../tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch">WithDispatch</a>&lt;Self&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;S: Into&lt;<a class="struct" href="../tracing_core/dispatcher/struct.Dispatch.html" title="struct tracing_core::dispatcher::Dispatch">Dispatch</a>&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="../tracing_core/subscriber/trait.Subscriber.html"><code>Subscriber</code></a> to this type, returning a
<a href="../tracing/instrument/struct.WithDispatch.html" title="WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="../tracing/instrument/trait.WithSubscriber.html#method.with_subscriber">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing/instrument.rs.html#221">source</a><a href="#method.with_current_subscriber" class="anchor"></a><h4 class="code-header">fn <a href="../tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber" class="fnname">with_current_subscriber</a>(self) -&gt; <a class="struct" href="../tracing/instrument/struct.WithDispatch.html" title="struct tracing::instrument::WithDispatch">WithDispatch</a>&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="../tracing/dispatcher/index.html#setting-the-default-subscriber">default</a> <a href="../tracing_core/subscriber/trait.Subscriber.html"><code>Subscriber</code></a> to this type, returning a
<a href="../tracing/instrument/struct.WithDispatch.html" title="WithDispatch"><code>WithDispatch</code></a> wrapper. <a href="../tracing/instrument/trait.WithSubscriber.html#method.with_current_subscriber">Read more</a></div></details></div></details></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="h2" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>