pub struct Extensions { /* private fields */ }Expand description
A type-keyed map of opaque Arc’d values. Each Rust type T occupies
its own slot, so independent components can each attach their own data
without conflict.
Cloning is cheap: the backing values are reference-counted.
§Example
struct MyData(u32);
struct OtherData(&'static str);
let mut ext = Extensions::new();
ext.insert(MyData(42));
ext.insert_arc(Arc::new(OtherData("hello")));
assert_eq!(ext.get::<MyData>().unwrap().0, 42);
assert_eq!(ext.get::<OtherData>().unwrap().0, "hello");Implementations§
Source§impl Extensions
impl Extensions
Sourcepub fn new() -> Extensions
pub fn new() -> Extensions
Create an empty map.
Sourcepub fn insert<T>(&mut self, value: T) -> Option<Arc<T>>
pub fn insert<T>(&mut self, value: T) -> Option<Arc<T>>
Insert an extension keyed by its concrete type T. Returns the
previous value of that type, if any.
The value is wrapped in an Arc internally. If the caller already
has an Arc<T> and wants to avoid an extra allocation, use
Self::insert_arc.
Sourcepub fn insert_arc<T>(&mut self, value: Arc<T>) -> Option<Arc<T>>
pub fn insert_arc<T>(&mut self, value: Arc<T>) -> Option<Arc<T>>
Insert an extension keyed by its concrete type T, taking an
already-allocated Arc<T>. Returns the previous value of that type,
if any.
Sourcepub fn insert_dyn(
&mut self,
value: Arc<dyn Any + Sync + Send>,
) -> Option<Arc<dyn Any + Sync + Send>>
👎Deprecated since 54.0.0: use insert or insert_arc; only retained to support the deprecated PartitionedFile::with_extensions shim
pub fn insert_dyn( &mut self, value: Arc<dyn Any + Sync + Send>, ) -> Option<Arc<dyn Any + Sync + Send>>
use insert or insert_arc; only retained to support the deprecated PartitionedFile::with_extensions shim
Insert an already-type-erased value, keyed by its dynamic
TypeId. Used internally to support APIs that accept
Arc<dyn Any + Send + Sync> for backwards compatibility and need
to recover the concrete type for keying.
New code should use Self::insert or Self::insert_arc, which
preserve the concrete type at the call site.
Sourcepub fn merge(&mut self, other: &Extensions)
pub fn merge(&mut self, other: &Extensions)
Merge entries from other into self. Entries in other take
precedence over existing entries with the same type.
Trait Implementations§
Source§impl Clone for Extensions
impl Clone for Extensions
Source§fn clone(&self) -> Extensions
fn clone(&self) -> Extensions
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Extensions
impl Debug for Extensions
Source§impl Default for Extensions
impl Default for Extensions
Source§fn default() -> Extensions
fn default() -> Extensions
Auto Trait Implementations§
impl !RefUnwindSafe for Extensions
impl !UnwindSafe for Extensions
impl Freeze for Extensions
impl Send for Extensions
impl Sync for Extensions
impl Unpin for Extensions
impl UnsafeUnpin for Extensions
Blanket Implementations§
Source§impl<Source> AccessAs for Source
impl<Source> AccessAs for Source
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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