Skip to main content

Unpin

Trait Unpin 

1.33.0 · Source
pub auto trait Unpin { }
Expand description

Types that do not require any pinning guarantees.

For information on what “pinning” is, see the pin module documentation.

Implementing the Unpin trait for T expresses the fact that T is pinning-agnostic: it shall not expose nor rely on any pinning guarantees. This, in turn, means that a Pin-wrapped pointer to such a type can feature a fully unrestricted API. In other words, if T: Unpin, a value of type T will not be bound by the invariants which pinning otherwise offers, even when “pinned” by a Pin<Ptr> pointing at it. When a value of type T is pointed at by a Pin<Ptr>, Pin will not restrict access to the pointee value like it normally would, thus allowing the user to do anything that they normally could with a non-Pin-wrapped Ptr to that value.

The idea of this trait is to alleviate the reduced ergonomics of APIs that require the use of Pin for soundness for some types, but which also want to be used by other types that don’t care about pinning. The prime example of such an API is Future::poll. There are many Future types that don’t care about pinning. These futures can implement Unpin and therefore get around the pinning related restrictions in the API, while still allowing the subset of Futures which do require pinning to be implemented soundly.

For more discussion on the consequences of Unpin within the wider scope of the pinning system, see the section about Unpin in the pin module.

Unpin has no consequence at all for non-pinned data. In particular, mem::replace happily moves !Unpin data, which would be immovable when pinned (mem::replace works for any &mut T, not just when T: Unpin).

However, you cannot use mem::replace on !Unpin data which is pinned by being wrapped inside a Pin<Ptr> pointing at it. This is because you cannot (safely) use a Pin<Ptr> to get a &mut T to its pointee value, which you would need to call mem::replace, and that is what makes this system work.

So this, for example, can only be done on types implementing Unpin:

use std::mem;
use std::pin::Pin;

let mut string = "this".to_string();
let mut pinned_string = Pin::new(&mut string);

// We need a mutable reference to call `mem::replace`.
// We can obtain such a reference by (implicitly) invoking `Pin::deref_mut`,
// but that is only possible because `String` implements `Unpin`.
mem::replace(&mut *pinned_string, "other".to_string());

This trait is automatically implemented for almost every type. The compiler is free to take the conservative stance of marking types as Unpin so long as all of the types that compose its fields are also Unpin. This is because if a type implements Unpin, then it is unsound for that type’s implementation to rely on pinning-related guarantees for soundness, even when viewed through a “pinning” pointer! It is the responsibility of the implementor of a type that relies upon pinning for soundness to ensure that type is not marked as Unpin by adding PhantomPinned field. For more details, see the pin module docs.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

1.33.0 · Source§

impl !Unpin for PhantomPinned

Source§

impl Unpin for LocalWaker

1.36.0 · Source§

impl Unpin for Waker

Source§

impl<Dyn> Unpin for DynMetadata<Dyn>
where Dyn: ?Sized,

1.64.0 · Source§

impl<F> Unpin for PollFn<F>
where F: Unpin,

Source§

impl<I> Unpin for FromIter<I>

1.33.0 · Source§

impl<T, A> Unpin for Arc<T, A>
where A: Allocator, T: ?Sized,

1.33.0 · Source§

impl<T, A> Unpin for Box<T, A>
where A: Allocator, T: ?Sized,

1.33.0 · Source§

impl<T, A> Unpin for Rc<T, A>
where A: Allocator, T: ?Sized,

Source§

impl<T, A> Unpin for UniqueArc<T, A>
where A: Allocator, T: ?Sized,

Source§

impl<T, A> Unpin for UniqueRc<T, A>
where A: Allocator, T: ?Sized,

Source§

impl<T> !Unpin for UnsafePinned<T>
where T: ?Sized,

When this type is used, that almost certainly means safe APIs need to use pinning to avoid the aliases from becoming invalidated. Therefore let’s mark this as !Unpin. You can always opt back in to Unpin with an impl block, provided your API is still sound while unpinned.

1.33.0 · Source§

impl<T> Unpin for &T
where T: ?Sized,

1.33.0 · Source§

impl<T> Unpin for &mut T
where T: ?Sized,

Source§

impl<T> Unpin for *const T is !null
where T: ?Sized,

1.38.0 · Source§

impl<T> Unpin for *const T
where T: ?Sized,

1.38.0 · Source§

