Skip to main content

SemiSticky

Struct SemiSticky 

Source
pub struct SemiSticky<T: 'static> { /* private fields */ }
Expand description

A SemiSticky<T> keeps a value T stored in a thread if it has a drop.

This is a combined version of Fragile and Sticky. If the type does not have a drop it will effectively be a Fragile, otherwise it will be internally behave like a Sticky.

This type requires T: 'static for the same reasons as Sticky and exposes the value only through scoped callbacks. Like Sticky, it is Unpin only if T is Unpin.

Implementations§

Source§

impl<T> SemiSticky<T>

Source

pub fn new(value: T) -> Self

Creates a new SemiSticky wrapping a value.

The value that is moved into the SemiSticky 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. In case the value does not have Drop it will be stored in the Fragile instead.

Source

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. For values stored in Sticky, it is also false once their registry starts being destroyed. Values without drop glue do not depend on the registry.

Source

pub fn into_inner(self) -> T

Consumes the SemiSticky, returning the wrapped value.

§Panics

Panics if called from a different thread than the one where the original value was created.

Source

pub fn try_into_inner(self) -> Result<T, Self>

Consumes the SemiSticky, 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 SemiSticky is returned as Err(self).

Source

pub fn with<R, F>(&self, f: F) -> R
where F: for<'a> FnOnce(&'a T) -> R,

Invokes a callback with a shared reference to the wrapped value.

The callback may return owned data, but it cannot return a reference derived from the wrapped value.

use fragile::SemiSticky;

let value = SemiSticky::new(String::from("hello"));
let length = value.with(String::len);
assert_eq!(length, 5);
§Panics

Panics if the calling thread is not the one that wrapped the value, or if its thread-local registry has been destroyed. For a non-panicking variant, use try_with.

Source

pub fn with_mut<R, F>(&mut self, f: F) -> R
where F: for<'a> FnOnce(&'a mut T) -> R,

Invokes a callback with an exclusive reference to the wrapped value.

The callback may return owned data, but it cannot return a reference derived from the wrapped value.

§Panics

Panics if the calling thread is not the one that wrapped the value, or if its thread-local registry has been destroyed. For a non-panicking variant, use try_with_mut.

Source

pub fn try_with<R, F>(&self, f: F) -> Result<R, InvalidThreadAccess>
where F: for<'a> FnOnce(&'a T) -> R,

Invokes a callback with a shared reference to the wrapped value.

As with with, the callback cannot return a reference derived from the wrapped value.

Returns InvalidThreadAccess without invoking the callback if is_valid is false.

Source

pub fn try_with_mut<R, F>(&mut self, f: F) -> Result<R, InvalidThreadAccess>
where F: for<'a> FnOnce(&'a mut T) -> R,

Invokes a callback with an exclusive reference to the wrapped value.

As with with_mut, the callback cannot return a reference derived from the wrapped value.

Returns InvalidThreadAccess without invoking the callback if is_valid is false.

Trait Implementations§

Source§

impl<T: Clone> Clone for SemiSticky<T>

Source§

fn clone(&self) -> SemiSticky<T> ⓘ

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for SemiSticky<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T: Default> Default for SemiSticky<T>

Source§

fn default() -> SemiSticky<T> ⓘ

Returns the “default value” for a type. Read more
Source§

impl<T: Display> Display for SemiSticky<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T: Eq> Eq for SemiSticky<T>

Source§

impl<T> From<T> for SemiSticky<T>

Source§

fn from(t: T) -> SemiSticky<T> ⓘ

Converts to this type from the input type.
Source§

impl<F: Future> Future for SemiSticky<F>

Source§

type Output = <F as Future>::Output

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more
Source§

impl<T: Ord> Ord for SemiSticky<T>

Source§

fn cmp(&self, other: &SemiSticky<T>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl<T: PartialEq> PartialEq for SemiSticky<T>

Source§

fn eq(&self, other: &SemiSticky<T>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<T: PartialOrd> PartialOrd for SemiSticky<T>

Source§

fn partial_cmp(&self, other: &SemiSticky<T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
Source§

fn lt(&self, other: &SemiSticky<T>) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
Source§

fn le(&self, other: &SemiSticky<T>) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
Source§

fn gt(&self, other: &SemiSticky<T>) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
Source§

fn ge(&self, other: &SemiSticky<T>) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<S: Stream> Stream for SemiSticky<S>

Source§

type Item = <S as Stream>::Item

Values yielded by the stream.
Source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more

Auto Trait Implementations§

§

impl<T> !UnsafeUnpin for SemiSticky<T>

§

impl<T> Freeze for SemiSticky<T>

§

impl<T> RefUnwindSafe for SemiSticky<T>
where T: RefUnwindSafe,

§

impl<T> Send for SemiSticky<T>

§

impl<T> Sync for SemiSticky<T>

§

impl<T> Unpin for SemiSticky<T>
where T: Unpin,

§

impl<T> UnwindSafe for SemiSticky<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F> IntoFuture for F
where F: Future,

Source§

type Output = <F as Future>::Output

The output that the future will produce on completion.
Source§

type IntoFuture = F

Which kind of future are we turning this into?
Source§

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<F, T, E> TryFuture for F
where F: Future<Output = Result<T, E>> + ?Sized,

Source§

type Ok = T

The type of successful values yielded by this future
Source§

type Error = E

The type of failures yielded by this future
Source§

fn try_poll( self: Pin<&mut F>, cx: &mut Context<'_>, ) -> Poll<<F as Future>::Output>

Poll this TryFuture as if it were a Future. Read more
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

Source§

type Ok = T

The type of successful values yielded by this future
Source§

type Error = E

The type of failures yielded by this future
Source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_>, ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more