pub struct Sticky<T: 'static> { /* private fields */ }
Expand description
A Sticky<T>
keeps a value T stored in a thread.
This type works similar in nature to Fragile<T>
and exposes a
similar interface. The difference is that whereas Fragile<T>
has
its destructor called in the thread where the value was sent, a
Sticky<T>
that is moved to another thread will have the internal
destructor called when the originating thread tears down.
Because Sticky<T>
allows values to be kept alive for longer than the
Sticky<T>
itself, it requires all its contents to be 'static
for
soundness.
As this uses TLS internally the general rules about the platform limitations of destructors for TLS apply.
Implementations
sourceimpl<T> Sticky<T>
impl<T> Sticky<T>
sourcepub fn new(value: T) -> Self
pub fn new(value: T) -> Self
Creates a new Sticky
wrapping a value
.
The value that is moved into the Sticky
can be non Send
and
will be anchored to the thread that created the object. If the
sticky wrapper type ends up being send from thread to thread
only the original thread can interact with the value.
sourcepub fn is_valid(&self) -> bool
pub fn is_valid(&self) -> bool
Returns true
if the access is valid.
This will be false
if the value was sent to another thread.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes the Sticky
, returning the wrapped value.
Panics
Panics if called from a different thread than the one where the original value was created.
sourcepub fn try_into_inner(self) -> Result<T, Self>
pub fn try_into_inner(self) -> Result<T, Self>
Consumes the Sticky
, returning the wrapped value if successful.
The wrapped value is returned if this is called from the same thread
as the one where the original value was created, otherwise the
Sticky
is returned as Err(self)
.
sourcepub fn get_mut(&mut self) -> &mut T
pub fn get_mut(&mut self) -> &mut T
Mutably borrows the wrapped value.
Panics
Panics if the calling thread is not the one that wrapped the value.
For a non-panicking variant, use try_get_mut
.
sourcepub fn try_get(&self) -> Result<&T, InvalidThreadAccess>
pub fn try_get(&self) -> Result<&T, InvalidThreadAccess>
Tries to immutably borrow the wrapped value.
Returns None
if the calling thread is not the one that wrapped the value.
sourcepub fn try_get_mut(&mut self) -> Result<&mut T, InvalidThreadAccess>
pub fn try_get_mut(&mut self) -> Result<&mut T, InvalidThreadAccess>
Tries to mutably borrow the wrapped value.
Returns None
if the calling thread is not the one that wrapped the value.
Trait Implementations
sourceimpl<T: Ord> Ord for Sticky<T>
impl<T: Ord> Ord for Sticky<T>
sourceimpl<T: PartialOrd> PartialOrd<Sticky<T>> for Sticky<T>
impl<T: PartialOrd> PartialOrd<Sticky<T>> for Sticky<T>
sourcefn partial_cmp(&self, other: &Sticky<T>) -> Option<Ordering>
fn partial_cmp(&self, other: &Sticky<T>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
sourcefn lt(&self, other: &Sticky<T>) -> bool
fn lt(&self, other: &Sticky<T>) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
sourcefn le(&self, other: &Sticky<T>) -> bool
fn le(&self, other: &Sticky<T>) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<T: Eq> Eq for Sticky<T>
impl<T> Send for Sticky<T>
impl<T> Sync for Sticky<T>
Auto Trait Implementations
impl<T> RefUnwindSafe for Sticky<T> where
T: RefUnwindSafe,
impl<T> Unpin for Sticky<T>
impl<T> UnwindSafe for Sticky<T> where
T: RefUnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more