impl<T> Unpin for *mut T
where T: ?Sized,

1.28.0 · Source§

impl<T> Unpin for NonZero<T>

1.48.0 · Source§

impl<T> Unpin for Ready<T>

Auto implementors§

§

impl Unpin for Abi

§

impl Unpin for sp_std::fmt::Alignment

§

impl Unpin for sp_std::mem::Alignment

§

impl Unpin for AllocError

§

impl Unpin for Array

§

impl Unpin for Assume

§

impl Unpin for Barrier

§

impl Unpin for BarrierWaitResult

§

impl Unpin for Bool

§

impl Unpin for BorrowError

§

impl Unpin for BorrowMutError

§

impl Unpin for Char

§

impl Unpin for sp_std::sync::nonpoison::Condvar

§

impl Unpin for sp_std::sync::Condvar

§

impl Unpin for Const

§

impl Unpin for DebugAsHex

§

impl Unpin for DefaultHasher

§

impl Unpin for Duration

§

impl Unpin for DynTrait

§

impl Unpin for DynTraitPredicate

§

impl Unpin for Enum

§

impl Unpin for Error

§

impl Unpin for Field

§

impl Unpin for FieldId

§

impl Unpin for Float

§

impl Unpin for FnPtr

§

impl Unpin for FormattingOptions

§

impl Unpin for FpCategory

§

impl Unpin for Generic

§

impl Unpin for GenericType

§

impl Unpin for GetDisjointMutError

§

impl Unpin for Global

§

impl Unpin for Infallible

§

impl Unpin for Int

§

impl Unpin for IntErrorKind

§

impl Unpin for Layout

§

impl Unpin for LayoutError

§

impl Unpin for Lifetime

§

impl Unpin for sp_std::sync::Once

§

impl Unpin for OnceState

§

impl Unpin for OneSidedRangeBound

§

impl Unpin for sp_std::cmp::Ordering

§

impl Unpin for sp_std::sync::atomic::Ordering

§

impl Unpin for ParseBoolError

§

impl Unpin for ParseFloatError

§

impl Unpin for ParseIntError

§

impl Unpin for Pointer

§

impl Unpin for RandomState

§

impl Unpin for RangeFull

§

impl Unpin for RecvError

§

impl Unpin for sp_std::sync::mpmc::RecvTimeoutError

§

impl Unpin for Reference

§

impl Unpin for SearchStep

§

impl Unpin for Sign

§

impl Unpin for SipHasher

§

impl Unpin for Slice

§

impl Unpin for Str

§

impl Unpin for Struct

§

impl Unpin for System

§

impl Unpin for Trait

§

impl Unpin for TryFromFloatSecsError

§

impl Unpin for TryFromIntError

§

impl Unpin for sp_std::sync::mpmc::TryRecvError

§

impl Unpin for Tuple

§

impl Unpin for Type

§

impl Unpin for TypeId

§

impl Unpin for TypeKind

§

impl Unpin for sp_std::mem::type_info::Union

§

impl Unpin for UnorderedKeyError

§

impl Unpin for Utf8Error

§

impl Unpin for Variant

§

impl Unpin for WaitTimeoutResult

§

impl Unpin for WouldBlock

§

impl Unpin for Writer

§

impl<'a, 'b, const N: usize> Unpin for CharArrayRefSearcher<'a, 'b, N>

§

impl<'a, 'b> Unpin for CharSliceSearcher<'a, 'b>

§

impl<'a, 'b> Unpin for DebugList<'a, 'b>

§

impl<'a, 'b> Unpin for DebugMap<'a, 'b>

§

impl<'a, 'b> Unpin for DebugSet<'a, 'b>

§

impl<'a, 'b> Unpin for DebugStruct<'a, 'b>

§

impl<'a, 'b> Unpin for DebugTuple<'a, 'b>

§

impl<'a, 'b> Unpin for StrSearcher<'a, 'b>

§

impl<'a, B> Unpin for Cow<'a, B>
where <B as ToOwned>::Owned: Unpin, B: ?Sized,

§

impl<'a, F> Unpin for CharPredicateSearcher<'a, F>
where F: Unpin,

§

impl<'a, I, A> Unpin for sp_std::collections::vec_deque::Splice<'a, I, A>
where I: Unpin,

§

impl<'a, I, A> Unpin for sp_std::vec::Splice<'a, I, A>
where I: Unpin,

§

