1.33.0[−][src]Trait concordium_std::marker::Unpin
Types that can be safely moved after being pinned.
Rust itself has no notion of immovable types, and considers moves (e.g.,
through assignment or mem::replace
) to always be safe.
The Pin
type is used instead to prevent moves through the type
system. Pointers P<T>
wrapped in the Pin<P<T>>
wrapper can't be
moved out of. See the pin
module documentation for more information on
pinning.
Implementing the Unpin
trait for T
lifts the restrictions of pinning off
the type, which then allows moving T
out of Pin<P<T>>
with
functions such as mem::replace
.
Unpin
has no consequence at all for non-pinned data. In particular,
mem::replace
happily moves !Unpin
data (it works for any &mut T
, not
just when T: Unpin
). However, you cannot use mem::replace
on data
wrapped inside a Pin<P<T>>
because you cannot get the &mut T
you
need for that, 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.
Implementations on Foreign Types
impl<'a, T> Unpin for &'a mut T where
T: 'a + ?Sized,
[src]
T: 'a + ?Sized,
impl<'a, T> Unpin for &'a T where
T: 'a + ?Sized,
[src]
T: 'a + ?Sized,
impl<T> Unpin for *const T where
T: ?Sized,
[src]
T: ?Sized,
impl Unpin for Waker
[src]
impl<T> Unpin for Pending<T>
[src]
impl<F> Unpin for PollFn<F>
[src]
impl<T> Unpin for Ready<T>
[src]
impl<T> Unpin for *mut T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Unpin for Arc<T> where
T: ?Sized,
[src]
T: ?Sized,
impl<T, A> Unpin for Box<T, A> where
T: ?Sized,
A: Allocator + 'static,
[src]
T: ?Sized,
A: Allocator + 'static,
impl<T> Unpin for Rc<T> where
T: ?Sized,
[src]
T: ?Sized,
impl Unpin for isize
[src]
impl<T> Unpin for [T] where
T: Unpin,
[src]
T: Unpin,
impl Unpin for [u8]
[src]
impl Unpin for char
[src]
impl Unpin for u128
[src]
impl Unpin for u16
[src]
impl Unpin for i128
[src]
impl Unpin for i16
[src]
impl Unpin for str
[src]
impl Unpin for f64
[src]
impl Unpin for u64
[src]
impl Unpin for u8
[src]
impl Unpin for i64
[src]
impl Unpin for i8
[src]
impl<T, const N: usize> Unpin for [T; N] where
T: Unpin,
[src]
T: Unpin,
impl Unpin for bool
[src]
impl Unpin for f32
[src]
impl Unpin for u32
[src]
impl Unpin for usize
[src]
impl Unpin for i32
[src]
Loading content...Implementors
impl !Unpin for PhantomPinned
[src]
Auto implementors
impl Unpin for TryReserveError
[src]
impl Unpin for Infallible
[src]
impl Unpin for Address
[src]
impl Unpin for AmountParseError
[src]
impl Unpin for ParseDurationError
[src]
impl Unpin for SeekFrom
[src]
impl Unpin for Fields
[src]
impl Unpin for SizeLength
[src]
impl Unpin for Type
[src]
impl Unpin for ActionsTree
[src]
impl Unpin for DefaultHasher
[src]
impl Unpin for RandomState
[src]
impl Unpin for Contract
[src]
impl Unpin for Module
[src]
impl Unpin for AccountAddress
[src]
impl Unpin for Action
[src]
impl Unpin for Amount
[src]
impl Unpin for AttributeTag
[src]
impl Unpin for AttributesCursor
[src]
impl Unpin for ChainMetadata
[src]
impl Unpin for ContractAddress
[src]
impl Unpin for ContractState
[src]
impl Unpin for Duration
[src]
impl Unpin for Logger
[src]
impl Unpin for Parameter
[src]
impl Unpin for ParseError
[src]
impl Unpin for PoliciesIterator
[src]
impl Unpin for Reject
[src]
impl Unpin for String
[src]
impl Unpin for Timestamp
[src]
impl Unpin for ChainMetaTest
[src]
impl Unpin for LogRecorder
[src]
impl Unpin for TestPolicy
[src]
impl<'a, C> Unpin for ContextTest<'a, C> where
C: Unpin,
[src]
C: Unpin,
impl<'a, K> Unpin for concordium_std::collections::hash_set::Drain<'a, K> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K> Unpin for concordium_std::collections::hash_set::Iter<'a, K>
[src]
impl<'a, K, F> Unpin for concordium_std::collections::hash_set::DrainFilter<'a, K, F> where
F: Unpin,
[src]
F: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Entry<'a, K, V> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Entry<'a, K, V> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Iter<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::IterMut<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Keys<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::OccupiedEntry<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Range<'a, K, V>
[src]
impl<'a, K, V> Unpin for RangeMut<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::VacantEntry<'a, K, V> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Values<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::ValuesMut<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Drain<'a, K, V> where
K: Unpin,
V: Unpin,
[src]
K: Unpin,
V: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Iter<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::IterMut<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Keys<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::OccupiedEntry<'a, K, V> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::VacantEntry<'a, K, V> where
K: Unpin,
[src]
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Values<'a, K, V>
[src]
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::ValuesMut<'a, K, V>
[src]
impl<'a, K, V, F> Unpin for concordium_std::collections::btree_map::DrainFilter<'a, K, V, F> where
F: Unpin,
[src]
F: Unpin,
impl<'a, K, V, F> Unpin for concordium_std::collections::hash_map::DrainFilter<'a, K, V, F> where
F: Unpin,
[src]
F: Unpin,
impl<'a, K, V, S> Unpin for RawEntryMut<'a, K, V, S>
[src]
impl<'a, K, V, S> Unpin for RawEntryBuilder<'a, K, V, S>
[src]
impl<'a, K, V, S> Unpin for RawEntryBuilderMut<'a, K, V, S>
[src]
impl<'a, K, V, S> Unpin for RawOccupiedEntryMut<'a, K, V, S>
[src]
impl<'a, K, V, S> Unpin for RawVacantEntryMut<'a, K, V, S>
[src]
impl<'a, T> Unpin for concordium_std::collections::binary_heap::Drain<'a, T>
[src]
impl<'a, T> Unpin for DrainSorted<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::binary_heap::Iter<'a, T>
[src]
impl<'a, T> Unpin for PeekMut<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::Difference<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::Intersection<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::Iter<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::Range<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::SymmetricDifference<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::btree_set::Union<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::linked_list::Cursor<'a, T>
[src]
impl<'a, T> Unpin for CursorMut<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::linked_list::Iter<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::linked_list::IterMut<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::vec_deque::Drain<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::vec_deque::Iter<'a, T>
[src]
impl<'a, T> Unpin for concordium_std::collections::vec_deque::IterMut<'a, T>
[src]
impl<'a, T, F> Unpin for concordium_std::collections::btree_set::DrainFilter<'a, T, F> where
F: Unpin,
[src]
F: Unpin,
impl<'a, T, F> Unpin for concordium_std::collections::linked_list::DrainFilter<'a, T, F> where
F: Unpin,
[src]
F: Unpin,
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Difference<'a, T, S>
[src]
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Intersection<'a, T, S>
[src]
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::SymmetricDifference<'a, T, S>
[src]
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Union<'a, T, S>
[src]
impl<Attributes> Unpin for Policy<Attributes> where
Attributes: Unpin,
[src]
Attributes: Unpin,
impl<K> Unpin for concordium_std::collections::hash_set::IntoIter<K> where
K: Unpin,
[src]
K: Unpin,
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoIter<K, V>
[src]
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoKeys<K, V>
[src]
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoValues<K, V>
[src]
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoIter<K, V> where
K: Unpin,
V: Unpin,
[src]
K: Unpin,
V: Unpin,
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoKeys<K, V> where
K: Unpin,
V: Unpin,
[src]
K: Unpin,
V: Unpin,
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoValues<K, V> where
K: Unpin,
V: Unpin,
[src]
K: Unpin,
V: Unpin,
impl<K, V> Unpin for BTreeMap<K, V>
[src]
impl<K, V, S> Unpin for HashMap<K, V, S> where
K: Unpin,
S: Unpin,
V: Unpin,
[src]
K: Unpin,
S: Unpin,
V: Unpin,
impl<T> Unpin for Bound<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for concordium_std::collections::binary_heap::IntoIter<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for IntoIterSorted<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for concordium_std::collections::btree_set::IntoIter<T>
[src]
impl<T> Unpin for concordium_std::collections::linked_list::IntoIter<T>
[src]
impl<T> Unpin for BTreeSet<T>
[src]
impl<T> Unpin for BinaryHeap<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for LinkedList<T>
[src]
impl<T> Unpin for VecDeque<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for concordium_std::collections::vec_deque::IntoIter<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for Discriminant<T> where
<T as DiscriminantKind>::Discriminant: Unpin,
[src]
<T as DiscriminantKind>::Discriminant: Unpin,
impl<T> Unpin for concordium_std::Cursor<T> where
T: Unpin,
[src]
T: Unpin,
impl<T> Unpin for MaybeUninit<T> where
T: Unpin,
[src]
T: Unpin,
impl<T, A> Unpin for Vec<T, A> where
A: Unpin,
T: Unpin,
[src]
A: Unpin,
T: Unpin,
impl<T, S> Unpin for HashSet<T, S> where
S: Unpin,
T: Unpin,
[src]
S: Unpin,
T: Unpin,
impl<T: ?Sized> Unpin for PhantomData<T> where
T: Unpin,
[src]
T: Unpin,
impl<T: ?Sized> Unpin for ManuallyDrop<T> where
T: Unpin,
[src]
T: Unpin,