1.0.0[−][src]Trait sp_std::ops::Deref
Used for immutable dereferencing operations, like *v.
In addition to being used for explicit dereferencing operations with the
(unary) * operator in immutable contexts, Deref is also used implicitly
by the compiler in many circumstances. This mechanism is called
'Deref coercion'. In mutable contexts, DerefMut is used.
Implementing Deref for smart pointers makes accessing the data behind them
convenient, which is why they implement Deref. On the other hand, the
rules regarding Deref and DerefMut were designed specifically to
accommodate smart pointers. Because of this, Deref should only be
implemented for smart pointers to avoid confusion.
For similar reasons, this trait should never fail. Failure during
dereferencing can be extremely confusing when Deref is invoked implicitly.
More on Deref coercion
If T implements Deref<Target = U>, and x is a value of type T, then:
- In immutable contexts,
*x(whereTis neither a reference nor a raw pointer) is equivalent to*Deref::deref(&x). - Values of type
&Tare coerced to values of type&U Timplicitly implements all the (immutable) methods of the typeU.
For more details, visit the chapter in The Rust Programming Language as well as the reference sections on the dereference operator, method resolution and type coercions.
Examples
A struct with a single field which is accessible by dereferencing the struct.
use std::ops::Deref; struct DerefExample<T> { value: T } impl<T> Deref for DerefExample<T> { type Target = T; fn deref(&self) -> &Self::Target { &self.value } } let x = DerefExample { value: 'a' }; assert_eq!('a', *x);
Associated Types
Required methods
Implementations on Foreign Types
impl Deref for PathBuf[src][−]
impl<'a> Deref for IoSlice<'a>[src][−]
impl<'a> Deref for IoSliceMut<'a>[src][−]
impl<T> Deref for AssertUnwindSafe<T>[src][−]
impl Deref for OsString[src][−]
impl Deref for CString[src][−]
impl<T, F> Deref for SyncLazy<T, F> where
F: FnOnce() -> T, [src][−]
F: FnOnce() -> T,
impl<'_, T> Deref for &'_ mut T where
T: ?Sized, [src][−]
T: ?Sized,
impl<P> Deref for Pin<P> where
P: Deref, [src][−]
P: Deref,
impl<T, F> Deref for Lazy<T, F> where
F: FnOnce() -> T, [src][−]
F: FnOnce() -> T,
impl<'a, 'f> Deref for VaList<'a, 'f> where
'f: 'a, [src][−]
'f: 'a,
type Target = VaListImpl<'f>
fn deref(&self) -> &VaListImpl<'f>[src]
impl<'_, T> Deref for &'_ T where
T: ?Sized, [src][−]
T: ?Sized,
impl Deref for String[src][−]
impl<'_, T> Deref for PeekMut<'_, T> where
T: Ord, [src][−]
T: Ord,
impl<'input, Endian> Deref for EndianSlice<'input, Endian> where
Endian: Endianity, [src][−]
Endian: Endianity,
Implementors
impl<'_, B> Deref for Cow<'_, B> where
B: ToOwned + ?Sized, [src][+]
B: ToOwned + ?Sized,
impl<'_, T> Deref for Ref<'_, T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<'_, T> Deref for RefMut<'_, T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<'_, T> Deref for MutexGuard<'_, T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<'_, T> Deref for RwLockReadGuard<'_, T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<'_, T> Deref for RwLockWriteGuard<'_, T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<T> Deref for ManuallyDrop<T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<T> Deref for Box<T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<T> Deref for Vec<T>[src][+]
impl<T> Deref for Rc<T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<T> Deref for Arc<T> where
T: ?Sized, [src][+]
T: ?Sized,
impl<A: Array<Item = u8>> Deref for ArrayString<A>
impl<A: Array<Item = u8>> Deref for ArrayString<A>impl<A: Array> Deref for ArrayVec<A>
impl<A: Array> Deref for ArrayVec<A>impl<T> Deref for BitIdx<T> where
T: BitStore,
impl<T> Deref for BitIdx<T> where
T: BitStore, impl<T> Deref for BitPos<T> where
T: BitStore,
impl<T> Deref for BitPos<T> where
T: BitStore, impl<T> Deref for BitMask<T> where
T: BitStore,
impl<T> Deref for BitMask<T> where
T: BitStore, impl<O, T, '_> Deref for BitMut<'_, O, T> where
O: BitOrder,
T: BitStore,
impl<O, T, '_> Deref for BitMut<'_, O, T> where
O: BitOrder,
T: BitStore, impl<O, T> Deref for BitBox<O, T> where
O: BitOrder,
T: BitStore,
impl<O, T> Deref for BitBox<O, T> where
O: BitOrder,
T: BitStore, impl<O, T> Deref for BitVec<O, T> where
O: BitOrder,
T: BitStore,
impl<O, T> Deref for BitVec<O, T> where
O: BitOrder,
T: BitStore, impl<P> Deref for ClearOnDrop<P> where
P: DerefMut,
P::Target: Clear,
impl<P> Deref for ClearOnDrop<P> where
P: DerefMut,
P::Target: Clear, impl<L, R> Deref for Either<L, R> where
L: Deref,
R: Deref<Target = L::Target>,
impl<L, R> Deref for Either<L, R> where
L: Deref,
R: Deref<Target = L::Target>, impl Deref for WithdrawReasons
impl Deref for WithdrawReasonsimpl Deref for WithdrawReason
impl Deref for WithdrawReasonimpl<S: Stream + Unpin> Deref for BlockingStream<S>
impl<S: Stream + Unpin> Deref for BlockingStream<S>impl<'_> Deref for WakerRef<'_>
impl<'_> Deref for WakerRef<'_>impl<T: ?Sized, '_> Deref for MutexGuard<'_, T>
impl<T: ?Sized, '_> Deref for MutexGuard<'_, T>impl<T: ?Sized, U: ?Sized, '_> Deref for MappedMutexGuard<'_, T, U>
impl<T: ?Sized, U: ?Sized, '_> Deref for MappedMutexGuard<'_, T, U>impl<T, N> Deref for GenericArray<T, N> where
N: ArrayLength<T>,
impl<T, N> Deref for GenericArray<T, N> where
N: ArrayLength<T>, impl<'input, Endian> Deref for EndianSlice<'input, Endian> where
Endian: Endianity,
impl<'input, Endian> Deref for EndianSlice<'input, Endian> where
Endian: Endianity, impl<'a, R: RawMutex + 'a, T: ?Sized + 'a> Deref for MutexGuard<'a, R, T>
impl<'a, R: RawMutex + 'a, T: ?Sized + 'a> Deref for MutexGuard<'a, R, T>impl<'a, R: RawMutex + 'a, T: ?Sized + 'a> Deref for MappedMutexGuard<'a, R, T>
impl<'a, R: RawMutex + 'a, T: ?Sized + 'a> Deref for MappedMutexGuard<'a, R, T>impl<'a, R: RawMutex + 'a, G: GetThreadId + 'a, T: ?Sized + 'a> Deref for ReentrantMutexGuard<'a, R, G, T>
impl<'a, R: RawMutex + 'a, G: GetThreadId + 'a, T: ?Sized + 'a> Deref for ReentrantMutexGuard<'a, R, G, T>impl<'a, R: RawMutex + 'a, G: GetThreadId + 'a, T: ?Sized + 'a> Deref for MappedReentrantMutexGuard<'a, R, G, T>
impl<'a, R: RawMutex + 'a, G: GetThreadId + 'a, T: ?Sized + 'a> Deref for MappedReentrantMutexGuard<'a, R, G, T>impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for RwLockReadGuard<'a, R, T>
impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for RwLockReadGuard<'a, R, T>impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for RwLockWriteGuard<'a, R, T>
impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for RwLockWriteGuard<'a, R, T>impl<'a, R: RawRwLockUpgrade + 'a, T: ?Sized + 'a> Deref for RwLockUpgradableReadGuard<'a, R, T>
impl<'a, R: RawRwLockUpgrade + 'a, T: ?Sized + 'a> Deref for RwLockUpgradableReadGuard<'a, R, T>impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for MappedRwLockReadGuard<'a, R, T>
impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for MappedRwLockReadGuard<'a, R, T>impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for MappedRwLockWriteGuard<'a, R, T>
impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for MappedRwLockWriteGuard<'a, R, T>impl<T> Deref for NoDrop<T>
impl<T> Deref for NoDrop<T>impl<T, F: FnOnce() -> T> Deref for Lazy<T, F>
impl<T, F: FnOnce() -> T> Deref for Lazy<T, F>impl<T, F: FnOnce() -> T> Deref for Lazy<T, F>
impl<T, F: FnOnce() -> T> Deref for Lazy<T, F>impl<'a, T: EncodeLike<U>, U: Encode> Deref for Ref<'a, T, U>
impl<'a, T: EncodeLike<U>, U: Encode> Deref for Ref<'a, T, U>impl Deref for Literal
impl Deref for Literalimpl Deref for SimpleRefDeref
impl Deref for SimpleRefDerefimpl Deref for SimpleMutDeref
impl Deref for SimpleMutDerefimpl<H: 'static + StableDeref, T: 'static> Deref for RentRef<H, T>
impl<H: 'static + StableDeref, T: 'static> Deref for RentRef<H, T>impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentMut<H, T>
impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentMut<H, T>impl<H: 'static + StableDeref, T: 'static> Deref for RentRefCell<H, T>
impl<H: 'static + StableDeref, T: 'static> Deref for RentRefCell<H, T>impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentRefCellMut<H, T>
impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentRefCellMut<H, T>impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentMutex<H, T>
impl<H: 'static + StableDeref + DerefMut, T: 'static> Deref for RentMutex<H, T>impl<H: 'static + StableDeref, T: 'static> Deref for RentRwLock<H, T>
impl<H: 'static + StableDeref, T: 'static> Deref for RentRwLock<H, T>impl<H: 'static + StableDeref, T: 'static> Deref for RentRwLockMut<H, T>
impl<H: 'static + StableDeref, T: 'static> Deref for RentRwLockMut<H, T>impl<T, F, S> Deref for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
impl<T, F, S> Deref for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy, impl<A: Array> Deref for SmallVec<A>
impl<A: Array> Deref for SmallVec<A>impl Deref for Signature
impl Deref for Signatureimpl Deref for Signature
impl Deref for Signatureimpl Deref for Signature
impl Deref for Signatureimpl<T: Zeroize> Deref for Protected<T>
impl<T: Zeroize> Deref for Protected<T>impl Deref for Public
impl Deref for Publicimpl Deref for Public
impl Deref for Publicimpl Deref for OffchainExt
impl Deref for OffchainExtimpl Deref for TransactionPoolExt
impl Deref for TransactionPoolExtimpl Deref for KeystoreExt
impl Deref for KeystoreExtimpl Deref for CallInWasmExt
impl Deref for CallInWasmExtimpl Deref for TaskExecutorExt
impl Deref for TaskExecutorExtimpl Deref for Bytes
impl Deref for Bytesimpl Deref for OpaqueMetadata
impl Deref for OpaqueMetadataimpl Deref for VerificationExt
impl Deref for VerificationExtimpl Deref for TracingProxyExt
impl Deref for TracingProxyExtimpl<Xt> Deref for ExtrinsicWrapper<Xt>
impl<Xt> Deref for ExtrinsicWrapper<Xt>impl Deref for PrefixedStorageKey
impl Deref for PrefixedStorageKeyimpl Deref for Underscore
impl Deref for Underscoreimpl Deref for Add
impl Deref for Addimpl Deref for And
impl Deref for Andimpl Deref for At
impl Deref for Atimpl Deref for Bang
impl Deref for Bangimpl Deref for Caret
impl Deref for Caretimpl Deref for Colon
impl Deref for Colonimpl Deref for Comma
impl Deref for Commaimpl Deref for Div
impl Deref for Divimpl Deref for Dollar
impl Deref for Dollarimpl Deref for Dot
impl Deref for Dotimpl Deref for Eq
impl Deref for Eqimpl Deref for Gt
impl Deref for Gtimpl Deref for Lt
impl Deref for Ltimpl Deref for Or
impl Deref for Orimpl Deref for Pound
impl Deref for Poundimpl Deref for Question
impl Deref for Questionimpl Deref for Rem
impl Deref for Remimpl Deref for Semi
impl Deref for Semiimpl Deref for Star
impl Deref for Starimpl Deref for Sub
impl Deref for Subimpl Deref for Tilde
impl Deref for Tildeimpl<'c, 'a> Deref for StepCursor<'c, 'a>
impl<'c, 'a> Deref for StepCursor<'c, 'a>impl Deref for FuncRef
impl Deref for FuncRefimpl Deref for GlobalRef
impl Deref for GlobalRefimpl Deref for MemoryRef
impl Deref for MemoryRefimpl Deref for ModuleRef
impl Deref for ModuleRefimpl Deref for TableRef
impl Deref for TableRefimpl<Z> Deref for Zeroizing<Z> where
Z: Zeroize,
impl<Z> Deref for Zeroizing<Z> where
Z: Zeroize,