Files
google-apis-rs/h2/struct.SendStream.html
2021-04-02 00:20:57 +08:00

159 lines
36 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="API documentation for the Rust `SendStream` struct in crate `h2`."><meta name="keywords" content="rust, rustlang, rust-lang, SendStream"><title>h2::SendStream - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc struct"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../h2/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Struct SendStream</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#implementations">Methods</a><div class="sidebar-links"><a href="#method.capacity">capacity</a><a href="#method.poll_capacity">poll_capacity</a><a href="#method.poll_reset">poll_reset</a><a href="#method.reserve_capacity">reserve_capacity</a><a href="#method.send_data">send_data</a><a href="#method.send_reset">send_reset</a><a href="#method.send_trailers">send_trailers</a><a href="#method.stream_id">stream_id</a></div><a class="sidebar-title" href="#trait-implementations">Trait Implementations</a><div class="sidebar-links"><a href="#impl-Debug">Debug</a></div><a class="sidebar-title" href="#synthetic-implementations">Auto Trait Implementations</a><div class="sidebar-links"><a href="#impl-RefUnwindSafe">RefUnwindSafe</a><a href="#impl-Send">Send</a><a href="#impl-Sync">Sync</a><a href="#impl-Unpin">Unpin</a><a href="#impl-UnwindSafe">UnwindSafe</a></div><a class="sidebar-title" href="#blanket-implementations">Blanket Implementations</a><div class="sidebar-links"><a href="#impl-Any">Any</a><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a><a href="#impl-From%3CT%3E">From&lt;T&gt;</a><a href="#impl-Instrument">Instrument</a><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></div></div><p class="location"><a href="index.html">h2</a></p><div id="sidebar-vars" data-name="SendStream" data-ty="struct" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Struct <a href="index.html">h2</a>::<wbr><a class="struct" href="">SendStream</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/h2/share.rs.html#98-100" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class="rust struct">pub struct SendStream&lt;B:&nbsp;<a class="trait" href="../bytes/buf/buf_impl/trait.Buf.html" title="trait bytes::buf::buf_impl::Buf">Buf</a>&gt; { /* fields omitted */ }</pre></div><div class="docblock"><p>Sends the body stream and trailers to the remote peer.</p>
<h1 id="overview" class="section-header"><a href="#overview">Overview</a></h1>
<p>A <code>SendStream</code> is provided by <a href="client/struct.SendRequest.html"><code>SendRequest</code></a> and <a href="server/struct.SendResponse.html"><code>SendResponse</code></a> once the
HTTP/2.0 message header has been sent sent. It is used to stream the message
body and send the message trailers. See method level documentation for more
details.</p>
<p>The <code>SendStream</code> instance is also used to manage outbound flow control.</p>
<p>If a <code>SendStream</code> is dropped without explicitly closing the send stream, a
<code>RST_STREAM</code> frame will be sent. This essentially cancels the request /
response exchange.</p>
<p>The ways to explicitly close the send stream are:</p>
<ul>
<li>Set <code>end_of_stream</code> to true when calling <a href="client/struct.SendRequest.html#method.send_request"><code>send_request</code></a>,
<a href="server/struct.SendResponse.html#method.send_response"><code>send_response</code></a>, or <a href="#method.send_data"><code>send_data</code></a>.</li>
<li>Send trailers with <a href="#method.send_trailers"><code>send_trailers</code></a>.</li>
<li>Explicitly reset the stream with <a href="#method.send_reset"><code>send_reset</code></a>.</li>
</ul>
<h1 id="flow-control" class="section-header"><a href="#flow-control">Flow control</a></h1>
<p>In HTTP/2.0, data cannot be sent to the remote peer unless there is
available window capacity on both the stream and the connection. When a data
frame is sent, both the stream window and the connection window are
decremented. When the stream level window reaches zero, no further data can
be sent on that stream. When the connection level window reaches zero, no
further data can be sent on any stream for that connection.</p>
<p>When the remote peer is ready to receive more data, it sends <code>WINDOW_UPDATE</code>
frames. These frames increment the windows. See the <a href="http://httpwg.org/specs/rfc7540.html#FlowControl">specification</a> for more
details on the principles of HTTP/2.0 flow control.</p>
<p>The implications for sending data are that the caller <strong>should</strong> ensure that
both the stream and the connection has available window capacity before
loading the data to send into memory. The <code>SendStream</code> instance provides the
necessary APIs to perform this logic. This, however, is not an obligation.
If the caller attempts to send data on a stream when there is no available
window capacity, the library will buffer the data until capacity becomes
available, at which point the buffer will be flushed to the connection.</p>
<p><strong>NOTE</strong>: There is no bound on the amount of data that the library will
buffer. If you are sending large amounts of data, you really should hook
into the flow control lifecycle. Otherwise, you risk using up significant
amounts of memory.</p>
<p>To hook into the flow control lifecycle, the caller signals to the library
that it intends to send data by calling <a href="#method.reserve_capacity"><code>reserve_capacity</code></a>, specifying the
amount of data, in octets, that the caller intends to send. After this,
<code>poll_capacity</code> is used to be notified when the requested capacity is
assigned to the stream. Once <a href="#method.poll_capacity"><code>poll_capacity</code></a> returns <code>Ready</code> with the number
of octets available to the stream, the caller is able to actually send the
data using <a href="#method.send_data"><code>send_data</code></a>.</p>
<p>Because there is also a connection level window that applies to <strong>all</strong>
streams on a connection, when capacity is assigned to a stream (indicated by
<code>poll_capacity</code> returning <code>Ready</code>), this capacity is reserved on the
connection and will <strong>not</strong> be assigned to any other stream. If data is
never written to the stream, that capacity is effectively lost to other
streams and this introduces the risk of deadlocking a connection.</p>
<p>To avoid throttling data on a connection, the caller should not reserve
capacity until ready to send data and once any capacity is assigned to the
stream, the caller should immediately send data consuming this capacity.
There is no guarantee as to when the full capacity requested will become
available. For example, if the caller requests 64 KB of data and 512 bytes
become available, the caller should immediately send 512 bytes of data.</p>
<p>See <a href="#method.reserve_capacity"><code>reserve_capacity</code></a> documentation for more details.</p>
</div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><h3 id="impl" class="impl"><code class="in-band">impl&lt;B:&nbsp;<a class="trait" href="../bytes/buf/buf_impl/trait.Buf.html" title="trait bytes::buf::buf_impl::Buf">Buf</a>&gt; <a class="struct" href="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt;</code><a href="#impl" class="anchor"></a><a class="srclink" href="../src/h2/share.rs.html#222-383" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.reserve_capacity" class="method"><code>pub fn <a href="#method.reserve_capacity" class="fnname">reserve_capacity</a>(&amp;mut self, capacity: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</code><a class="srclink" href="../src/h2/share.rs.html#285-288" title="goto source code">[src]</a></h4><div class="docblock"><p>Requests capacity to send data.</p>
<p>This function is used to express intent to send data. This requests
connection level capacity. Once the capacity is available, it is
assigned to the stream and not reused by other streams.</p>
<p>This function may be called repeatedly. The <code>capacity</code> argument is the
<strong>total</strong> amount of requested capacity. Sequential calls to
<code>reserve_capacity</code> are <em>not</em> additive. Given the following:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">100</span>);
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">200</span>);</pre></div>
<p>After the second call to <code>reserve_capacity</code>, the <em>total</em> requested
capacity will be 200.</p>
<p><code>reserve_capacity</code> is also used to cancel previous capacity requests.
Given the following:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">100</span>);
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">0</span>);</pre></div>
<p>After the second call to <code>reserve_capacity</code>, the <em>total</em> requested
capacity will be 0, i.e. there is no requested capacity for the stream.</p>
<p>If <code>reserve_capacity</code> is called with a lower value than the amount of
capacity <strong>currently</strong> assigned to the stream, this capacity will be
returned to the connection to be re-assigned to other streams.</p>
<p>Also, the amount of capacity that is reserved gets decremented as data
is sent. For example:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">100</span>);
<span class="ident">send_stream</span>.<span class="ident">send_data</span>(<span class="string">b&quot;hello&quot;</span>, <span class="bool-val">false</span>).<span class="ident">unwrap</span>();
<span class="comment">// At this point, the total amount of requested capacity is 95 bytes.</span>
<span class="comment">// Calling `reserve_capacity` with `100` again essentially requests an</span>
<span class="comment">// additional 5 bytes.</span>
<span class="ident">send_stream</span>.<span class="ident">reserve_capacity</span>(<span class="number">100</span>);</pre></div>
<p>See <a href="struct.SendStream.html#flow-control">Flow control</a> for an overview
of how send flow control works.</p>
</div><h4 id="method.capacity" class="method"><code>pub fn <a href="#method.capacity" class="fnname">capacity</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></code><a class="srclink" href="../src/h2/share.rs.html#294-296" title="goto source code">[src]</a></h4><div class="docblock"><p>Returns the stream's current send capacity.</p>
<p>This allows the caller to check the current amount of available capacity
before sending data.</p>
</div><h4 id="method.poll_capacity" class="method"><code>pub fn <a href="#method.poll_capacity" class="fnname">poll_capacity</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<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="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.usize.html">usize</a>, <a class="struct" href="../h2/struct.Error.html" title="struct h2::Error">Error</a>&gt;&gt;&gt;</code><a class="srclink" href="../src/h2/share.rs.html#312-317" title="goto source code">[src]</a></h4><div class="docblock"><p>Requests to be notified when the stream's capacity increases.</p>
<p>Before calling this, capacity should be requested with
<code>reserve_capacity</code>. Once capacity is requested, the connection will
assign capacity to the stream <strong>as it becomes available</strong>. There is no
guarantee as to when and in what increments capacity gets assigned to
the stream.</p>
<p>To get notified when the available capacity increases, the caller calls
<code>poll_capacity</code>, which returns <code>Ready(Some(n))</code> when <code>n</code> has been
increased by the connection. Note that <code>n</code> here represents the <strong>total</strong>
amount of assigned capacity at that point in time. It is also possible
that <code>n</code> is lower than the previous call if, since then, the caller has
sent data.</p>
</div><h4 id="method.send_data" class="method"><code>pub fn <a href="#method.send_data" class="fnname">send_data</a>(&amp;mut self, data: B, end_of_stream: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&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="../h2/struct.Error.html" title="struct h2::Error">Error</a>&gt;</code><a class="srclink" href="../src/h2/share.rs.html#334-338" title="goto source code">[src]</a></h4><div class="docblock"><p>Sends a single data frame to the remote peer.</p>
<p>This function may be called repeatedly as long as <code>end_of_stream</code> is set
to <code>false</code>. Setting <code>end_of_stream</code> to <code>true</code> sets the end stream flag
on the data frame. Any further calls to <code>send_data</code> or <code>send_trailers</code>
will return an <a href="struct.Error.html"><code>Error</code></a>.</p>
<p><code>send_data</code> can be called without reserving capacity. In this case, the
data is buffered and the capacity is implicitly requested. Once the
capacity becomes available, the data is flushed to the connection.
However, this buffering is unbounded. As such, sending large amounts of
data without reserving capacity before hand could result in large
amounts of data being buffered in memory.</p>
</div><h4 id="method.send_trailers" class="method"><code>pub fn <a href="#method.send_trailers" class="fnname">send_trailers</a>(&amp;mut self, trailers: <a class="struct" href="../http/header/map/struct.HeaderMap.html" title="struct http::header::map::HeaderMap">HeaderMap</a>) -&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="../h2/struct.Error.html" title="struct h2::Error">Error</a>&gt;</code><a class="srclink" href="../src/h2/share.rs.html#344-346" title="goto source code">[src]</a></h4><div class="docblock"><p>Sends trailers to the remote peer.</p>
<p>Sending trailers implicitly closes the send stream. Once the send stream
is closed, no more data can be sent.</p>
</div><h4 id="method.send_reset" class="method"><code>pub fn <a href="#method.send_reset" class="fnname">send_reset</a>(&amp;mut self, reason: <a class="struct" href="../h2/struct.Reason.html" title="struct h2::Reason">Reason</a>)</code><a class="srclink" href="../src/h2/share.rs.html#355-357" title="goto source code">[src]</a></h4><div class="docblock"><p>Resets the stream.</p>
<p>This cancels the request / response exchange. If the response has not
yet been received, the associated <code>ResponseFuture</code> will return an
<a href="struct.Error.html"><code>Error</code></a> to reflect the canceled exchange.</p>
</div><h4 id="method.poll_reset" class="method"><code>pub fn <a href="#method.poll_reset" class="fnname">poll_reset</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<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="struct" href="../h2/struct.Reason.html" title="struct h2::Reason">Reason</a>, <a class="struct" href="../h2/struct.Error.html" title="struct h2::Error">Error</a>&gt;&gt;</code><a class="srclink" href="../src/h2/share.rs.html#371-373" title="goto source code">[src]</a></h4><div class="docblock"><p>Polls to be notified when the client resets this stream.</p>
<p>If stream is still open, this returns <code>Poll::Pending</code>, and
registers the task to be notified if a <code>RST_STREAM</code> is received.</p>
<p>If a <code>RST_STREAM</code> frame is received for this stream, calling this
method will yield the <code>Reason</code> for the reset.</p>
<h1 id="error" class="section-header"><a href="#error">Error</a></h1>
<p>If connection sees an error, this returns that error instead of a
<code>Reason</code>.</p>
</div><h4 id="method.stream_id" class="method"><code>pub fn <a href="#method.stream_id" class="fnname">stream_id</a>(&amp;self) -&gt; <a class="struct" href="../h2/struct.StreamId.html" title="struct h2::StreamId">StreamId</a></code><a class="srclink" href="../src/h2/share.rs.html#380-382" title="goto source code">[src]</a></h4><div class="docblock"><p>Returns the stream ID of this <code>SendStream</code>.</p>
<h1 id="panics" class="section-header"><a href="#panics">Panics</a></h1>
<p>If the lock on the stream store has been poisoned.</p>
</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><h3 id="impl-Debug" class="impl"><code class="in-band">impl&lt;B:&nbsp;<a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> + <a class="trait" href="../bytes/buf/buf_impl/trait.Buf.html" title="trait bytes::buf::buf_impl::Buf">Buf</a>&gt; <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="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt;</code><a href="#impl-Debug" class="anchor"></a><a class="srclink" href="../src/h2/share.rs.html#97" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.fmt" class="method hidden"><code>fn <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">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="type" href="https://doc.rust-lang.org/nightly/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></code><a class="srclink" href="../src/h2/share.rs.html#97" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>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></p>
</div></div></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"><h3 id="impl-RefUnwindSafe" class="impl"><code class="in-band">impl&lt;B&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.RefUnwindSafe.html" title="trait std::panic::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt;</code><a href="#impl-RefUnwindSafe" class="anchor"></a><a class="srclink" href="../src/h2/lib.rs.html#1" title="goto source code">[src]</a></h3><div class="impl-items"></div><h3 id="impl-Send" class="impl"><code class="in-band">impl&lt;B&gt; <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="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,&nbsp;</span></code><a href="#impl-Send" class="anchor"></a><a class="srclink" href="../src/h2/lib.rs.html#1" title="goto source code">[src]</a></h3><div class="impl-items"></div><h3 id="impl-Sync" class="impl"><code class="in-band">impl&lt;B&gt; <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="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,&nbsp;</span></code><a href="#impl-Sync" class="anchor"></a><a class="srclink" href="../src/h2/lib.rs.html#1" title="goto source code">[src]</a></h3><div class="impl-items"></div><h3 id="impl-Unpin" class="impl"><code class="in-band">impl&lt;B&gt; <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="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt;</code><a href="#impl-Unpin" class="anchor"></a><a class="srclink" href="../src/h2/lib.rs.html#1" title="goto source code">[src]</a></h3><div class="impl-items"></div><h3 id="impl-UnwindSafe" class="impl"><code class="in-band">impl&lt;B&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a> for <a class="struct" href="../h2/struct.SendStream.html" title="struct h2::SendStream">SendStream</a>&lt;B&gt;</code><a href="#impl-UnwindSafe" class="anchor"></a><a class="srclink" href="../src/h2/lib.rs.html#1" title="goto source code">[src]</a></h3><div class="impl-items"></div></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><h3 id="impl-Any" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-Any" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#131-135" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.type_id" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id" class="fnname">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></code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#132" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>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></p>
</div></div><h3 id="impl-Borrow%3CT%3E" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-Borrow%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#207-211" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.borrow" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#208" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></div><h3 id="impl-BorrowMut%3CT%3E" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#214-218" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.borrow_mut" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#215" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>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></p>
</div></div><h3 id="impl-From%3CT%3E" class="impl"><code class="in-band">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</code><a href="#impl-From%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#545-549" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.from" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fnname">from</a>(t: T) -&gt; T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#546" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-Instrument" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="../tracing/instrument/trait.Instrument.html" title="trait tracing::instrument::Instrument">Instrument</a> for T</code><a href="#impl-Instrument" class="anchor"></a><a class="srclink" href="../src/tracing/instrument.rs.html#155" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.instrument" class="method hidden"><code>pub 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;</code><a class="srclink" href="../src/tracing/instrument.rs.html#38" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Instruments this type with the provided <code>Span</code>, returning an
<code>Instrumented</code> wrapper. <a href="../tracing/instrument/trait.Instrument.html#method.instrument">Read more</a></p>
</div><h4 id="method.in_current_span" class="method hidden"><code>pub 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;</code><a class="srclink" href="../src/tracing/instrument.rs.html#74" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Instruments this type with the <a href="../struct.Span.html#method.current">current</a> <code>Span</code>, returning an
<code>Instrumented</code> wrapper. <a href="../tracing/instrument/trait.Instrument.html#method.in_current_span">Read more</a></p>
</div></div><h3 id="impl-Into%3CU%3E" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;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;,&nbsp;</span></code><a href="#impl-Into%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#534-541" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.into" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into" class="fnname">into</a>(self) -&gt; U</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#538" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-TryFrom%3CU%3E" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;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;,&nbsp;</span></code><a href="#impl-TryFrom%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#582-591" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="associatedtype.Error" class="type"><code>type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class="type">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id="method.try_from" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from" class="fnname">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="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#588" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-TryInto%3CU%3E" class="impl"><code class="in-band">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 <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;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;,&nbsp;</span></code><a href="#impl-TryInto%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#568-577" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="associatedtype.Error-1" class="type"><code>type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" class="type">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="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id="method.try_into" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into" class="fnname">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="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#574" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div></div></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="h2"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>