rtic/1/api/spin/once/struct.Once.html
2024-10-24 05:57:30 +00:00

129 lines
No EOL
45 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A primitive that provides lazy one-time initialization."><title>Once in spin::once - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2,SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-492a78a4a87dcc01.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="spin" data-themes="" data-resource-suffix="" data-rustdoc-version="1.82.0 (f6e511eec 2024-10-15)" data-channel="1.82.0" data-search-js="search-a99f1315e7cc5121.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-118b08c4c78b968e.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-921df33f47b8780c.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-3b12f09e550e0385.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../spin/index.html">spin</a><span class="version">0.9.8</span></h2></div><h2 class="location"><a href="#">Once</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Associated Constants</a></h3><ul class="block associatedconstant"><li><a href="#associatedconstant.INIT">INIT</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.as_mut_ptr">as_mut_ptr</a></li><li><a href="#method.call_once">call_once</a></li><li><a href="#method.get">get</a></li><li><a href="#method.get_mut">get_mut</a></li><li><a href="#method.get_mut_unchecked">get_mut_unchecked</a></li><li><a href="#method.get_unchecked">get_unchecked</a></li><li><a href="#method.initialized">initialized</a></li><li><a href="#method.into_inner_unchecked">into_inner_unchecked</a></li><li><a href="#method.is_completed">is_completed</a></li><li><a href="#method.new">new</a></li><li><a href="#method.poll">poll</a></li><li><a href="#method.try_call_once">try_call_once</a></li><li><a href="#method.try_into_inner">try_into_inner</a></li><li><a href="#method.wait">wait</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-Debug-for-Once%3CT,+R%3E">Debug</a></li><li><a href="#impl-Default-for-Once%3CT,+R%3E">Default</a></li><li><a href="#impl-Drop-for-Once%3CT,+R%3E">Drop</a></li><li><a href="#impl-From%3CT%3E-for-Once%3CT,+R%3E">From&#60;T&#62;</a></li><li><a href="#impl-Send-for-Once%3CT,+R%3E">Send</a></li><li><a href="#impl-Sync-for-Once%3CT,+R%3E">Sync</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-Freeze-for-Once%3CT,+R%3E">!Freeze</a></li><li><a href="#impl-RefUnwindSafe-for-Once%3CT,+R%3E">!RefUnwindSafe</a></li><li><a href="#impl-Unpin-for-Once%3CT,+R%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-Once%3CT,+R%3E">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T">Borrow&#60;T&#62;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T">BorrowMut&#60;T&#62;</a></li><li><a href="#impl-From%3C!%3E-for-T">From&#60;!&#62;</a></li><li><a href="#impl-From%3CT%3E-for-T">From&#60;T&#62;</a></li><li><a href="#impl-Into%3CU%3E-for-T">Into&#60;U&#62;</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T">TryFrom&#60;U&#62;</a></li><li><a href="#impl-TryInto%3CU%3E-for-T">TryInto&#60;U&#62;</a></li></ul></section><h2><a href="index.html">In spin::<wbr>once</a></h2></div></nav><div class="sidebar-resizer"></div><main><div class="width-limiter"><rustdoc-search></rustdoc-search><section id="main-content" class="content"><div class="main-heading"><h1>Struct <a href="../index.html">spin</a>::<wbr><a href="index.html">once</a>::<wbr><a class="struct" href="#">Once</a><button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><span class="out-of-band"><a class="src" href="../../src/spin/once.rs.html#28-32">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub struct Once&lt;T = <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.unit.html">()</a>, R = <a class="struct" href="../relax/struct.Spin.html" title="struct spin::relax::Spin">Spin</a>&gt; { <span class="comment">/* private fields */</span> }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A primitive that provides lazy one-time initialization.</p>
<p>Unlike its <code>std::sync</code> equivalent, this is generalized such that the closure returns a
value to be stored by the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> (<code>std::sync::Once</code> can be trivially emulated with
<code>Once</code>).</p>
<p>Because <a href="struct.Once.html#method.new" title="associated function spin::once::Once::new"><code>Once::new</code></a> is <code>const</code>, this primitive may be used to safely initialize statics.</p>
<h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>spin;
<span class="kw">static </span>START: spin::Once = spin::Once::new();
START.call_once(|| {
<span class="comment">// run initialization here
</span>});</code></pre></div>
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#133-338">source</a><a href="#impl-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R: <a class="trait" href="../relax/trait.RelaxStrategy.html" title="trait spin::relax::RelaxStrategy">RelaxStrategy</a>&gt; <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.call_once" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#168-173">source</a><h4 class="code-header">pub fn <a href="#method.call_once" class="fn">call_once</a>&lt;F: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>() -&gt; T&gt;(&amp;self, f: F) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a></h4></section></summary><div class="docblock"><p>Performs an initialization routine once and only once. The given closure
will be executed if this is the first time <code>call_once</code> has been called,
and otherwise the routine will <em>not</em> be invoked.</p>
<p>This method will block the calling thread if another initialization
routine is currently running.</p>
<p>When this function returns, it is guaranteed that some initialization
has run and completed (it may not be the closure specified). The
returned pointer will point to the result from the closure that was
run.</p>
<h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
<p>This function will panic if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of <code>std::sync</code>s
primitives.</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>spin;
<span class="kw">static </span>INIT: spin::Once&lt;usize&gt; = spin::Once::new();
<span class="kw">fn </span>get_cached_val() -&gt; usize {
<span class="kw-2">*</span>INIT.call_once(expensive_computation)
}
<span class="kw">fn </span>expensive_computation() -&gt; usize {
<span class="comment">// ...
</span>}</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.try_call_once" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#208-214">source</a><h4 class="code-header">pub fn <a href="#method.try_call_once" class="fn">try_call_once</a>&lt;F: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>() -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, E&gt;, E&gt;(
&amp;self,
f: F,
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a>, E&gt;</h4></section></summary><div class="docblock"><p>This method is similar to <code>call_once</code>, but allows the given closure to
fail, and lets the <code>Once</code> in a uninitialized state if it does.</p>
<p>This method will block the calling thread if another initialization
routine is currently running.</p>
<p>When this function returns without error, it is guaranteed that some
initialization has run and completed (it may not be the closure
specified). The returned reference will point to the result from the
closure that was run.</p>
<h5 id="panics-1"><a class="doc-anchor" href="#panics-1">§</a>Panics</h5>
<p>This function will panic if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of <code>std::sync</code>s
primitives.</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>spin;
<span class="kw">static </span>INIT: spin::Once&lt;usize&gt; = spin::Once::new();
<span class="kw">fn </span>get_cached_val() -&gt; <span class="prelude-ty">Result</span>&lt;usize, String&gt; {
INIT.try_call_once(expensive_fallible_computation).map(|x| <span class="kw-2">*</span>x)
}
<span class="kw">fn </span>expensive_fallible_computation() -&gt; <span class="prelude-ty">Result</span>&lt;usize, String&gt; {
<span class="comment">// ...
</span>}</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.wait" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#306-313">source</a><h4 class="code-header">pub fn <a href="#method.wait" class="fn">wait</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a></h4></section></summary><div class="docblock"><p>Spins until the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> contains a value.</p>
<p>Note that in releases prior to <code>0.7</code>, this function had the behaviour of <a href="struct.Once.html#method.poll" title="method spin::once::Once::poll"><code>Once::poll</code></a>.</p>
<h5 id="panics-2"><a class="doc-anchor" href="#panics-2">§</a>Panics</h5>
<p>This function will panic if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of <code>std::sync</code>s
primitives.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.poll" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#325-337">source</a><h4 class="code-header">pub fn <a href="#method.poll" class="fn">poll</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a>&gt;</h4></section></summary><div class="docblock"><p>Like <a href="struct.Once.html#method.get" title="method spin::once::Once::get"><code>Once::get</code></a>, but will spin if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> is in the process of being
initialized. If initialization has not even begun, <code>None</code> will be returned.</p>
<p>Note that in releases prior to <code>0.7</code>, this function was named <code>wait</code>.</p>
<h5 id="panics-3"><a class="doc-anchor" href="#panics-3">§</a>Panics</h5>
<p>This function will panic if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of <code>std::sync</code>s
primitives.</p>
</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Once%3CT,+R%3E-1" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#340-489">source</a><a href="#impl-Once%3CT,+R%3E-1" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.INIT" class="associatedconstant"><a class="src rightside" href="../../src/spin/once.rs.html#343-347">source</a><h4 class="code-header">pub const <a href="#associatedconstant.INIT" class="constant">INIT</a>: Self = _</h4></section></summary><div class="docblock"><p>Initialization constant of <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#350-352">source</a><h4 class="code-header">pub const fn <a href="#method.new" class="fn">new</a>() -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a new <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.initialized" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#355-361">source</a><h4 class="code-header">pub const fn <a href="#method.initialized" class="fn">initialized</a>(data: T) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a new initialized <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_mut_ptr" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#368-372">source</a><h4 class="code-header">pub fn <a href="#method.as_mut_ptr" class="fn">as_mut_ptr</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.pointer.html">*mut T</a></h4></section></summary><div class="docblock"><p>Retrieve a pointer to the inner data.</p>
<p>While this method itself is safe, accessing the pointer before the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been
initialized is UB, unless this method has already been written to from a pointer coming
from this method.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#399-406">source</a><h4 class="code-header">pub fn <a href="#method.get" class="fn">get</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a>&gt;</h4></section></summary><div class="docblock"><p>Returns a reference to the inner value if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been initialized.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_unchecked" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#416-423">source</a><h4 class="code-header">pub unsafe fn <a href="#method.get_unchecked" class="fn">get_unchecked</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a></h4></section></summary><div class="docblock"><p>Returns a reference to the inner value on the unchecked assumption that the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been initialized.</p>
<h5 id="safety"><a class="doc-anchor" href="#safety">§</a>Safety</h5>
<p>This is <em>extremely</em> unsafe if the <code>Once</code> has not already been initialized because a reference to uninitialized
memory will be returned, immediately triggering undefined behaviour (even if the reference goes unused).
However, this can be useful in some instances for exposing the <code>Once</code> to FFI or when the overhead of atomically
checking initialization is unacceptable and the <code>Once</code> has already been initialized.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_mut" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#429-434">source</a><h4 class="code-header">pub fn <a href="#method.get_mut" class="fn">get_mut</a>(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;mut T</a>&gt;</h4></section></summary><div class="docblock"><p>Returns a mutable reference to the inner value if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been initialized.</p>
<p>Because this method requires a mutable reference to the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a>, no synchronization
overhead is required to access the inner value. In effect, it is zero-cost.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_mut_unchecked" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#444-451">source</a><h4 class="code-header">pub unsafe fn <a href="#method.get_mut_unchecked" class="fn">get_mut_unchecked</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class="docblock"><p>Returns a mutable reference to the inner value</p>
<h5 id="safety-1"><a class="doc-anchor" href="#safety-1">§</a>Safety</h5>
<p>This is <em>extremely</em> unsafe if the <code>Once</code> has not already been initialized because a reference to uninitialized
memory will be returned, immediately triggering undefined behaviour (even if the reference goes unused).
However, this can be useful in some instances for exposing the <code>Once</code> to FFI or when the overhead of atomically
checking initialization is unacceptable and the <code>Once</code> has already been initialized.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into_inner" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#457-462">source</a><h4 class="code-header">pub fn <a href="#method.try_into_inner" class="fn">try_into_inner</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;T&gt;</h4></section></summary><div class="docblock"><p>Returns a the inner value if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been initialized.</p>
<p>Because this method requires ownership of the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a>, no synchronization overhead
is required to access the inner value. In effect, it is zero-cost.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.into_inner_unchecked" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#471-478">source</a><h4 class="code-header">pub unsafe fn <a href="#method.into_inner_unchecked" class="fn">into_inner_unchecked</a>(self) -&gt; T</h4></section></summary><div class="docblock"><p>Returns a the inner value if the <a href="struct.Once.html" title="struct spin::once::Once"><code>Once</code></a> has been initialized.</p>
<h5 id="safety-2"><a class="doc-anchor" href="#safety-2">§</a>Safety</h5>
<p>This is <em>extremely</em> unsafe if the <code>Once</code> has not already been initialized because a reference to uninitialized
memory will be returned, immediately triggering undefined behaviour (even if the reference goes unused)
This can be useful, if <code>Once</code> has already been initialized, and you want to bypass an
option check.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_completed" class="method"><a class="src rightside" href="../../src/spin/once.rs.html#485-488">source</a><h4 class="code-header">pub fn <a href="#method.is_completed" class="fn">is_completed</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks whether the value has been initialized.</p>
<p>This is done using <a href="https://doc.rust-lang.org/1.82.0/core/sync/atomic/enum.Ordering.html#variant.Acquire" title="variant core::sync::atomic::Ordering::Acquire"><code>Acquire</code></a> ordering, and
therefore it is safe to access the value directly via
<a href="struct.Once.html#method.get_unchecked" title="method spin::once::Once::get_unchecked"><code>get_unchecked</code></a> if this returns true.</p>
</div></details></div></details></div><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-Debug-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#40-49">source</a><a href="#impl-Debug-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a class="src rightside" href="../../src/spin/once.rs.html#41-48">source</a><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.82.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.82.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#34-38">source</a><a href="#impl-Default-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.default" class="method trait-impl"><a class="src rightside" href="../../src/spin/once.rs.html#35-37">source</a><a href="#method.default" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/default/trait.Default.html#tymethod.default" class="fn">default</a>() -&gt; Self</h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/1.82.0/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Drop-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#497-507">source</a><a href="#impl-Drop-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/ops/drop/trait.Drop.html" title="trait core::ops::drop::Drop">Drop</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.drop" class="method trait-impl"><a class="src rightside" href="../../src/spin/once.rs.html#498-506">source</a><a href="#method.drop" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/ops/drop/trait.Drop.html#tymethod.drop" class="fn">drop</a>(&amp;mut self)</h4></section></summary><div class='docblock'>Executes the destructor for this type. <a href="https://doc.rust-lang.org/1.82.0/core/ops/drop/trait.Drop.html#tymethod.drop">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-From%3CT%3E-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#491-495">source</a><a href="#impl-From%3CT%3E-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</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="../../src/spin/once.rs.html#492-494">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(data: T) -&gt; Self</h4></section></summary><div class='docblock'>Converts to this type from the input type.</div></details></div></details><section id="impl-Send-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#54">source</a><a href="#impl-Send-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section><section id="impl-Sync-for-Once%3CT,+R%3E" class="impl"><a class="src rightside" href="../../src/spin/once.rs.html#53">source</a><a href="#impl-Sync-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</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-Once%3CT,+R%3E" class="impl"><a href="#impl-Freeze-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T = <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.unit.html">()</a>, R = <a class="struct" href="../relax/struct.Spin.html" title="struct spin::relax::Spin">Spin</a>&gt; !<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section><section id="impl-RefUnwindSafe-for-Once%3CT,+R%3E" class="impl"><a href="#impl-RefUnwindSafe-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T = <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.unit.html">()</a>, R = <a class="struct" href="../relax/struct.Spin.html" title="struct spin::relax::Spin">Spin</a>&gt; !<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;</h3></section><section id="impl-Unpin-for-Once%3CT,+R%3E" class="impl"><a href="#impl-Unpin-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;<div class="where">where
R: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,
T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</div></h3></section><section id="impl-UnwindSafe-for-Once%3CT,+R%3E" class="impl"><a href="#impl-UnwindSafe-for-Once%3CT,+R%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T, R&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.Once.html" title="struct spin::once::Once">Once</a>&lt;T, R&gt;<div class="where">where
R: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,
T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</div></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/1.82.0/src/core/any.rs.html#138">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/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/1.82.0/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/1.82.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/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/1.82.0/src/core/borrow.rs.html#209">source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/src/core/borrow.rs.html#211">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.82.0/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/1.82.0/src/core/borrow.rs.html#217">source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/src/core/borrow.rs.html#218">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3C!%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#782">source</a><a href="#impl-From%3C!%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.never.html">!</a>&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from-2" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#783">source</a><a href="#method.from-2" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: <a class="primitive" href="https://doc.rust-lang.org/1.82.0/core/primitive.never.html">!</a>) -&gt; T</h4></section></summary><div class='docblock'>Converts to this type from the input type.</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/1.82.0/src/core/convert/mod.rs.html#765">source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#768">source</a><a href="#method.from-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; 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-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#748-750">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</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/1.82.0/src/core/convert/mod.rs.html#758">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code><a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
</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/1.82.0/src/core/convert/mod.rs.html#805-807">source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</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/1.82.0/src/core/convert/mod.rs.html#809">source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/src/core/convert/mod.rs.html#812">source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</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/1.82.0/src/core/convert/mod.rs.html#790-792">source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</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/1.82.0/src/core/convert/mod.rs.html#794">source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/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/1.82.0/src/core/convert/mod.rs.html#797">source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>