impl<'a, I> Unpin for ByRefSized<'a, I>

§

impl<'a, K, A> Unpin for sp_std::collections::btree_set::CursorMut<'a, K, A>

§

impl<'a, K, A> Unpin for sp_std::collections::btree_set::CursorMutKey<'a, K, A>

§

impl<'a, K, V, A> Unpin for sp_std::collections::btree_map::CursorMut<'a, K, V, A>

§

impl<'a, K, V, A> Unpin for sp_std::collections::btree_map::CursorMutKey<'a, K, V, A>

§

impl<'a, K, V, A> Unpin for sp_std::collections::btree_map::Entry<'a, K, V, A>
where K: Unpin, A: Unpin,

§

impl<'a, K, V, A> Unpin for sp_std::collections::btree_map::OccupiedEntry<'a, K, V, A>
where A: Unpin,

§

impl<'a, K, V, A> Unpin for OccupiedError<'a, K, V, A>
where K: Unpin, V: Unpin, A: Unpin,

§

impl<'a, K, V, A> Unpin for sp_std::collections::btree_map::VacantEntry<'a, K, V, A>
where K: Unpin, A: Unpin,

§

impl<'a, K, V, R, F, A> Unpin for sp_std::collections::btree_map::ExtractIf<'a, K, V, R, F, A>
where F: Unpin, A: Unpin, R: Unpin,

§

impl<'a, K, V> Unpin for sp_std::collections::btree_map::Cursor<'a, K, V>

§

impl<'a, K, V> Unpin for sp_std::collections::btree_map::Iter<'a, K, V>

§

impl<'a, K, V> Unpin for sp_std::collections::btree_map::IterMut<'a, K, V>

§

impl<'a, K, V> Unpin for Keys<'a, K, V>

§

impl<'a, K, V> Unpin for sp_std::collections::btree_map::Range<'a, K, V>

§

impl<'a, K, V> Unpin for RangeMut<'a, K, V>

§

impl<'a, K, V> Unpin for Values<'a, K, V>

§

impl<'a, K, V> Unpin for ValuesMut<'a, K, V>

§

impl<'a, K> Unpin for sp_std::collections::btree_set::Cursor<'a, K>

§

impl<'a, P> Unpin for MatchIndices<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for Matches<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for RMatchIndices<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for RMatches<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for sp_std::str::RSplit<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for sp_std::str::RSplitN<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for RSplitTerminator<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for sp_std::str::Split<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for sp_std::str::SplitInclusive<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for sp_std::str::SplitN<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, P> Unpin for SplitTerminator<'a, P>
where <P as Pattern>::Searcher<'a>: Unpin,

§

impl<'a, T, A> Unpin for Difference<'a, T, A>

§

impl<'a, T, A> Unpin for sp_std::collections::vec_deque::Drain<'a, T, A>

§

impl<'a, T, A> Unpin for sp_std::vec::Drain<'a, T, A>

§

impl<'a, T, A> Unpin for sp_std::collections::btree_set::Entry<'a, T, A>
where A: Unpin, T: Unpin,

§

impl<'a, T, A> Unpin for Intersection<'a, T, A>

§

impl<'a, T, A> Unpin for sp_std::collections::btree_set::OccupiedEntry<'a, T, A>
where A: Unpin,

§

impl<'a, T, A> Unpin for PeekMut<'a, T, A>

§

impl<'a, T, A> Unpin for sp_std::collections::btree_set::VacantEntry<'a, T, A>
where T: Unpin, A: Unpin,

§

impl<'a, T, F, A> Unpin for sp_std::collections::vec_deque::ExtractIf<'a, T, F, A>
where F: Unpin,

§

impl<'a, T, F, A> Unpin for sp_std::vec::ExtractIf<'a, T, F, A>
where F: Unpin,

§

impl<'a, T, P> Unpin for ChunkBy<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for ChunkByMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for sp_std::slice::RSplit<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for RSplitMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for sp_std::slice::RSplitN<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for RSplitNMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for sp_std::slice::Split<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for sp_std::slice::SplitInclusive<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for SplitInclusiveMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for SplitMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for sp_std::slice::SplitN<'a, T, P>
where P: Unpin,

§

impl<'a, T, P> Unpin for SplitNMut<'a, T, P>
where P: Unpin,

§

impl<'a, T, R, F, A> Unpin for sp_std::collections::btree_set::ExtractIf<'a, T, R, F, A>
where F: Unpin, A: Unpin, R: Unpin,

