Trait concordium_std::marker::Unpin 1.33.0[−][src]
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<T> Unpin for Ready<T>
[src]
impl<'a, T> Unpin for &'a mut T where
T: 'a + ?Sized,
[src]
T: 'a + ?Sized,
impl<Dyn> Unpin for DynMetadata<Dyn> where
Dyn: ?Sized,
[src]
Dyn: ?Sized,
impl<'a, T> Unpin for &'a T where
T: 'a + ?Sized,
[src]
T: 'a + ?Sized,
impl Unpin for Waker
[src]
impl<T> Unpin for *const T where
T: ?Sized,
[src]
T: ?Sized,
impl<F> Unpin for PollFn<F>
[src]
impl<T> Unpin for Pending<T>
[src]
impl<T> Unpin for *mut T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Unpin for Rc<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 Arc<T> where
T: ?Sized,
[src]
T: ?Sized,
impl Unpin for isize
impl<T> Unpin for [T] where
T: Unpin,
T: Unpin,
impl Unpin for [u8]
impl Unpin for char
impl Unpin for u128
impl Unpin for u16
impl Unpin for i128
impl Unpin for i16
impl Unpin for str
impl Unpin for f64
impl Unpin for u64
impl Unpin for u8
impl Unpin for i64
impl Unpin for i8
impl<T, const N: usize> Unpin for [T; N] where
T: Unpin,
T: Unpin,
impl Unpin for bool
impl Unpin for f32
impl Unpin for u32
impl Unpin for usize
impl Unpin for i32
Loading content...Implementors
impl !Unpin for PhantomPinned
[src]
Auto implementors
impl Unpin for TryReserveError
impl Unpin for Infallible
impl Unpin for Address
impl Unpin for AmountParseError
impl Unpin for ParseDurationError
impl Unpin for SeekFrom
impl Unpin for Fields
impl Unpin for SizeLength
impl Unpin for Type
impl Unpin for ActionsTree
impl Unpin for ContractStateError
impl Unpin for DefaultHasher
impl Unpin for RandomState
impl Unpin for Contract
impl Unpin for Module
impl Unpin for AccountAddress
impl Unpin for Action
impl Unpin for Amount
impl Unpin for AttributeTag
impl Unpin for AttributesCursor
impl Unpin for ChainMetadata
impl Unpin for ContractAddress
impl Unpin for ContractState
impl Unpin for Duration
impl Unpin for Logger
impl Unpin for Parameter
impl Unpin for ParseError
impl Unpin for PoliciesIterator
impl Unpin for Reject
impl Unpin for String
impl Unpin for Timestamp
impl Unpin for ChainMetaTest
impl Unpin for LogRecorder
impl Unpin for TestPolicy
impl<'a, C> Unpin for ContextTest<'a, C> where
C: Unpin,
C: Unpin,
impl<'a, K> Unpin for concordium_std::collections::hash_set::Drain<'a, K> where
K: Unpin,
K: Unpin,
impl<'a, K> Unpin for concordium_std::collections::hash_set::Iter<'a, K>
impl<'a, K, F> Unpin for concordium_std::collections::hash_set::DrainFilter<'a, K, F> where
F: Unpin,
F: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Entry<'a, K, V> where
K: Unpin,
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Entry<'a, K, V> where
K: Unpin,
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Iter<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::IterMut<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Keys<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::OccupiedEntry<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Range<'a, K, V>
impl<'a, K, V> Unpin for RangeMut<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::VacantEntry<'a, K, V> where
K: Unpin,
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::Values<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::btree_map::ValuesMut<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Drain<'a, K, V> where
K: Unpin,
V: Unpin,
K: Unpin,
V: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Iter<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::IterMut<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Keys<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::OccupiedEntry<'a, K, V> where
K: Unpin,
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::VacantEntry<'a, K, V> where
K: Unpin,
K: Unpin,
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::Values<'a, K, V>
impl<'a, K, V> Unpin for concordium_std::collections::hash_map::ValuesMut<'a, K, V>
impl<'a, K, V, F> Unpin for concordium_std::collections::btree_map::DrainFilter<'a, K, V, F> where
F: Unpin,
F: Unpin,
impl<'a, K, V, F> Unpin for concordium_std::collections::hash_map::DrainFilter<'a, K, V, F> where
F: Unpin,
F: Unpin,
impl<'a, K, V, S> Unpin for RawEntryMut<'a, K, V, S>
impl<'a, K, V, S> Unpin for RawEntryBuilder<'a, K, V, S>
impl<'a, K, V, S> Unpin for RawEntryBuilderMut<'a, K, V, S>
impl<'a, K, V, S> Unpin for RawOccupiedEntryMut<'a, K, V, S>
impl<'a, K, V, S> Unpin for RawVacantEntryMut<'a, K, V, S>
impl<'a, T> Unpin for concordium_std::collections::binary_heap::Drain<'a, T>
impl<'a, T> Unpin for DrainSorted<'a, T>
impl<'a, T> Unpin for concordium_std::collections::binary_heap::Iter<'a, T>
impl<'a, T> Unpin for PeekMut<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::Difference<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::Intersection<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::Iter<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::Range<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::SymmetricDifference<'a, T>
impl<'a, T> Unpin for concordium_std::collections::btree_set::Union<'a, T>
impl<'a, T> Unpin for concordium_std::collections::linked_list::Cursor<'a, T>
impl<'a, T> Unpin for CursorMut<'a, T>
impl<'a, T> Unpin for concordium_std::collections::linked_list::Iter<'a, T>
impl<'a, T> Unpin for concordium_std::collections::linked_list::IterMut<'a, T>
impl<'a, T> Unpin for concordium_std::collections::vec_deque::Drain<'a, T>
impl<'a, T> Unpin for concordium_std::collections::vec_deque::Iter<'a, T>
impl<'a, T> Unpin for concordium_std::collections::vec_deque::IterMut<'a, T>
impl<'a, T, F> Unpin for concordium_std::collections::btree_set::DrainFilter<'a, T, F> where
F: Unpin,
F: Unpin,
impl<'a, T, F> Unpin for concordium_std::collections::linked_list::DrainFilter<'a, T, F> where
F: Unpin,
F: Unpin,
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Difference<'a, T, S>
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Intersection<'a, T, S>
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::SymmetricDifference<'a, T, S>
impl<'a, T, S> Unpin for concordium_std::collections::hash_set::Union<'a, T, S>
impl<Attributes> Unpin for Policy<Attributes> where
Attributes: Unpin,
Attributes: Unpin,
impl<K> Unpin for concordium_std::collections::hash_set::IntoIter<K> where
K: Unpin,
K: Unpin,
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoIter<K, V>
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoKeys<K, V>
impl<K, V> Unpin for concordium_std::collections::btree_map::IntoValues<K, V>
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoIter<K, V> where
K: Unpin,
V: Unpin,
K: Unpin,
V: Unpin,
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoKeys<K, V> where
K: Unpin,
V: Unpin,
K: Unpin,
V: Unpin,
impl<K, V> Unpin for concordium_std::collections::hash_map::IntoValues<K, V> where
K: Unpin,
V: Unpin,
K: Unpin,
V: Unpin,
impl<K, V> Unpin for BTreeMap<K, V>
impl<K, V, S> Unpin for HashMap<K, V, S> where
K: Unpin,
S: Unpin,
V: Unpin,
K: Unpin,
S: Unpin,
V: Unpin,
impl<T> Unpin for Bound<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for concordium_std::collections::binary_heap::IntoIter<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for IntoIterSorted<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for concordium_std::collections::btree_set::IntoIter<T>
impl<T> Unpin for concordium_std::collections::linked_list::IntoIter<T>
impl<T> Unpin for BTreeSet<T>
impl<T> Unpin for BinaryHeap<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for LinkedList<T>
impl<T> Unpin for VecDeque<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for concordium_std::collections::vec_deque::IntoIter<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for Discriminant<T>
impl<T> Unpin for concordium_std::Cursor<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for ContractStateTest<T> where
T: Unpin,
T: Unpin,
impl<T> Unpin for MaybeUninit<T> where
T: Unpin,
T: Unpin,
impl<T, A> Unpin for Vec<T, A> where
A: Unpin,
T: Unpin,
A: Unpin,
T: Unpin,
impl<T, S> Unpin for HashSet<T, S> where
S: Unpin,
T: Unpin,
S: Unpin,
T: Unpin,
impl<T: ?Sized> Unpin for PhantomData<T> where
T: Unpin,
T: Unpin,
impl<T: ?Sized> Unpin for ManuallyDrop<T> where
T: Unpin,
T: Unpin,