mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-16 13:00:40 +00:00
611 lines
157 KiB
HTML
611 lines
157 KiB
HTML
<!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 `ID` struct in crate `common_grpc`."><title>ID in common_grpc::channel_manager - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-e56847b5.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="common_grpc" data-themes="" data-resource-suffix="" data-rustdoc-version="1.92.0-nightly (fa3155a64 2025-09-30)" data-channel="nightly" data-search-js="search-e256b49e.js" data-stringdex-js="stringdex-828709d0.js" data-settings-js="settings-c38705f0.js" ><script src="../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-ce535bd0.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-263c88ec.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-044be391.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">ID</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../common_grpc/index.html">common_<wbr>grpc</a><span class="version">1.0.0-rc.2</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">ID</a></h2><h3><a href="#fields">Fields</a></h3><ul class="block structfield"><li><a href="#structfield.__private_field" title="__private_field">__private_field</a></li></ul><h3><a href="#deref-methods-AtomicU64">Methods from Deref<<wbr>Target=<wbr>Atomic<wbr>U64></a></h3><ul class="block deref-methods"><li><a href="#method.as_ptr" title="as_ptr">as_ptr</a></li><li><a href="#method.compare_and_swap" title="compare_and_swap">compare_and_swap</a></li><li><a href="#method.compare_exchange" title="compare_exchange">compare_exchange</a></li><li><a href="#method.compare_exchange_weak" title="compare_exchange_weak">compare_exchange_weak</a></li><li><a href="#method.fetch_add" title="fetch_add">fetch_add</a></li><li><a href="#method.fetch_and" title="fetch_and">fetch_and</a></li><li><a href="#method.fetch_max" title="fetch_max">fetch_max</a></li><li><a href="#method.fetch_min" title="fetch_min">fetch_min</a></li><li><a href="#method.fetch_nand" title="fetch_nand">fetch_nand</a></li><li><a href="#method.fetch_or" title="fetch_or">fetch_or</a></li><li><a href="#method.fetch_sub" title="fetch_sub">fetch_sub</a></li><li><a href="#method.fetch_update" title="fetch_update">fetch_update</a></li><li><a href="#method.fetch_xor" title="fetch_xor">fetch_xor</a></li><li><a href="#method.load" title="load">load</a></li><li><a href="#method.store" title="store">store</a></li><li><a href="#method.swap" title="swap">swap</a></li><li><a href="#method.try_update" title="try_update">try_update</a></li><li><a href="#method.update" title="update">update</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-__Deref-for-ID" title="Deref">Deref</a></li><li><a href="#impl-LazyStatic-for-ID" title="LazyStatic">LazyStatic</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-Freeze-for-ID" title="Freeze">Freeze</a></li><li><a href="#impl-RefUnwindSafe-for-ID" title="RefUnwindSafe">RefUnwindSafe</a></li><li><a href="#impl-Send-for-ID" title="Send">Send</a></li><li><a href="#impl-Sync-for-ID" title="Sync">Sync</a></li><li><a href="#impl-Unpin-for-ID" title="Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe-for-ID" title="UnwindSafe">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Allocation-for-T" title="Allocation">Allocation</a></li><li><a href="#impl-Any-for-T" title="Any">Any</a></li><li><a href="#impl-Any-for-T-1" title="Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T" title="Borrow<T>">Borrow<T></a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T" title="BorrowMut<T>">BorrowMut<T></a></li><li><a href="#impl-Conv-for-T" title="Conv">Conv</a></li><li><a href="#impl-ErasedDestructor-for-T" title="ErasedDestructor">ErasedDestructor</a></li><li><a href="#impl-FmtForward-for-T" title="FmtForward">FmtForward</a></li><li><a href="#impl-From%3CT%3E-for-T" title="From<T>">From<T></a></li><li><a href="#impl-FutureExt-for-T" title="FutureExt">FutureExt</a></li><li><a href="#impl-Instrument-for-T" title="Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E-for-T" title="Into<U>">Into<U></a></li><li><a href="#impl-IntoEither-for-T" title="IntoEither">IntoEither</a></li><li><a href="#impl-IntoRequest%3CT%3E-for-T" title="IntoRequest<T>">IntoRequest<T></a></li><li><a href="#impl-IntoRequest%3CT%3E-for-T-1" title="IntoRequest<T>">IntoRequest<T></a></li><li><a href="#impl-LayerExt%3CL%3E-for-L" title="LayerExt<L>">LayerExt<L></a></li><li><a href="#impl-LayerExt%3CL%3E-for-L-1" title="LayerExt<L>">LayerExt<L></a></li><li><a href="#impl-Pipe-for-T" title="Pipe">Pipe</a></li><li><a href="#impl-PolicyExt-for-T" title="PolicyExt">PolicyExt</a></li><li><a href="#impl-Receiver-for-P" title="Receiver">Receiver</a></li><li><a href="#impl-Same-for-T" title="Same">Same</a></li><li><a href="#impl-ServiceExt-for-T" title="ServiceExt">ServiceExt</a></li><li><a href="#impl-Tap-for-T" title="Tap">Tap</a></li><li><a href="#impl-TryConv-for-T" title="TryConv">TryConv</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T" title="TryFrom<U>">TryFrom<U></a></li><li><a href="#impl-TryInto%3CU%3E-for-T" title="TryInto<U>">TryInto<U></a></li><li><a href="#impl-VZip%3CV%3E-for-T" title="VZip<V>">VZip<V></a></li><li><a href="#impl-WithSubscriber-for-T" title="WithSubscriber">WithSubscriber</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In common_<wbr>grpc::<wbr>channel_<wbr>manager</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../index.html">common_grpc</a>::<wbr><a href="index.html">channel_manager</a></div><h1>Struct <span class="struct">ID</span> <button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../src/common_grpc/channel_manager.rs.html#42-44">Source</a> </span></div><pre class="rust item-decl"><code>struct ID {
|
|
__private_field: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>,
|
|
}</code></pre><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.__private_field" class="structfield section-header"><a href="#structfield.__private_field" class="anchor field">§</a><code>__private_field: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a></code></span><details class="toggle big-toggle" open><summary><h2 id="deref-methods-AtomicU64" class="section-header"><span>Methods from <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = <a class="struct" href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html" title="struct core::sync::atomic::AtomicU64">AtomicU64</a>></span><a href="#deref-methods-AtomicU64" class="anchor">§</a></h2></summary><div id="deref-methods-AtomicU64-1" class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.load" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.load" class="fn">load</a>(&self, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Loads a value from the atomic integer.</p>
|
|
<p><code>load</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering of this operation.
|
|
Possible values are <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> and <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
|
|
<p>Panics if <code>order</code> is <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.AcqRel" title="variant core::sync::atomic::Ordering::AcqRel"><code>AcqRel</code></a>.</p>
|
|
<h5 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>some_var = AtomicU64::new(<span class="number">5</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">5</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.store" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.store" class="fn">store</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>)</h4></section></summary><div class="docblock"><p>Stores a value into the atomic integer.</p>
|
|
<p><code>store</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering of this operation.
|
|
Possible values are <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> and <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<h5 id="panics-1"><a class="doc-anchor" href="#panics-1">§</a>Panics</h5>
|
|
<p>Panics if <code>order</code> is <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.AcqRel" title="variant core::sync::atomic::Ordering::AcqRel"><code>AcqRel</code></a>.</p>
|
|
<h5 id="examples-1"><a class="doc-anchor" href="#examples-1">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>some_var = AtomicU64::new(<span class="number">5</span>);
|
|
|
|
some_var.store(<span class="number">10</span>, Ordering::Relaxed);
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">10</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.swap" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.swap" class="fn">swap</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Stores a value into the atomic integer, returning the previous value.</p>
|
|
<p><code>swap</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-2"><a class="doc-anchor" href="#examples-2">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>some_var = AtomicU64::new(<span class="number">5</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.swap(<span class="number">10</span>, Ordering::Relaxed), <span class="number">5</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.compare_and_swap" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.compare_and_swap" class="fn">compare_and_swap</a>(&self, current: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, new: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 1.50.0: Use <code>compare_exchange</code> or <code>compare_exchange_weak</code> instead</span></div></span></summary><div class="docblock"><p>Stores a value into the atomic integer if the current value is the same as
|
|
the <code>current</code> value.</p>
|
|
<p>The return value is always the previous value. If it is equal to <code>current</code>, then the
|
|
value was updated.</p>
|
|
<p><code>compare_and_swap</code> also takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory
|
|
ordering of this operation. Notice that even when using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.AcqRel" title="variant core::sync::atomic::Ordering::AcqRel"><code>AcqRel</code></a>, the operation
|
|
might fail and hence just perform an <code>Acquire</code> load, but not have <code>Release</code> semantics.
|
|
Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a> if it
|
|
happens, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="migrating-to-compare_exchange-and-compare_exchange_weak"><a class="doc-anchor" href="#migrating-to-compare_exchange-and-compare_exchange_weak">§</a>Migrating to <code>compare_exchange</code> and <code>compare_exchange_weak</code></h5>
|
|
<p><code>compare_and_swap</code> is equivalent to <code>compare_exchange</code> with the following mapping for
|
|
memory orderings:</p>
|
|
<div><table><thead><tr><th>Original</th><th>Success</th><th>Failure</th></tr></thead><tbody>
|
|
<tr><td>Relaxed</td><td>Relaxed</td><td>Relaxed</td></tr>
|
|
<tr><td>Acquire</td><td>Acquire</td><td>Acquire</td></tr>
|
|
<tr><td>Release</td><td>Release</td><td>Relaxed</td></tr>
|
|
<tr><td>AcqRel</td><td>AcqRel</td><td>Acquire</td></tr>
|
|
<tr><td>SeqCst</td><td>SeqCst</td><td>SeqCst</td></tr>
|
|
</tbody></table>
|
|
</div>
|
|
<p><code>compare_and_swap</code> and <code>compare_exchange</code> also differ in their return type. You can use
|
|
<code>compare_exchange(...).unwrap_or_else(|x| x)</code> to recover the behavior of <code>compare_and_swap</code>,
|
|
but in most cases it is more idiomatic to check whether the return value is <code>Ok</code> or <code>Err</code>
|
|
rather than to infer success vs failure based on the value that was read.</p>
|
|
<p>During migration, consider whether it makes sense to use <code>compare_exchange_weak</code> instead.
|
|
<code>compare_exchange_weak</code> is allowed to fail spuriously even when the comparison succeeds,
|
|
which allows the compiler to generate better assembly code when the compare and swap
|
|
is used in a loop.</p>
|
|
<h5 id="examples-3"><a class="doc-anchor" href="#examples-3">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>some_var = AtomicU64::new(<span class="number">5</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.compare_and_swap(<span class="number">5</span>, <span class="number">10</span>, Ordering::Relaxed), <span class="number">5</span>);
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">10</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.compare_and_swap(<span class="number">6</span>, <span class="number">12</span>, Ordering::Relaxed), <span class="number">10</span>);
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">10</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.compare_exchange" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.compare_exchange" class="fn">compare_exchange</a>(
|
|
&self,
|
|
current: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>,
|
|
new: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>,
|
|
success: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
failure: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>></h4></section></summary><div class="docblock"><p>Stores a value into the atomic integer if the current value is the same as
|
|
the <code>current</code> value.</p>
|
|
<p>The return value is a result indicating whether the new value was written and
|
|
containing the previous value. On success this value is guaranteed to be equal to
|
|
<code>current</code>.</p>
|
|
<p><code>compare_exchange</code> takes two <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> arguments to describe the memory
|
|
ordering of this operation. <code>success</code> describes the required ordering for the
|
|
read-modify-write operation that takes place if the comparison with <code>current</code> succeeds.
|
|
<code>failure</code> describes the required ordering for the load operation that takes place when
|
|
the comparison fails. Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> as success ordering makes the store part
|
|
of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the successful load
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>. The failure ordering can only be <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-4"><a class="doc-anchor" href="#examples-4">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>some_var = AtomicU64::new(<span class="number">5</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.compare_exchange(<span class="number">5</span>, <span class="number">10</span>,
|
|
Ordering::Acquire,
|
|
Ordering::Relaxed),
|
|
<span class="prelude-val">Ok</span>(<span class="number">5</span>));
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">10</span>);
|
|
|
|
<span class="macro">assert_eq!</span>(some_var.compare_exchange(<span class="number">6</span>, <span class="number">12</span>,
|
|
Ordering::SeqCst,
|
|
Ordering::Acquire),
|
|
<span class="prelude-val">Err</span>(<span class="number">10</span>));
|
|
<span class="macro">assert_eq!</span>(some_var.load(Ordering::Relaxed), <span class="number">10</span>);</code></pre></div><h5 id="considerations"><a class="doc-anchor" href="#considerations">§</a>Considerations</h5>
|
|
<p><code>compare_exchange</code> is a <a href="https://en.wikipedia.org/wiki/Compare-and-swap">compare-and-swap operation</a> and thus exhibits the usual downsides
|
|
of CAS operations. In particular, a load of the value followed by a successful
|
|
<code>compare_exchange</code> with the previous load <em>does not ensure</em> that other threads have not
|
|
changed the value in the interim! This is usually important when the <em>equality</em> check in
|
|
the <code>compare_exchange</code> is being used to check the <em>identity</em> of a value, but equality
|
|
does not necessarily imply identity. This is a particularly common case for pointers, as
|
|
a pointer holding the same address does not imply that the same object exists at that
|
|
address! In this case, <code>compare_exchange</code> can lead to the <a href="https://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>.</p>
|
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.compare_exchange_weak" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.compare_exchange_weak" class="fn">compare_exchange_weak</a>(
|
|
&self,
|
|
current: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>,
|
|
new: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>,
|
|
success: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
failure: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>></h4></section></summary><div class="docblock"><p>Stores a value into the atomic integer if the current value is the same as
|
|
the <code>current</code> value.</p>
|
|
<p>Unlike <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.compare_exchange" title="method core::sync::atomic::AtomicU64::compare_exchange"><code>AtomicU64::compare_exchange</code></a>,
|
|
this function is allowed to spuriously fail even
|
|
when the comparison succeeds, which can result in more efficient code on some
|
|
platforms. The return value is a result indicating whether the new value was
|
|
written and containing the previous value.</p>
|
|
<p><code>compare_exchange_weak</code> takes two <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> arguments to describe the memory
|
|
ordering of this operation. <code>success</code> describes the required ordering for the
|
|
read-modify-write operation that takes place if the comparison with <code>current</code> succeeds.
|
|
<code>failure</code> describes the required ordering for the load operation that takes place when
|
|
the comparison fails. Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> as success ordering makes the store part
|
|
of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the successful load
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>. The failure ordering can only be <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-5"><a class="doc-anchor" href="#examples-5">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>val = AtomicU64::new(<span class="number">4</span>);
|
|
|
|
<span class="kw">let </span><span class="kw-2">mut </span>old = val.load(Ordering::Relaxed);
|
|
<span class="kw">loop </span>{
|
|
<span class="kw">let </span>new = old * <span class="number">2</span>;
|
|
<span class="kw">match </span>val.compare_exchange_weak(old, new, Ordering::SeqCst, Ordering::Relaxed) {
|
|
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) => <span class="kw">break</span>,
|
|
<span class="prelude-val">Err</span>(x) => old = x,
|
|
}
|
|
}</code></pre></div><h5 id="considerations-1"><a class="doc-anchor" href="#considerations-1">§</a>Considerations</h5>
|
|
<p><code>compare_exchange</code> is a <a href="https://en.wikipedia.org/wiki/Compare-and-swap">compare-and-swap operation</a> and thus exhibits the usual downsides
|
|
of CAS operations. In particular, a load of the value followed by a successful
|
|
<code>compare_exchange</code> with the previous load <em>does not ensure</em> that other threads have not
|
|
changed the value in the interim. This is usually important when the <em>equality</em> check in
|
|
the <code>compare_exchange</code> is being used to check the <em>identity</em> of a value, but equality
|
|
does not necessarily imply identity. This is a particularly common case for pointers, as
|
|
a pointer holding the same address does not imply that the same object exists at that
|
|
address! In this case, <code>compare_exchange</code> can lead to the <a href="https://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>.</p>
|
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_add" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_add" class="fn">fetch_add</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Adds to the current value, returning the previous value.</p>
|
|
<p>This operation wraps around on overflow.</p>
|
|
<p><code>fetch_add</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-6"><a class="doc-anchor" href="#examples-6">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">0</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_add(<span class="number">10</span>, Ordering::SeqCst), <span class="number">0</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">10</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_sub" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_sub" class="fn">fetch_sub</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Subtracts from the current value, returning the previous value.</p>
|
|
<p>This operation wraps around on overflow.</p>
|
|
<p><code>fetch_sub</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-7"><a class="doc-anchor" href="#examples-7">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">20</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_sub(<span class="number">10</span>, Ordering::SeqCst), <span class="number">20</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">10</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_and" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_and" class="fn">fetch_and</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Bitwise “and” with the current value.</p>
|
|
<p>Performs a bitwise “and” operation on the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_and</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-8"><a class="doc-anchor" href="#examples-8">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_and(<span class="number">0b110011</span>, Ordering::SeqCst), <span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">0b100001</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_nand" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_nand" class="fn">fetch_nand</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Bitwise “nand” with the current value.</p>
|
|
<p>Performs a bitwise “nand” operation on the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_nand</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-9"><a class="doc-anchor" href="#examples-9">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">0x13</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_nand(<span class="number">0x31</span>, Ordering::SeqCst), <span class="number">0x13</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), !(<span class="number">0x13 </span>& <span class="number">0x31</span>));</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_or" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_or" class="fn">fetch_or</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Bitwise “or” with the current value.</p>
|
|
<p>Performs a bitwise “or” operation on the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_or</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-10"><a class="doc-anchor" href="#examples-10">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_or(<span class="number">0b110011</span>, Ordering::SeqCst), <span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">0b111111</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_xor" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_xor" class="fn">fetch_xor</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Bitwise “xor” with the current value.</p>
|
|
<p>Performs a bitwise “xor” operation on the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_xor</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-11"><a class="doc-anchor" href="#examples-11">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_xor(<span class="number">0b110011</span>, Ordering::SeqCst), <span class="number">0b101101</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">0b011110</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_update" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.45.0">1.45.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_update" class="fn">fetch_update</a><F>(
|
|
&self,
|
|
set_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
fetch_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
f: F,
|
|
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>><div class="where">where
|
|
F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>>,</div></h4></section></summary><div class="docblock"><p>Fetches the value, and applies a function to it that returns an optional
|
|
new value. Returns a <code>Result</code> of <code>Ok(previous_value)</code> if the function returned <code>Some(_)</code>, else
|
|
<code>Err(previous_value)</code>.</p>
|
|
<p>Note: This may call the function multiple times if the value has been changed from other threads in
|
|
the meantime, as long as the function returns <code>Some(_)</code>, but the function will have been applied
|
|
only once to the stored value.</p>
|
|
<p><code>fetch_update</code> takes two <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> arguments to describe the memory ordering of this operation.
|
|
The first describes the required ordering for when the operation finally succeeds while the second
|
|
describes the required ordering for loads. These correspond to the success and failure orderings of
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.compare_exchange" title="method core::sync::atomic::AtomicU64::compare_exchange"><code>AtomicU64::compare_exchange</code></a>
|
|
respectively.</p>
|
|
<p>Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> as success ordering makes the store part
|
|
of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the final successful load
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>. The (failed) load ordering can only be <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="considerations-2"><a class="doc-anchor" href="#considerations-2">§</a>Considerations</h5>
|
|
<p>This method is not magic; it is not provided by the hardware, and does not act like a
|
|
critical section or mutex.</p>
|
|
<p>It is implemented on top of an atomic <a href="https://en.wikipedia.org/wiki/Compare-and-swap">compare-and-swap operation</a>, and thus is subject to
|
|
the usual drawbacks of CAS operations. In particular, be careful of the <a href="https://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>
|
|
if this atomic integer is an index or more generally if knowledge of only the <em>bitwise value</em>
|
|
of the atomic is not in and of itself sufficient to ensure any required preconditions.</p>
|
|
<h5 id="examples-12"><a class="doc-anchor" href="#examples-12">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>x = AtomicU64::new(<span class="number">7</span>);
|
|
<span class="macro">assert_eq!</span>(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |<span class="kw">_</span>| <span class="prelude-val">None</span>), <span class="prelude-val">Err</span>(<span class="number">7</span>));
|
|
<span class="macro">assert_eq!</span>(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| <span class="prelude-val">Some</span>(x + <span class="number">1</span>)), <span class="prelude-val">Ok</span>(<span class="number">7</span>));
|
|
<span class="macro">assert_eq!</span>(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| <span class="prelude-val">Some</span>(x + <span class="number">1</span>)), <span class="prelude-val">Ok</span>(<span class="number">8</span>));
|
|
<span class="macro">assert_eq!</span>(x.load(Ordering::SeqCst), <span class="number">9</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.try_update" class="method"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a><h4 class="code-header">pub fn <a href="#method.try_update" class="fn">try_update</a>(
|
|
&self,
|
|
set_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
fetch_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
f: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>>,
|
|
) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>atomic_try_update</code>)</span></div></span></summary><div class="docblock"><p>Fetches the value, and applies a function to it that returns an optional
|
|
new value. Returns a <code>Result</code> of <code>Ok(previous_value)</code> if the function returned <code>Some(_)</code>, else
|
|
<code>Err(previous_value)</code>.</p>
|
|
<p>See also: <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.update" title="method core::sync::atomic::AtomicU64::update"><code>update</code></a>.</p>
|
|
<p>Note: This may call the function multiple times if the value has been changed from other threads in
|
|
the meantime, as long as the function returns <code>Some(_)</code>, but the function will have been applied
|
|
only once to the stored value.</p>
|
|
<p><code>try_update</code> takes two <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> arguments to describe the memory ordering of this operation.
|
|
The first describes the required ordering for when the operation finally succeeds while the second
|
|
describes the required ordering for loads. These correspond to the success and failure orderings of
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.compare_exchange" title="method core::sync::atomic::AtomicU64::compare_exchange"><code>AtomicU64::compare_exchange</code></a>
|
|
respectively.</p>
|
|
<p>Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> as success ordering makes the store part
|
|
of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the final successful load
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>. The (failed) load ordering can only be <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="considerations-3"><a class="doc-anchor" href="#considerations-3">§</a>Considerations</h5>
|
|
<p>This method is not magic; it is not provided by the hardware, and does not act like a
|
|
critical section or mutex.</p>
|
|
<p>It is implemented on top of an atomic <a href="https://en.wikipedia.org/wiki/Compare-and-swap">compare-and-swap operation</a>, and thus is subject to
|
|
the usual drawbacks of CAS operations. In particular, be careful of the <a href="https://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>
|
|
if this atomic integer is an index or more generally if knowledge of only the <em>bitwise value</em>
|
|
of the atomic is not in and of itself sufficient to ensure any required preconditions.</p>
|
|
<h5 id="examples-13"><a class="doc-anchor" href="#examples-13">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(atomic_try_update)]
|
|
</span><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>x = AtomicU64::new(<span class="number">7</span>);
|
|
<span class="macro">assert_eq!</span>(x.try_update(Ordering::SeqCst, Ordering::SeqCst, |<span class="kw">_</span>| <span class="prelude-val">None</span>), <span class="prelude-val">Err</span>(<span class="number">7</span>));
|
|
<span class="macro">assert_eq!</span>(x.try_update(Ordering::SeqCst, Ordering::SeqCst, |x| <span class="prelude-val">Some</span>(x + <span class="number">1</span>)), <span class="prelude-val">Ok</span>(<span class="number">7</span>));
|
|
<span class="macro">assert_eq!</span>(x.try_update(Ordering::SeqCst, Ordering::SeqCst, |x| <span class="prelude-val">Some</span>(x + <span class="number">1</span>)), <span class="prelude-val">Ok</span>(<span class="number">8</span>));
|
|
<span class="macro">assert_eq!</span>(x.load(Ordering::SeqCst), <span class="number">9</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.update" class="method"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a><h4 class="code-header">pub fn <a href="#method.update" class="fn">update</a>(
|
|
&self,
|
|
set_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
fetch_order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>,
|
|
f: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>,
|
|
) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>atomic_try_update</code>)</span></div></span></summary><div class="docblock"><p>Fetches the value, applies a function to it that it return a new value.
|
|
The new value is stored and the old value is returned.</p>
|
|
<p>See also: <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.try_update" title="method core::sync::atomic::AtomicU64::try_update"><code>try_update</code></a>.</p>
|
|
<p>Note: This may call the function multiple times if the value has been changed from other threads in
|
|
the meantime, but the function will have been applied only once to the stored value.</p>
|
|
<p><code>update</code> takes two <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> arguments to describe the memory ordering of this operation.
|
|
The first describes the required ordering for when the operation finally succeeds while the second
|
|
describes the required ordering for loads. These correspond to the success and failure orderings of
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html#method.compare_exchange" title="method core::sync::atomic::AtomicU64::compare_exchange"><code>AtomicU64::compare_exchange</code></a>
|
|
respectively.</p>
|
|
<p>Using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> as success ordering makes the store part
|
|
of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the final successful load
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>. The (failed) load ordering can only be <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.SeqCst" title="variant core::sync::atomic::Ordering::SeqCst"><code>SeqCst</code></a>, <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> or <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="considerations-4"><a class="doc-anchor" href="#considerations-4">§</a>Considerations</h5>
|
|
<p>This method is not magic; it is not provided by the hardware, and does not act like a
|
|
critical section or mutex.</p>
|
|
<p>It is implemented on top of an atomic <a href="https://en.wikipedia.org/wiki/Compare-and-swap">compare-and-swap operation</a>, and thus is subject to
|
|
the usual drawbacks of CAS operations. In particular, be careful of the <a href="https://en.wikipedia.org/wiki/ABA_problem">ABA problem</a>
|
|
if this atomic integer is an index or more generally if knowledge of only the <em>bitwise value</em>
|
|
of the atomic is not in and of itself sufficient to ensure any required preconditions.</p>
|
|
<h5 id="examples-14"><a class="doc-anchor" href="#examples-14">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(atomic_try_update)]
|
|
</span><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>x = AtomicU64::new(<span class="number">7</span>);
|
|
<span class="macro">assert_eq!</span>(x.update(Ordering::SeqCst, Ordering::SeqCst, |x| x + <span class="number">1</span>), <span class="number">7</span>);
|
|
<span class="macro">assert_eq!</span>(x.update(Ordering::SeqCst, Ordering::SeqCst, |x| x + <span class="number">1</span>), <span class="number">8</span>);
|
|
<span class="macro">assert_eq!</span>(x.load(Ordering::SeqCst), <span class="number">9</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_max" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.45.0">1.45.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_max" class="fn">fetch_max</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Maximum with the current value.</p>
|
|
<p>Finds the maximum of the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_max</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-15"><a class="doc-anchor" href="#examples-15">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_max(<span class="number">42</span>, Ordering::SeqCst), <span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::SeqCst), <span class="number">42</span>);</code></pre></div>
|
|
<p>If you want to obtain the maximum value in one step, you can use the following:</p>
|
|
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">23</span>);
|
|
<span class="kw">let </span>bar = <span class="number">42</span>;
|
|
<span class="kw">let </span>max_foo = foo.fetch_max(bar, Ordering::SeqCst).max(bar);
|
|
<span class="macro">assert!</span>(max_foo == <span class="number">42</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_min" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.45.0">1.45.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.fetch_min" class="fn">fetch_min</a>(&self, val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>, order: <a class="enum" href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering">Ordering</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Minimum with the current value.</p>
|
|
<p>Finds the minimum of the current value and the argument <code>val</code>, and
|
|
sets the new value to the result.</p>
|
|
<p>Returns the previous value.</p>
|
|
<p><code>fetch_min</code> takes an <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html" title="enum core::sync::atomic::Ordering"><code>Ordering</code></a> argument which describes the memory ordering
|
|
of this operation. All ordering modes are possible. Note that using
|
|
<a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> makes the store part of this operation <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>, and
|
|
using <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Release" title="variant core::sync::atomic::Ordering::Release"><code>Release</code></a> makes the load part <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/enum.Ordering.html#variant.Relaxed" title="variant core::sync::atomic::Ordering::Relaxed"><code>Relaxed</code></a>.</p>
|
|
<p><strong>Note</strong>: This method is only available on platforms that support atomic operations on
|
|
<a href="https://doc.rust-lang.org/nightly/std/primitive.u64.html" title="primitive u64"><code>u64</code></a>.</p>
|
|
<h5 id="examples-16"><a class="doc-anchor" href="#examples-16">§</a>Examples</h5>
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_min(<span class="number">42</span>, Ordering::Relaxed), <span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::Relaxed), <span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.fetch_min(<span class="number">22</span>, Ordering::Relaxed), <span class="number">23</span>);
|
|
<span class="macro">assert_eq!</span>(foo.load(Ordering::Relaxed), <span class="number">22</span>);</code></pre></div>
|
|
<p>If you want to obtain the minimum value in one step, you can use the following:</p>
|
|
|
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
<span class="kw">let </span>foo = AtomicU64::new(<span class="number">23</span>);
|
|
<span class="kw">let </span>bar = <span class="number">12</span>;
|
|
<span class="kw">let </span>min_foo = foo.fetch_min(bar, Ordering::SeqCst).min(bar);
|
|
<span class="macro">assert_eq!</span>(min_foo, <span class="number">12</span>);</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.as_ptr" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.70.0">1.70.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/sync/atomic.rs.html#3789-3806">Source</a></span><h4 class="code-header">pub fn <a href="#method.as_ptr" class="fn">as_ptr</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html">*mut </a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Returns a mutable pointer to the underlying integer.</p>
|
|
<p>Doing non-atomic reads and writes on the resulting integer can be a data race.
|
|
This method is mostly useful for FFI, where the function signature may use
|
|
<code>*mut u64</code> instead of <code>&AtomicU64</code>.</p>
|
|
<p>Returning an <code>*mut</code> pointer from a shared reference to this atomic is safe because the
|
|
atomic types work with interior mutability. All modifications of an atomic change the value
|
|
through a shared reference, and can do so safely as long as they use atomic operations. Any
|
|
use of the returned raw pointer requires an <code>unsafe</code> block and still has to uphold the
|
|
requirements of the <a href="https://doc.rust-lang.org/nightly/core/sync/atomic/index.html#memory-model-for-atomic-accesses" title="mod core::sync::atomic">memory model</a>.</p>
|
|
<h5 id="examples-17"><a class="doc-anchor" href="#examples-17">§</a>Examples</h5>
|
|
<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested">ⓘ</a><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::atomic::AtomicU64;
|
|
|
|
<span class="kw">extern </span><span class="string">"C" </span>{
|
|
<span class="kw">fn </span>my_atomic_op(arg: <span class="kw-2">*mut </span>u64);
|
|
}
|
|
|
|
<span class="kw">let </span>atomic = AtomicU64::new(<span class="number">1</span>);
|
|
|
|
<span class="comment">// SAFETY: Safe as long as `my_atomic_op` is atomic.
|
|
</span><span class="kw">unsafe </span>{
|
|
my_atomic_op(atomic.as_ptr());
|
|
}</code></pre></div></div></details></div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-__Deref-for-ID" class="impl"><a class="src rightside" href="../../src/common_grpc/channel_manager.rs.html#42-44">Source</a><a href="#impl-__Deref-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Target" class="associatedtype trait-impl"><a class="src rightside" href="../../src/common_grpc/channel_manager.rs.html#42-44">Source</a><a href="#associatedtype.Target" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" class="associatedtype">Target</a> = <a class="struct" href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html" title="struct core::sync::atomic::AtomicU64">AtomicU64</a></h4></section></summary><div class='docblock'>The resulting type after dereferencing.</div></details><details class="toggle method-toggle" open><summary><section id="method.deref" class="method trait-impl"><a class="src rightside" href="../../src/common_grpc/channel_manager.rs.html#42-44">Source</a><a href="#method.deref" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#tymethod.deref" class="fn">deref</a>(&self) -> &<a class="struct" href="https://doc.rust-lang.org/nightly/core/sync/atomic/struct.AtomicU64.html" title="struct core::sync::atomic::AtomicU64">AtomicU64</a></h4></section></summary><div class='docblock'>Dereferences the value.</div></details></div></details><section id="impl-LazyStatic-for-ID" class="impl"><a class="src rightside" href="../../src/common_grpc/channel_manager.rs.html#42-44">Source</a><a href="#impl-LazyStatic-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/lazy_static/1.5.0/lazy_static/trait.LazyStatic.html" title="trait lazy_static::LazyStatic">LazyStatic</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ID" class="impl"><a href="#impl-Freeze-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section><section id="impl-RefUnwindSafe-for-ID" class="impl"><a href="#impl-RefUnwindSafe-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section><section id="impl-Send-for-ID" class="impl"><a href="#impl-Send-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section><section id="impl-Sync-for-ID" class="impl"><a href="#impl-Sync-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section><section id="impl-Unpin-for-ID" class="impl"><a href="#impl-Unpin-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section><section id="impl-UnwindSafe-for-ID" class="impl"><a href="#impl-UnwindSafe-for-ID" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.ID.html" title="struct common_grpc::channel_manager::ID">ID</a></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#138">Source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
|
|
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#212">Source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><T> for T<div class="where">where
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#214">Source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#221">Source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<div class="where">where
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Conv-for-T" class="impl"><a href="#impl-Conv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Conv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.conv" class="method trait-impl"><a href="#method.conv" class="anchor">§</a><h4 class="code-header">fn <a class="fn">conv</a><T>(self) -> T<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FmtForward-for-T" class="impl"><a href="#impl-FmtForward-for-T" class="anchor">§</a><h3 class="code-header">impl<T> FmtForward for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt_binary" class="method trait-impl"><a href="#method.fmt_binary" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_binary</a>(self) -> FmtBinary<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html" title="trait core::fmt::Binary">Binary</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Binary</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_display" class="method trait-impl"><a href="#method.fmt_display" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_display</a>(self) -> FmtDisplay<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Display</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_exp" class="method trait-impl"><a href="#method.fmt_lower_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_exp</a>(self) -> FmtLowerExp<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.LowerExp.html" title="trait core::fmt::LowerExp">LowerExp</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerExp</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_hex" class="method trait-impl"><a href="#method.fmt_lower_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_hex</a>(self) -> FmtLowerHex<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html" title="trait core::fmt::LowerHex">LowerHex</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerHex</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_octal" class="method trait-impl"><a href="#method.fmt_octal" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_octal</a>(self) -> FmtOctal<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html" title="trait core::fmt::Octal">Octal</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Octal</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_pointer" class="method trait-impl"><a href="#method.fmt_pointer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_pointer</a>(self) -> FmtPointer<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Pointer.html" title="trait core::fmt::Pointer">Pointer</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Pointer</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_exp" class="method trait-impl"><a href="#method.fmt_upper_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_exp</a>(self) -> FmtUpperExp<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.UpperExp.html" title="trait core::fmt::UpperExp">UpperExp</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperExp</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_hex" class="method trait-impl"><a href="#method.fmt_upper_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_hex</a>(self) -> FmtUpperHex<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html" title="trait core::fmt::UpperHex">UpperHex</a>,</div></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperHex</code> implementation when
|
|
<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_list" class="method trait-impl"><a href="#method.fmt_list" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_list</a>(self) -> FmtList<Self><div class="where">where
|
|
&'a Self: for<'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,</div></h4></section></summary><div class='docblock'>Formats each item in a sequence. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#785">Source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#788">Source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -> T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
|
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-T" class="impl"><a href="#impl-FutureExt-for-T" class="anchor">§</a><h3 class="code-header">impl<T> FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_context</a>(self, otel_cx: Context) -> WithContext<Self></h4></section></summary><div class='docblock'>Attaches the provided <a href="Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
|
|
wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -> WithContext<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
|
|
wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-T" class="impl"><a href="#impl-Instrument-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Instrument for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument" class="method trait-impl"><a href="#method.instrument" class="anchor">§</a><h4 class="code-header">fn <a class="fn">instrument</a>(self, span: Span) -> Instrumented<Self></h4></section></summary><div class='docblock'>Instruments this type with the provided [<code>Span</code>], returning an
|
|
<code>Instrumented</code> wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_current_span</a>(self) -> Instrumented<Self></h4></section></summary><div class='docblock'>Instruments this type with the <a href="super::Span::current()">current</a> <a href="crate::Span"><code>Span</code></a>, returning an
|
|
<code>Instrumented</code> wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#767-769">Source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><U> for T<div class="where">where
|
|
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#777">Source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -> U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
|
|
<p>That is, this conversion is whatever the implementation of
|
|
<code><a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
|
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoEither-for-T" class="impl"><a class="src rightside" href="https://docs.rs/either/1/src/either/into_either.rs.html#64">Source</a><a href="#impl-IntoEither-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html" title="trait either::into_either::IntoEither">IntoEither</a> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into_either" class="method trait-impl"><a class="src rightside" href="https://docs.rs/either/1/src/either/into_either.rs.html#29">Source</a><a href="#method.into_either" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either" class="fn">into_either</a>(self, into_left: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -> <a class="enum" href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either">Either</a><Self, Self></h4></section></summary><div class='docblock'>Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Left" title="variant either::Either::Left"><code>Left</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
|
|
if <code>into_left</code> is <code>true</code>.
|
|
Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Right" title="variant either::Either::Right"><code>Right</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
|
|
otherwise. <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_either_with" class="method trait-impl"><a class="src rightside" href="https://docs.rs/either/1/src/either/into_either.rs.html#55-57">Source</a><a href="#method.into_either_with" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either_with" class="fn">into_either_with</a><F>(self, into_left: F) -> <a class="enum" href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either">Either</a><Self, Self><div class="where">where
|
|
F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&Self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</div></h4></section></summary><div class='docblock'>Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Left" title="variant either::Either::Left"><code>Left</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
|
|
if <code>into_left(&self)</code> returns <code>true</code>.
|
|
Converts <code>self</code> into a <a href="https://docs.rs/either/1/either/enum.Either.html#variant.Right" title="variant either::Either::Right"><code>Right</code></a> variant of <a href="https://docs.rs/either/1/either/enum.Either.html" title="enum either::Either"><code>Either<Self, Self></code></a>
|
|
otherwise. <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither.html#method.into_either_with">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-T" class="impl"><a href="#impl-IntoRequest%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> IntoRequest<T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into_request" class="method trait-impl"><a href="#method.into_request" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_request</a>(self) -> Request<T></h4></section></summary><div class='docblock'>Wrap the input message <code>T</code> in a <code>tonic::Request</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-T-1" class="impl"><a href="#impl-IntoRequest%3CT%3E-for-T-1" class="anchor">§</a><h3 class="code-header">impl<T> IntoRequest<T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into_request-1" class="method trait-impl"><a href="#method.into_request-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">into_request</a>(self) -> Request<T></h4></section></summary><div class='docblock'>Wrap the input message <code>T</code> in a <code>tonic::Request</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-LayerExt%3CL%3E-for-L" class="impl"><a href="#impl-LayerExt%3CL%3E-for-L" class="anchor">§</a><h3 class="code-header">impl<L> LayerExt<L> for L</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.named_layer" class="method trait-impl"><a href="#method.named_layer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">named_layer</a><S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S><div class="where">where
|
|
L: Layer<S>,</div></h4></section></summary><div class='docblock'>Applies the layer to a service and wraps it in [<code>Layered</code>].</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-LayerExt%3CL%3E-for-L-1" class="impl"><a href="#impl-LayerExt%3CL%3E-for-L-1" class="anchor">§</a><h3 class="code-header">impl<L> LayerExt<L> for L</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.named_layer-1" class="method trait-impl"><a href="#method.named_layer-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">named_layer</a><S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S><div class="where">where
|
|
L: Layer<S>,</div></h4></section></summary><div class='docblock'>Applies the layer to a service and wraps it in [<code>Layered</code>].</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pipe-for-T" class="impl"><a href="#impl-Pipe-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Pipe for T<div class="where">where
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.pipe" class="method trait-impl"><a href="#method.pipe" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self) -> R) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Pipes by value. This is generally the method you want to use. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref" class="method trait-impl"><a href="#method.pipe_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref</a><'a, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&'a Self) -> R) -> R<div class="where">where
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref_mut" class="method trait-impl"><a href="#method.pipe_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref_mut</a><'a, R>(&'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&'a mut Self) -> R) -> R<div class="where">where
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow" class="method trait-impl"><a href="#method.pipe_borrow" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow</a><'a, B, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a B</a>) -> R) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
|
|
B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.borrow()</code> into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow_mut" class="method trait-impl"><a href="#method.pipe_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow_mut</a><'a, B, R>(
|
|
&'a mut self,
|
|
func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut B</a>) -> R,
|
|
) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
|
|
B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.borrow_mut()</code> into the pipe
|
|
function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_ref" class="method trait-impl"><a href="#method.pipe_as_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_ref</a><'a, U, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a U</a>) -> R) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><U>,
|
|
U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.as_ref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_mut" class="method trait-impl"><a href="#method.pipe_as_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_mut</a><'a, U, R>(&'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut U</a>) -> R) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><U>,
|
|
U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.as_mut()</code> into the pipe
|
|
function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref" class="method trait-impl"><a href="#method.pipe_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref</a><'a, T, R>(&'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a T</a>) -> R) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
|
|
T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.deref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref_mut" class="method trait-impl"><a href="#method.pipe_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref_mut</a><'a, T, R>(
|
|
&'a mut self,
|
|
func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut T</a>) -> R,
|
|
) -> R<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
|
|
T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
R: 'a,</div></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.deref_mut()</code> into the pipe
|
|
function.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-PolicyExt-for-T" class="impl"><a href="#impl-PolicyExt-for-T" class="anchor">§</a><h3 class="code-header">impl<T> PolicyExt for T<div class="where">where
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.and" class="method trait-impl"><a href="#method.and" class="anchor">§</a><h4 class="code-header">fn <a class="fn">and</a><P, B, E>(self, other: P) -> And<T, P><div class="where">where
|
|
T: Policy<B, E>,
|
|
P: Policy<B, E>,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] only if <code>self</code> and <code>other</code> return
|
|
<code>Action::Follow</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.or" class="method trait-impl"><a href="#method.or" class="anchor">§</a><h4 class="code-header">fn <a class="fn">or</a><P, B, E>(self, other: P) -> Or<T, P><div class="where">where
|
|
T: Policy<B, E>,
|
|
P: Policy<B, E>,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] if either <code>self</code> or <code>other</code> returns
|
|
<code>Action::Follow</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Receiver-for-P" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/ops/deref.rs.html#378-380">Source</a><a href="#impl-Receiver-for-P" class="anchor">§</a><h3 class="code-header">impl<P, T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Receiver.html" title="trait core::ops::deref::Receiver">Receiver</a> for P<div class="where">where
|
|
P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Target-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/ops/deref.rs.html#382">Source</a><a href="#associatedtype.Target-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Receiver.html#associatedtype.Target" class="associatedtype">Target</a> = T</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>arbitrary_self_types</code>)</span></div></span><div class='docblock'>The target type on which the method may be called.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Same-for-T" class="impl"><a class="src rightside" href="https://docs.rs/typenum/1.18.0/src/typenum/type_operators.rs.html#34">Source</a><a href="#impl-Same-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/typenum/1.18.0/typenum/type_operators/trait.Same.html" title="trait typenum::type_operators::Same">Same</a> for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a class="src rightside" href="https://docs.rs/typenum/1.18.0/src/typenum/type_operators.rs.html#35">Source</a><a href="#associatedtype.Output" class="anchor">§</a><h4 class="code-header">type <a href="https://docs.rs/typenum/1.18.0/typenum/type_operators/trait.Same.html#associatedtype.Output" class="associatedtype">Output</a> = T</h4></section></summary><div class='docblock'>Should always be <code>Self</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ServiceExt-for-T" class="impl"><a href="#impl-ServiceExt-for-T" class="anchor">§</a><h3 class="code-header">impl<T> ServiceExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.propagate_header" class="method trait-impl"><a href="#method.propagate_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_header</a>(self, header: HeaderName) -> PropagateHeader<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Propagate a header from the request to the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.add_extension" class="method trait-impl"><a href="#method.add_extension" class="anchor">§</a><h4 class="code-header">fn <a class="fn">add_extension</a><T>(self, value: T) -> AddExtension<Self, T><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Add some shareable value to <a href="https://docs.rs/http/latest/http/struct.Extensions.html">request extensions</a>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_request_body" class="method trait-impl"><a href="#method.map_request_body" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_request_body</a><F>(self, f: F) -> MapRequestBody<Self, F><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Apply a transformation to the request body. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.map_response_body" class="method trait-impl"><a href="#method.map_response_body" class="anchor">§</a><h4 class="code-header">fn <a class="fn">map_response_body</a><F>(self, f: F) -> MapResponseBody<Self, F><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Apply a transformation to the response body. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.compression" class="method trait-impl"><a href="#method.compression" class="anchor">§</a><h4 class="code-header">fn <a class="fn">compression</a>(self) -> Compression<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Compresses response bodies. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.decompression" class="method trait-impl"><a href="#method.decompression" class="anchor">§</a><h4 class="code-header">fn <a class="fn">decompression</a>(self) -> Decompression<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Decompress response bodies. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trace_for_http" class="method trait-impl"><a href="#method.trace_for_http" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trace_for_http</a>(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>High level tracing that classifies responses using HTTP status codes. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trace_for_grpc" class="method trait-impl"><a href="#method.trace_for_grpc" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trace_for_grpc</a>(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>High level tracing that classifies responses using gRPC headers. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.follow_redirects" class="method trait-impl"><a href="#method.follow_redirects" class="anchor">§</a><h4 class="code-header">fn <a class="fn">follow_redirects</a>(self) -> FollowRedirect<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Follow redirect resposes using the <a href="crate::follow_redirect::policy::Standard"><code>Standard</code></a> policy. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_headers" class="method trait-impl"><a href="#method.sensitive_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_headers</a>(
|
|
self,
|
|
headers: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = HeaderName>,
|
|
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on both requests and responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_request_headers" class="method trait-impl"><a href="#method.sensitive_request_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_request_headers</a>(
|
|
self,
|
|
headers: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = HeaderName>,
|
|
) -> SetSensitiveRequestHeaders<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on requests. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.sensitive_response_headers" class="method trait-impl"><a href="#method.sensitive_response_headers" class="anchor">§</a><h4 class="code-header">fn <a class="fn">sensitive_response_headers</a>(
|
|
self,
|
|
headers: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = HeaderName>,
|
|
) -> SetSensitiveResponseHeaders<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mark headers as <a href="https://docs.rs/http/latest/http/header/struct.HeaderValue.html#method.set_sensitive">sensitive</a> on responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.override_request_header" class="method trait-impl"><a href="#method.override_request_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">override_request_header</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetRequestHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Insert a header into the request. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_request_header" class="method trait-impl"><a href="#method.append_request_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_request_header</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetRequestHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Append a header into the request. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.insert_request_header_if_not_present" class="method trait-impl"><a href="#method.insert_request_header_if_not_present" class="anchor">§</a><h4 class="code-header">fn <a class="fn">insert_request_header_if_not_present</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetRequestHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Insert a header into the request, if the header is not already present. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.override_response_header" class="method trait-impl"><a href="#method.override_response_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">override_response_header</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetResponseHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Insert a header into the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_response_header" class="method trait-impl"><a href="#method.append_response_header" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_response_header</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetResponseHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Append a header into the response. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.insert_response_header_if_not_present" class="method trait-impl"><a href="#method.insert_response_header_if_not_present" class="anchor">§</a><h4 class="code-header">fn <a class="fn">insert_response_header_if_not_present</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make: M,
|
|
) -> SetResponseHeader<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Insert a header into the response, if the header is not already present. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.set_request_id" class="method trait-impl"><a href="#method.set_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">set_request_id</a><M>(
|
|
self,
|
|
header_name: HeaderName,
|
|
make_request_id: M,
|
|
) -> SetRequestId<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
M: MakeRequestId,</div></h4></section></summary><div class='docblock'>Add request id header and extension. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.set_x_request_id" class="method trait-impl"><a href="#method.set_x_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">set_x_request_id</a><M>(self, make_request_id: M) -> SetRequestId<Self, M><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|
M: MakeRequestId,</div></h4></section></summary><div class='docblock'>Add request id header and extension, using <code>x-request-id</code> as the header name. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.propagate_request_id" class="method trait-impl"><a href="#method.propagate_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_request_id</a>(
|
|
self,
|
|
header_name: HeaderName,
|
|
) -> PropagateRequestId<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Propgate request ids from requests to responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.propagate_x_request_id" class="method trait-impl"><a href="#method.propagate_x_request_id" class="anchor">§</a><h4 class="code-header">fn <a class="fn">propagate_x_request_id</a>(self) -> PropagateRequestId<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Propgate request ids from requests to responses, using <code>x-request-id</code> as the header name. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.catch_panic" class="method trait-impl"><a href="#method.catch_panic" class="anchor">§</a><h4 class="code-header">fn <a class="fn">catch_panic</a>(self) -> CatchPanic<Self, DefaultResponseForPanic><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Catch panics and convert them into <code>500 Internal Server</code> responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.request_body_limit" class="method trait-impl"><a href="#method.request_body_limit" class="anchor">§</a><h4 class="code-header">fn <a class="fn">request_body_limit</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> RequestBodyLimit<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Intercept requests with over-sized payloads and convert them into
|
|
<code>413 Payload Too Large</code> responses. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.trim_trailing_slash" class="method trait-impl"><a href="#method.trim_trailing_slash" class="anchor">§</a><h4 class="code-header">fn <a class="fn">trim_trailing_slash</a>(self) -> NormalizePath<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Remove trailing slashes from paths. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.append_trailing_slash" class="method trait-impl"><a href="#method.append_trailing_slash" class="anchor">§</a><h4 class="code-header">fn <a class="fn">append_trailing_slash</a>(self) -> NormalizePath<Self><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Append trailing slash to paths. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Tap-for-T" class="impl"><a href="#impl-Tap-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Tap for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.tap" class="method trait-impl"><a href="#method.tap" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap</a>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&Self)) -> Self</h4></section></summary><div class='docblock'>Immutable access to a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_mut" class="method trait-impl"><a href="#method.tap_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_mut</a>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&mut Self)) -> Self</h4></section></summary><div class='docblock'>Mutable access to a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow" class="method trait-impl"><a href="#method.tap_borrow" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&B</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
|
|
B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>Borrow<B></code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut" class="method trait-impl"><a href="#method.tap_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_mut</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut B</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
|
|
B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>BorrowMut<B></code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref" class="method trait-impl"><a href="#method.tap_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&R</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><R>,
|
|
R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>AsRef<R></code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut" class="method trait-impl"><a href="#method.tap_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_mut</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut R</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><R>,
|
|
R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>AsMut<R></code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref" class="method trait-impl"><a href="#method.tap_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&T</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Immutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut" class="method trait-impl"><a href="#method.tap_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_mut</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut T</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Mutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_dbg" class="method trait-impl"><a href="#method.tap_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_dbg</a>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&Self)) -> Self</h4></section></summary><div class='docblock'>Calls <code>.tap()</code> only in debug builds, and is erased in release builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_mut_dbg" class="method trait-impl"><a href="#method.tap_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_mut_dbg</a>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(&mut Self)) -> Self</h4></section></summary><div class='docblock'>Calls <code>.tap_mut()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_dbg" class="method trait-impl"><a href="#method.tap_borrow_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_dbg</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&B</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><B>,
|
|
B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut_dbg" class="method trait-impl"><a href="#method.tap_borrow_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_mut_dbg</a><B>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut B</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><B>,
|
|
B: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow_mut()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_dbg" class="method trait-impl"><a href="#method.tap_ref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_dbg</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&R</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><R>,
|
|
R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_ref()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut_dbg" class="method trait-impl"><a href="#method.tap_ref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_mut_dbg</a><R>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut R</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><R>,
|
|
R: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_ref_mut()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_dbg" class="method trait-impl"><a href="#method.tap_deref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_dbg</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&T</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = T>,
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_deref()</code> only in debug builds, and is erased in release
|
|
builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut_dbg" class="method trait-impl"><a href="#method.tap_deref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_mut_dbg</a><T>(self, func: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut T</a>)) -> Self<div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a><Target = T> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
|
|
T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Calls <code>.tap_deref_mut()</code> only in debug builds, and is erased in release
|
|
builds.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryConv-for-T" class="impl"><a href="#impl-TryConv-for-T" class="anchor">§</a><h3 class="code-header">impl<T> TryConv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.try_conv" class="method trait-impl"><a href="#method.try_conv" class="anchor">§</a><h4 class="code-header">fn <a class="fn">try_conv</a><T>(self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" title="type core::convert::TryInto::Error">Error</a>><div class="where">where
|
|
Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><T>,</div></h4></section></summary><div class='docblock'>Attempts to convert <code>self</code> into <code>T</code> using <code>TryInto<T></code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#827-829">Source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U> for T<div class="where">where
|
|
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#831">Source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#834">Source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, <T as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#811-813">Source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><U> for T<div class="where">where
|
|
U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#815">Source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = <U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#818">Source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><U, <U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-VZip%3CV%3E-for-T" class="impl"><a href="#impl-VZip%3CV%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<V, T> VZip<V> for T<div class="where">where
|
|
V: MultiLane<T>,</div></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -> V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-T" class="impl"><a href="#impl-WithSubscriber-for-T" class="anchor">§</a><h3 class="code-header">impl<T> WithSubscriber for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_subscriber" class="method trait-impl"><a href="#method.with_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_subscriber</a><S>(self, subscriber: S) -> WithDispatch<Self><div class="where">where
|
|
S: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><Dispatch>,</div></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
|
|
[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a href="#method.with_current_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_subscriber</a>(self) -> WithDispatch<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="crate::dispatcher#setting-the-default-subscriber">default</a> <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
|
|
[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details><section id="impl-Allocation-for-T" class="impl"><a href="#impl-Allocation-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Allocation for T<div class="where">where
|
|
T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</div></h3></section><section id="impl-Any-for-T-1" class="impl"><a href="#impl-Any-for-T-1" class="anchor">§</a><h3 class="code-header">impl<T> Any for T<div class="where">where
|
|
T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section><section id="impl-ErasedDestructor-for-T" class="impl"><a href="#impl-ErasedDestructor-for-T" class="anchor">§</a><h3 class="code-header">impl<T> ErasedDestructor for T<div class="where">where
|
|
T: 'static,</div></h3></section></div></section></div></main></body></html> |