§

impl<'a, T, const N: usize> Unpin for ArrayWindows<'a, T, N>

§

impl<'a, T> Unpin for Chunks<'a, T>

§

impl<'a, T> Unpin for ChunksExact<'a, T>

§

impl<'a, T> Unpin for ChunksExactMut<'a, T>

§

impl<'a, T> Unpin for ChunksMut<'a, T>

§

impl<'a, T> Unpin for sp_std::collections::btree_set::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::collections::vec_deque::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::sync::mpmc::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::sync::mpsc::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::result::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::slice::Iter<'a, T>

§

impl<'a, T> Unpin for sp_std::collections::vec_deque::IterMut<'a, T>

§

impl<'a, T> Unpin for sp_std::result::IterMut<'a, T>

§

impl<'a, T> Unpin for sp_std::slice::IterMut<'a, T>

§

impl<'a, T> Unpin for sp_std::sync::nonpoison::MappedMutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> Unpin for sp_std::sync::MappedMutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> Unpin for sp_std::sync::nonpoison::MutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> Unpin for sp_std::sync::MutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> Unpin for RChunks<'a, T>

§

impl<'a, T> Unpin for RChunksExact<'a, T>

§

impl<'a, T> Unpin for RChunksExactMut<'a, T>

§

impl<'a, T> Unpin for RChunksMut<'a, T>

§

impl<'a, T> Unpin for sp_std::collections::btree_set::Range<'a, T>

§

impl<'a, T> Unpin for ReentrantLockGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> Unpin for SymmetricDifference<'a, T>

§

impl<'a, T> Unpin for sp_std::sync::mpmc::TryIter<'a, T>

§

impl<'a, T> Unpin for sp_std::sync::mpsc::TryIter<'a, T>

§

impl<'a, T> Unpin for sp_std::collections::btree_set::Union<'a, T>

§

impl<'a, T> Unpin for Windows<'a, T>

§

impl<'a, const N: usize> Unpin for CharArraySearcher<'a, N>

§

impl<'a> Unpin for Arguments<'a>

§

impl<'a> Unpin for Bytes<'a>

§

impl<'a> Unpin for CharIndices<'a>

§

impl<'a> Unpin for CharSearcher<'a>

§

impl<'a> Unpin for Chars<'a>

§

impl<'a> Unpin for EncodeUtf16<'a>

§

impl<'a> Unpin for EscapeAscii<'a>

§

impl<'a> Unpin for EscapeDebug<'a>

§

impl<'a> Unpin for EscapeDefault<'a>

§

impl<'a> Unpin for EscapeUnicode<'a>

§

impl<'a> Unpin for Formatter<'a>

§

impl<'a> Unpin for Lines<'a>

§

impl<'a> Unpin for LinesAny<'a>

§

impl<'a> Unpin for PhantomContravariantLifetime<'a>

§

impl<'a> Unpin for PhantomCovariantLifetime<'a>

§

impl<'a> Unpin for PhantomInvariantLifetime<'a>

§

impl<'a> Unpin for SplitAsciiWhitespace<'a>

§

impl<'a> Unpin for SplitWhitespace<'a>

§

impl<'a> Unpin for Utf8Chunk<'a>

§

impl<'a> Unpin for Utf8Chunks<'a>

§

impl<'a> Unpin for Utf8Pattern<'a>

§

impl<'b, T> Unpin for Ref<'b, T>
where T: ?Sized,

§

impl<'b, T> Unpin for RefMut<'b, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::nonpoison::MappedRwLockReadGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::MappedRwLockReadGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::nonpoison::MappedRwLockWriteGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::MappedRwLockWriteGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::nonpoison::RwLockReadGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::RwLockReadGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::nonpoison::RwLockWriteGuard<'rwlock, T>
where T: ?Sized,

§

impl<'rwlock, T> Unpin for sp_std::sync::RwLockWriteGuard<'rwlock, T>
where T: ?Sized,

§

impl<A, B> Unpin for Chain<A, B>
where A: Unpin, B: Unpin,

§

impl<A, B> Unpin for Zip<A, B>
where A: Unpin, B: Unpin,

§

impl<A> Unpin for Repeat<A>
where A: Unpin,

§

impl<A> Unpin for RepeatN<A>
where A: Unpin,

§

