zng::app

Struct AppLocal

source
pub struct AppLocal<T>
where T: Send + Sync + 'static,
{ /* private fields */ }
Expand description

An app local storage.

This is similar to std::thread::LocalKey, but works across all threads of the app.

Use the app_local! macro to declare a static variable in the same style as thread_local!.

Note that in "multi_app" builds the app local can only be used if an app is running in the thread, if no app is running read and write will panic.

Implementations§

source§

impl<T> AppLocal<T>
where T: Send + Sync + 'static,

source

pub fn read(&'static self) -> MappedRwLockReadGuard<'static, RawRwLock, T>

Read lock the value associated with the current app.

Initializes the default value for the app if this is the first value access.

§Panics

Panics if no app is running in "multi_app" builds.

source

pub fn try_read( &'static self, ) -> Option<MappedRwLockReadGuard<'static, RawRwLock, T>>

Try read lock the value associated with the current app.

Initializes the default value for the app if this is the first value access.

Returns None if can’t acquire a read lock.

§Panics

Panics if no app is running in "multi_app" builds.

source

pub fn write(&'static self) -> MappedRwLockWriteGuard<'static, RawRwLock, T>

Write lock the value associated with the current app.

Initializes the default value for the app if this is the first value access.

§Panics

Panics if no app is running in "multi_app" builds.

source

pub fn try_write( &'static self, ) -> Option<MappedRwLockWriteGuard<'static, RawRwLock, T>>

Try to write lock the value associated with the current app.

Initializes the default value for the app if this is the first value access.

Returns None if can’t acquire a write lock.

§Panics

Panics if no app is running in "multi_app" builds.

source

pub fn get(&'static self) -> T
where T: Clone,

Get a clone of the value.

source

pub fn set(&'static self, value: T)

Set the value.

source

pub fn try_get(&'static self) -> Option<T>
where T: Clone,

Try to get a clone of the value.

Returns None if can’t acquire a read lock.

source

pub fn try_set(&'static self, value: T) -> Result<(), T>

Try to set the value.

Returns Err(value) if can’t acquire a write lock.

source

pub fn read_map<O>( &'static self, map: impl FnOnce(&T) -> &O, ) -> MappedRwLockReadGuard<'static, RawRwLock, O>

Create a read lock and map it to a sub-value.

source

pub fn try_read_map<O>( &'static self, map: impl FnOnce(&T) -> &O, ) -> Option<MappedRwLockReadGuard<'static, RawRwLock, O>>

Try to create a read lock and map it to a sub-value.

source

pub fn write_map<O>( &'static self, map: impl FnOnce(&mut T) -> &mut O, ) -> MappedRwLockWriteGuard<'static, RawRwLock, O>

Create a write lock and map it to a sub-value.

source

pub fn try_write_map<O>( &'static self, map: impl FnOnce(&mut T) -> &mut O, ) -> Option<MappedRwLockWriteGuard<'static, RawRwLock, O>>

Try to create a write lock and map it to a sub-value.

source

pub fn id(&'static self) -> AppLocalId

Gets an ID for this local instance that is valid for the lifetime of the process.

Note that comparing two &'static LOCAL pointers is incorrect, because in "hot_reload" builds the statics can be different and still represent the same app local. This ID identifies the actual inner pointer.

Trait Implementations§

source§

impl<T> Hash for AppLocal<T>
where T: Send + Sync + 'static,

source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T> PartialEq for AppLocal<T>
where T: Send + Sync + 'static,

source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> Eq for AppLocal<T>
where T: Send + Sync + 'static,

Auto Trait Implementations§

§

impl<T> Freeze for AppLocal<T>

§

impl<T> RefUnwindSafe for AppLocal<T>

§

impl<T> Send for AppLocal<T>

§

impl<T> Sync for AppLocal<T>

§

impl<T> Unpin for AppLocal<T>

§

impl<T> UnwindSafe for AppLocal<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
§

impl<T> AnyEq for T
where T: Any + PartialEq,

§

fn equals(&self, other: &(dyn Any + 'static)) -> bool

§

fn as_any(&self) -> &(dyn Any + 'static)

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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

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

source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T

source§

impl<T> StateValue for T
where T: Any + Send + Sync,