1.0.0[−][src]Trait geng_core::prelude::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
(whereT
is neither a reference nor a raw pointer) is equivalent to*Deref::deref(&x)
. - Values of type
&T
are coerced to values of type&U
T
implicitly 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
Loading content...Required methods
Loading content...Implementations on Foreign Types
impl Deref for PathBuf
[src]
impl<T, F> Deref for SyncLazy<T, F> where
F: FnOnce() -> T,
[src]
F: FnOnce() -> T,
impl<T> Deref for AssertUnwindSafe<T>
[src]
impl Deref for OsString
[src]
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 Deref for CString
[src]
impl<'_, T> Deref for &'_ mut T where
T: ?Sized,
[src]
T: ?Sized,
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 Box<T> where
T: ?Sized,
[src]
T: ?Sized,
impl<'_, B> Deref for Cow<'_, B> where
B: ToOwned + ?Sized,
[src]
B: ToOwned + ?Sized,
impl<'_, T> Deref for PeekMut<'_, T> where
T: Ord,
[src]
T: Ord,
impl<T> Deref for Vec<T>
[src]
impl<'a, S> Deref for ANSIGenericString<'a, S> where
S: 'a + ToOwned + ?Sized,
<S as ToOwned>::Owned: Debug,
S: 'a + ToOwned + ?Sized,
<S as ToOwned>::Owned: Debug,
impl<'input, Endian> Deref for EndianSlice<'input, Endian> where
Endian: Endianity,
Endian: Endianity,
impl<'a, T> Deref for VertexBufferSlice<'a, T> where
T: 'a + Vertex,
[src]
T: 'a + Vertex,
impl<T> Deref for VertexBuffer<T> where
T: Vertex,
[src]
T: Vertex,
impl<'a> Deref for Framebuffer<'a>
[src]
type Target = FramebufferRead<'a>
fn deref(&self) -> &<Framebuffer<'a> as Deref>::Target
[src]
impl<T, W> Deref for ContextWrapper<T, W> where
T: ContextCurrentState,
[src]
T: ContextCurrentState,
impl Deref for Window
impl<'a, T> Deref for XSmartPointer<'a, T>
impl<T> Deref for EventLoop<T>
impl<'a, R, T> Deref for MappedRwLockWriteGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + ?Sized,
R: 'a + RawRwLock,
T: 'a + ?Sized,
impl<'a, R, G, T> Deref for ReentrantMutexGuard<'a, R, G, T> where
G: 'a + GetThreadId,
R: 'a + RawMutex,
T: 'a + ?Sized,
G: 'a + GetThreadId,
R: 'a + RawMutex,
T: 'a + ?Sized,
impl<'a, R, T> Deref for MappedRwLockReadGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + ?Sized,
R: 'a + RawRwLock,
T: 'a + ?Sized,
impl<'a, R, T> Deref for MutexGuard<'a, R, T> where
R: 'a + RawMutex,
T: 'a + ?Sized,
R: 'a + RawMutex,
T: 'a + ?Sized,
impl<'a, R, T> Deref for RwLockUpgradableReadGuard<'a, R, T> where
R: 'a + RawRwLockUpgrade,
T: 'a + ?Sized,
R: 'a + RawRwLockUpgrade,
T: 'a + ?Sized,
impl<'a, R, T> Deref for MappedMutexGuard<'a, R, T> where
R: 'a + RawMutex,
T: 'a + ?Sized,
R: 'a + RawMutex,
T: 'a + ?Sized,
impl<'a, R, G, T> Deref for MappedReentrantMutexGuard<'a, R, G, T> where
G: 'a + GetThreadId,
R: 'a + RawMutex,
T: 'a + ?Sized,
G: 'a + GetThreadId,
R: 'a + RawMutex,
T: 'a + ?Sized,
impl<'a, R, T> Deref for RwLockWriteGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + ?Sized,
R: 'a + RawRwLock,
T: 'a + ?Sized,
impl<'a, R, T> Deref for RwLockReadGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + ?Sized,
R: 'a + RawRwLock,
T: 'a + ?Sized,
impl<T, F, S> Deref for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
[src]
F: FnOnce(T),
S: Strategy,
impl<A> Deref for SmallVec<A> where
A: Array,
A: Array,
impl Deref for ThemedPointer
impl Deref for AutoPointer
impl<'lib, T> Deref for Symbol<'lib, T>
impl<T> Deref for Symbol<T>
impl<'a> Deref for SharedBytes<'a>
[src]
impl<T> Deref for NotNan<T> where
T: FloatCore,
T: FloatCore,
impl<T> Deref for OrderedFloat<T> where
T: FloatCore,
T: FloatCore,
impl Deref for MmapMut
[src]
impl Deref for Mmap
[src]
impl Deref for Display
impl<'a> Deref for CursorImageBuffer<'a>
impl<E> Deref for Source<E> where
E: EventSource,
E: EventSource,
impl Deref for UnixReady
[src]
impl Deref for IoVec
impl Deref for WAYLAND_CLIENT_HANDLE
[src]
impl Deref for WAYLAND_EGL_OPTION
[src]
impl Deref for WAYLAND_CURSOR_HANDLE
[src]
impl Deref for WAYLAND_EGL_HANDLE
[src]
impl Deref for WAYLAND_CLIENT_OPTION
[src]
impl Deref for WAYLAND_CURSOR_OPTION
[src]
impl<T> Deref for Symbol<T>
impl<'lib, T> Deref for Symbol<'lib, T>
impl<P, Container> Deref for ImageBuffer<P, Container> where
Container: Deref<Target = [<P as Pixel>::Subpixel]>,
P: Pixel + 'static,
<P as Pixel>::Subpixel: 'static,
[src]
Container: Deref<Target = [<P as Pixel>::Subpixel]>,
P: Pixel + 'static,
<P as Pixel>::Subpixel: 'static,
type Target = [<P as Pixel>::Subpixel]
fn deref(&self) -> &<ImageBuffer<P, Container> as Deref>::Target
[src]
impl<L, R> Deref for Either<L, R> where
L: Deref,
R: Deref<Target = <L as Deref>::Target>,
[src]
L: Deref,
R: Deref<Target = <L as Deref>::Target>,
impl<'a, T> Deref for ShardedLockReadGuard<'a, T> where
T: ?Sized,
T: ?Sized,
impl<T> Deref for CachePadded<T>
impl<'a, T> Deref for ShardedLockWriteGuard<'a, T> where
T: ?Sized,
T: ?Sized,
impl<T> Deref for Owned<T>
impl<'a, T> Deref for InputBuffer<'a, T> where
T: Sample,
T: Sample,
impl<'a, T> Deref for OutputBuffer<'a, T> where
T: Sample,
T: Sample,
impl<A> Deref for TinyVec<A> where
A: Array,
A: Array,
impl<A> Deref for ArrayVec<A> where
A: Array,
A: Array,
impl<T> Deref for SliceDeque<T>
Loading content...Implementors
impl Deref for Error
[src]
impl<'_> Deref for WakerRef<'_>
[src]
impl<'_, T> Deref for geng_core::prelude::futures::lock::MutexGuard<'_, T> where
T: ?Sized,
[src]
T: ?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, U> Deref for geng_core::prelude::futures::lock::MappedMutexGuard<'_, T, U> where
T: ?Sized,
U: ?Sized,
[src]
T: ?Sized,
U: ?Sized,
impl<'a> Deref for IoSlice<'a>
[src]
impl<'a> Deref for IoSliceMut<'a>
[src]
impl<P> Deref for Pin<P> where
P: Deref,
[src]
P: Deref,
impl<S> Deref for BlockingStream<S> where
S: Unpin + Stream,
[src]
S: Unpin + Stream,
type Target = S
fn deref(&self) -> &<BlockingStream<S> as Deref>::TargetⓘNotable traits for BlockingStream<S>
impl<S> Iterator for BlockingStream<S> where
S: Unpin + Stream, type Item = <S as Stream>::Item;
[src]
Notable traits for BlockingStream<S>
impl<S> Iterator for BlockingStream<S> where
S: Unpin + Stream, type Item = <S as Stream>::Item;
impl<T> Deref for ManuallyDrop<T> where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Deref for Arc<T> where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Deref for AutoSave<T> where
T: Serialize,
[src]
T: Serialize,
impl<T> Deref for Color<T> where
T: ColorComponent,
[src]
T: ColorComponent,
impl<T> Deref for Rc<T> where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Deref for Vec2<T>
[src]
impl<T> Deref for Vec3<T>
[src]
impl<T> Deref for Vec4<T>
[src]
impl<T, F> Deref for geng_core::prelude::once_cell::sync::Lazy<T, F> where
F: FnOnce() -> T,
F: FnOnce() -> T,
impl<T, F> Deref for geng_core::prelude::once_cell::unsync::Lazy<T, F> where
F: FnOnce() -> T,
F: FnOnce() -> T,