impl<B, C> Unpin for ControlFlow<B, C>
where C: Unpin, B: Unpin,

§

impl<F> Unpin for sp_std::fmt::FromFn<F>
where F: Unpin,

§

impl<F> Unpin for sp_std::iter::FromFn<F>
where F: Unpin,

§

impl<F> Unpin for OnceWith<F>
where F: Unpin,

§

impl<F> Unpin for RepeatWith<F>
where F: Unpin,

§

impl<G> Unpin for FromCoroutine<G>
where G: Unpin,

§

impl<H> Unpin for BuildHasherDefault<H>

§

impl<I, F, const N: usize> Unpin for MapWindows<I, F, N>
where F: Unpin, I: Unpin, <I as Iterator>::Item: Unpin,

§

impl<I, F> Unpin for FilterMap<I, F>
where I: Unpin, F: Unpin,

§

impl<I, F> Unpin for Inspect<I, F>
where I: Unpin, F: Unpin,

§

impl<I, F> Unpin for Map<I, F>
where I: Unpin, F: Unpin,

§

impl<I, G> Unpin for IntersperseWith<I, G>
where G: Unpin, I: Unpin, <I as Iterator>::Item: Unpin,

§

impl<I, P> Unpin for Filter<I, P>
where I: Unpin, P: Unpin,

§

impl<I, P> Unpin for MapWhile<I, P>
where I: Unpin, P: Unpin,

§

impl<I, P> Unpin for SkipWhile<I, P>
where I: Unpin, P: Unpin,

§

impl<I, P> Unpin for TakeWhile<I, P>
where I: Unpin, P: Unpin,

§

impl<I, St, F> Unpin for Scan<I, St, F>
where I: Unpin, F: Unpin, St: Unpin,

§

impl<I, U, F> Unpin for FlatMap<I, U, F>
where <U as IntoIterator>::IntoIter: Unpin, I: Unpin, F: Unpin,

§

impl<I, const N: usize> Unpin for ArrayChunks<I, N>
where I: Unpin, <I as Iterator>::Item: Unpin,

§

impl<I> Unpin for Cloned<I>
where I: Unpin,

§

impl<I> Unpin for Copied<I>
where I: Unpin,

§

impl<I> Unpin for Cycle<I>
where I: Unpin,

§

impl<I> Unpin for Enumerate<I>
where I: Unpin,

§

impl<I> Unpin for Flatten<I>
where <<I as Iterator>::Item as IntoIterator>::IntoIter: Unpin, I: Unpin,

§

impl<I> Unpin for Fuse<I>
where I: Unpin,

§

impl<I> Unpin for Intersperse<I>
where <I as Iterator>::Item: Sized + Unpin, I: Unpin,

§

impl<I> Unpin for Peekable<I>
where I: Unpin, <I as Iterator>::Item: Unpin,

§

impl<I> Unpin for Skip<I>
where I: Unpin,

§

impl<I> Unpin for StepBy<I>
where I: Unpin,

§

impl<I> Unpin for Take<I>
where I: Unpin,

§

impl<Idx> Unpin for sp_std::ops::Range<Idx>
where Idx: Unpin,

§

impl<Idx> Unpin for RangeFrom<Idx>
where Idx: Unpin,

§

impl<Idx> Unpin for RangeInclusive<Idx>
where Idx: Unpin,

§

impl<Idx> Unpin for RangeTo<Idx>
where Idx: Unpin,

§

impl<Idx> Unpin for RangeToInclusive<Idx>
where Idx: Unpin,

§

impl<K, V, A> Unpin for BTreeMap<K, V, A>
where A: Unpin,

§

impl<K, V, A> Unpin for sp_std::collections::btree_map::IntoIter<K, V, A>
where A: Unpin,

§

impl<K, V, A> Unpin for IntoKeys<K, V, A>
where A: Unpin,

§

impl<K, V, A> Unpin for IntoValues<K, V, A>
where A: Unpin,

§

impl<P> Unpin for MaybeDangling<P>
where P: Unpin + ?Sized,

§

impl<T, A> Unpin for BTreeSet<T, A>
where A: Unpin,

§

impl<T, A> Unpin for sp_std::collections::btree_set::IntoIter<T, A>
where A: Unpin,

§

impl<T, A> Unpin for sp_std::collections::vec_deque::IntoIter<T, A>
where A: Unpin, T: Unpin,

§

