blob: 329e788107ff23768a0767a1e2aff5e4eecd0fd0 [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="Receives values from the associated `Sender`."><meta name="keywords" content="rust, rustlang, rust-lang, Receiver"><title>Receiver in tokio::sync::watch - 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="../../../tokio/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="../../../tokio/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Receiver</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.borrow">borrow</a></li><li><a href="#method.borrow_and_update">borrow_and_update</a></li><li><a href="#method.changed">changed</a></li><li><a href="#method.has_changed">has_changed</a></li><li><a href="#method.same_channel">same_channel</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block"><li><a href="#impl-Clone-for-Receiver%3CT%3E">Clone</a></li><li><a href="#impl-Debug-for-Receiver%3CT%3E">Debug</a></li><li><a href="#impl-Drop-for-Receiver%3CT%3E">Drop</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-Receiver%3CT%3E">!RefUnwindSafe</a></li><li><a href="#impl-Send-for-Receiver%3CT%3E">Send</a></li><li><a href="#impl-Sync-for-Receiver%3CT%3E">Sync</a></li><li><a href="#impl-Unpin-for-Receiver%3CT%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-Receiver%3CT%3E">!UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-Receiver%3CT%3E">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-Receiver%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-Receiver%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-Receiver%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-Receiver%3CT%3E">Into&lt;U&gt;</a></li><li><a href="#impl-ToOwned-for-Receiver%3CT%3E">ToOwned</a></li><li><a href="#impl-TryFrom%3CU%3E-for-Receiver%3CT%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-Receiver%3CT%3E">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In tokio::sync::watch</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">tokio</a>::<wbr><a href="../index.html">sync</a>::<wbr><a href="index.html">watch</a>::<wbr><a class="struct" href="#">Receiver</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/tokio/sync/watch.rs.html#74-80">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 Receiver&lt;T&gt; { /* private fields */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Receives values from the associated <a href="struct.Sender.html"><code>Sender</code></a>.</p>
<p>Instances are created by the <a href="fn.channel.html"><code>channel</code></a> function.</p>
<p>To turn this receiver into a <code>Stream</code>, you can use the <a href="https://docs.rs/tokio-stream/0.1/tokio_stream/wrappers/struct.WatchStream.html"><code>WatchStream</code></a>
wrapper.</p>
</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-Receiver%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#339-563">source</a><a href="#impl-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#388-397">source</a><h4 class="code-header">pub fn <a href="#method.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="struct" href="struct.Ref.html" title="struct tokio::sync::watch::Ref">Ref</a>&lt;'_, T&gt;</h4></section></summary><div class="docblock"><p>Returns a reference to the most recently sent value.</p>
<p>This method does not mark the returned value as seen, so future calls to
<a href="struct.Receiver.html#method.changed"><code>changed</code></a> may return immediately even if you have already seen the
value with a call to <code>borrow</code>.</p>
<p>Outstanding borrows hold a read lock on the inner value. This means that
long-lived borrows could cause the producer half to block. It is recommended
to keep the borrow as short-lived as possible. Additionally, if you are
running in an environment that allows <code>!Send</code> futures, you must ensure that
the returned <code>Ref</code> type is never held alive across an <code>.await</code> point,
otherwise, it can lead to a deadlock.</p>
<p>The priority policy of the lock is dependent on the underlying lock
implementation, and this type does not guarantee that any particular policy
will be used. In particular, a producer which is waiting to acquire the lock
in <code>send</code> might or might not block concurrent calls to <code>borrow</code>, e.g.:</p>
<details><summary>Potential deadlock example</summary>
<div class="example-wrap"><pre class="language-text"><code>// Task 1 (on thread A) | // Task 2 (on thread B)
let _ref1 = rx.borrow(); |
| // will block
| let _ = tx.send(());
// may deadlock |
let _ref2 = rx.borrow(); |</code></pre></div></details>
<h5 id="examples"><a href="#examples">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::sync::watch;
<span class="kw">let </span>(<span class="kw">_</span>, rx) = watch::channel(<span class="string">&quot;hello&quot;</span>);
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>rx.borrow(), <span class="string">&quot;hello&quot;</span>);</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_and_update" class="method has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#431-443">source</a><h4 class="code-header">pub fn <a href="#method.borrow_and_update" class="fnname">borrow_and_update</a>(&amp;mut self) -&gt; <a class="struct" href="struct.Ref.html" title="struct tokio::sync::watch::Ref">Ref</a>&lt;'_, T&gt;</h4></section></summary><div class="docblock"><p>Returns a reference to the most recently sent value and marks that value
as seen.</p>
<p>This method marks the current value as seen. Subsequent calls to <a href="struct.Receiver.html#method.changed"><code>changed</code></a>
will not return immediately until the <a href="struct.Sender.html" title="Sender"><code>Sender</code></a> has modified the shared
value again.</p>
<p>Outstanding borrows hold a read lock on the inner value. This means that
long-lived borrows could cause the producer half to block. It is recommended
to keep the borrow as short-lived as possible. Additionally, if you are
running in an environment that allows <code>!Send</code> futures, you must ensure that
the returned <code>Ref</code> type is never held alive across an <code>.await</code> point,
otherwise, it can lead to a deadlock.</p>
<p>The priority policy of the lock is dependent on the underlying lock
implementation, and this type does not guarantee that any particular policy
will be used. In particular, a producer which is waiting to acquire the lock
in <code>send</code> might or might not block concurrent calls to <code>borrow</code>, e.g.:</p>
<details><summary>Potential deadlock example</summary>
<div class="example-wrap"><pre class="language-text"><code>// Task 1 (on thread A) | // Task 2 (on thread B)
let _ref1 = rx1.borrow_and_update(); |
| // will block
| let _ = tx.send(());
// may deadlock |
let _ref2 = rx2.borrow_and_update(); |</code></pre></div></details>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.has_changed" class="method has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#475-485">source</a><h4 class="code-header">pub fn <a href="#method.has_changed" class="fnname">has_changed</a>(&amp;self) -&gt; Result&lt;bool, <a class="struct" href="error/struct.RecvError.html" title="struct tokio::sync::watch::error::RecvError">RecvError</a>&gt;</h4></section></summary><div class="docblock"><p>Checks if this channel contains a message that this receiver has not yet
seen. The new value is not marked as seen.</p>
<p>Although this method is called <code>has_changed</code>, it does not check new
messages for equality, so this call will return true even if the new
message is equal to the old message.</p>
<p>Returns an error if the channel has been closed.</p>
<h5 id="examples-1"><a href="#examples-1">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::sync::watch;
<span class="attribute">#[tokio::main]
</span><span class="kw">async fn </span>main() {
<span class="kw">let </span>(tx, <span class="kw-2">mut </span>rx) = watch::channel(<span class="string">&quot;hello&quot;</span>);
tx.send(<span class="string">&quot;goodbye&quot;</span>).unwrap();
<span class="macro">assert!</span>(rx.has_changed().unwrap());
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>rx.borrow_and_update(), <span class="string">&quot;goodbye&quot;</span>);
<span class="comment">// The value has been marked as seen
</span><span class="macro">assert!</span>(!rx.has_changed().unwrap());
drop(tx);
<span class="comment">// The `tx` handle has been dropped
</span><span class="macro">assert!</span>(rx.has_changed().is_err());
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.changed" class="method has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#526-540">source</a><h4 class="code-header">pub async fn <a href="#method.changed" class="fnname">changed</a>(&amp;mut self) -&gt; Result&lt;(), <a class="struct" href="error/struct.RecvError.html" title="struct tokio::sync::watch::error::RecvError">RecvError</a>&gt;</h4></section></summary><div class="docblock"><p>Waits for a change notification, then marks the newest value as seen.</p>
<p>If the newest value in the channel has not yet been marked seen when
this method is called, the method marks that value seen and returns
immediately. If the newest value has already been marked seen, then the
method sleeps until a new message is sent by the <a href="struct.Sender.html"><code>Sender</code></a> connected to
this <code>Receiver</code>, or until the <a href="struct.Sender.html"><code>Sender</code></a> is dropped.</p>
<p>This method returns an error if and only if the <a href="struct.Sender.html"><code>Sender</code></a> is dropped.</p>
<h5 id="cancel-safety"><a href="#cancel-safety">Cancel safety</a></h5>
<p>This method is cancel safe. If you use it as the event in a
<a href="../../macro.select.html"><code>tokio::select!</code></a> statement and some other branch
completes first, then it is guaranteed that no values have been marked
seen by this call to <code>changed</code>.</p>
<h5 id="examples-2"><a href="#examples-2">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::sync::watch;
<span class="attribute">#[tokio::main]
</span><span class="kw">async fn </span>main() {
<span class="kw">let </span>(tx, <span class="kw-2">mut </span>rx) = watch::channel(<span class="string">&quot;hello&quot;</span>);
tokio::spawn(<span class="kw">async move </span>{
tx.send(<span class="string">&quot;goodbye&quot;</span>).unwrap();
});
<span class="macro">assert!</span>(rx.changed().<span class="kw">await</span>.is_ok());
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>rx.borrow(), <span class="string">&quot;goodbye&quot;</span>);
<span class="comment">// The `tx` handle has been dropped
</span><span class="macro">assert!</span>(rx.changed().<span class="kw">await</span>.is_err());
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.same_channel" class="method has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#554-556">source</a><h4 class="code-header">pub fn <a href="#method.same_channel" class="fnname">same_channel</a>(&amp;self, other: &amp;Self) -&gt; bool</h4></section></summary><div class="docblock"><p>Returns <code>true</code> if receivers belong to the same channel.</p>
<h5 id="examples-3"><a href="#examples-3">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>(tx, rx) = tokio::sync::watch::channel(<span class="bool-val">true</span>);
<span class="kw">let </span>rx2 = rx.clone();
<span class="macro">assert!</span>(rx.same_channel(<span class="kw-2">&amp;</span>rx2));
<span class="kw">let </span>(tx3, rx3) = tokio::sync::watch::channel(<span class="bool-val">true</span>);
<span class="macro">assert!</span>(!rx3.same_channel(<span class="kw-2">&amp;</span>rx2));</code></pre></div>
</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-Receiver%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#587-594">source</a><a href="#impl-Clone-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Clone for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</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/tokio/sync/watch.rs.html#588-593">source</a><a href="#method.clone" class="anchor"></a><h4 class="code-header">fn <a class="fnname">clone</a>(&amp;self) -&gt; Self</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-Receiver%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#73">source</a><a href="#impl-Debug-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T:&nbsp;Debug&gt; Debug for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</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/tokio/sync/watch.rs.html#73">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><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Drop-for-Receiver%3CT%3E" class="impl has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#596-605">source</a><a href="#impl-Drop-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Drop for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.drop" class="method trait-impl has-srclink"><a class="srclink rightside" href="../../../src/tokio/sync/watch.rs.html#597-604">source</a><a href="#method.drop" class="anchor"></a><h4 class="code-header">fn <a class="fnname">drop</a>(&amp;mut self)</h4></section></summary><div class='docblock'>Executes the destructor for this type. <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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; !RefUnwindSafe for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</h3></section><section id="impl-Send-for-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Send-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Send for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: Send + Sync,</span></h3></section><section id="impl-Sync-for-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Sync-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Sync for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: Send + Sync,</span></h3></section><section id="impl-Unpin-for-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Unpin-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Unpin for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</h3></section><section id="impl-UnwindSafe-for-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-UnwindSafe-for-Receiver%3CT%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; !UnwindSafe for <a class="struct" href="struct.Receiver.html" title="struct tokio::sync::watch::Receiver">Receiver</a>&lt;T&gt;</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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Any-for-Receiver%3CT%3E" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Borrow%3CT%3E-for-Receiver%3CT%3E" 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-1" 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-1" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-BorrowMut%3CT%3E-for-Receiver%3CT%3E" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-From%3CT%3E-for-Receiver%3CT%3E" 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-Into%3CU%3E-for-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-Into%3CU%3E-for-Receiver%3CT%3E" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-ToOwned-for-Receiver%3CT%3E" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-TryFrom%3CU%3E-for-Receiver%3CT%3E" 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-Receiver%3CT%3E" class="impl has-srclink"><a href="#impl-TryInto%3CU%3E-for-Receiver%3CT%3E" 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></div></section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="tokio" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>