impl<T, A> Unpin for sp_std::vec::IntoIter<T, A>
where T: Unpin, A: Unpin,

§

impl<T, A> Unpin for Vec<T, A>
where A: Unpin, T: Unpin,

§

impl<T, A> Unpin for VecDeque<T, A>
where A: Unpin, T: Unpin,

§

impl<T, A> Unpin for sp_std::rc::Weak<T, A>
where A: Unpin, T: ?Sized,

§

impl<T, A> Unpin for sp_std::sync::Weak<T, A>
where A: Unpin, T: ?Sized,

§

impl<T, E> Unpin for Result<T, E>
where T: Unpin, E: Unpin,

§

impl<T, F> Unpin for DropGuard<T, F>
where T: Unpin, F: Unpin,

§

impl<T, F> Unpin for LazyCell<T, F>
where F: Unpin, T: Unpin,

§

impl<T, F> Unpin for LazyLock<T, F>
where T: Unpin, F: Unpin,

§

impl<T, F> Unpin for Successors<T, F>
where F: Unpin, T: Unpin,

§

impl<T> Unpin for Atomic<T>
where <T as AtomicPrimitive>::Storage: Unpin,

§

impl<T> Unpin for Bound<T>
where T: Unpin,

§

impl<T> Unpin for Cell<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for Discriminant<T>

§

impl<T> Unpin for Empty<T>

§

impl<T> Unpin for sp_std::sync::mpmc::IntoIter<T>

§

impl<T> Unpin for sp_std::sync::mpsc::IntoIter<T>

§

impl<T> Unpin for sp_std::result::IntoIter<T>
where T: Unpin,

§

impl<T> Unpin for ManuallyDrop<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for MaybeUninit<T>
where T: Unpin,

§

impl<T> Unpin for sp_std::sync::nonpoison::Mutex<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for sp_std::sync::Mutex<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for NonNull<T>
where T: ?Sized,

§

impl<T> Unpin for sp_std::iter::Once<T>
where T: Unpin,

§

impl<T> Unpin for OnceCell<T>
where T: Unpin,

§

impl<T> Unpin for OnceLock<T>
where T: Unpin,

§

impl<T> Unpin for PhantomContravariant<T>
where T: ?Sized,

§

impl<T> Unpin for PhantomCovariant<T>
where T: ?Sized,

§

impl<T> Unpin for PhantomData<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for PhantomInvariant<T>
where T: ?Sized,

§

impl<T> Unpin for PoisonError<T>
where T: Unpin,

§

impl<T> Unpin for sp_std::sync::mpmc::Receiver<T>

§

impl<T> Unpin for sp_std::sync::mpsc::Receiver<T>

§

impl<T> Unpin for sp_std::sync::oneshot::Receiver<T>

§

impl<T> Unpin for sp_std::sync::oneshot::RecvTimeoutError<T>

§

impl<T> Unpin for ReentrantLock<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for RefCell<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for Rev<T>
where T: Unpin,

§

impl<T> Unpin for Reverse<T>
where T: Unpin,

§

impl<T> Unpin for sp_std::sync::nonpoison::RwLock<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for sp_std::sync::RwLock<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for Saturating<T>
where T: Unpin,

§

impl<T> Unpin for SendError<T>
where T: Unpin,

§

impl<T> Unpin for SendTimeoutError<T>
where T: Unpin,

§

impl<T> Unpin for sp_std::sync::mpmc::Sender<T>

§

impl<T> Unpin for sp_std::sync::mpsc::Sender<T>

§

impl<T> Unpin for sp_std::sync::oneshot::Sender<T>

§

impl<T> Unpin for SyncSender<T>

§

impl<T> Unpin for SyncUnsafeCell<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for SyncView<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for ThinBox<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for TraitImpl<T>
where T: ?Sized,

§

impl<T> Unpin for TryLockError<T>
where T: Unpin,

§

impl<T> Unpin for sp_std::sync::oneshot::TryRecvError<T>

§

impl<T> Unpin for TrySendError<T>
where T: Unpin,

§

impl<T> Unpin for UnsafeCell<T>
where T: Unpin + ?Sized,

§

impl<T> Unpin for Wrapping<T>
where T: Unpin,

§

impl<T> Unpin for Yeet<T>
where T: Unpin,

§

impl<Y, R> Unpin for CoroutineState<Y, R>
where Y: Unpin, R: Unpin,