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 insert<T: Any + Send + Sync>(&mut self, value: T) -> Option<Arc<T>>
pub fn insert<T: Any + Send + Sync>(&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: Any + Send + Sync>(
&mut self,
value: Arc<T>,
) -> Option<Arc<T>>
pub fn insert_arc<T: Any + Send + Sync>( &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 + Send + Sync>,
) -> Option<Arc<dyn Any + Send + Sync>>
👎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 + Send + Sync>, ) -> Option<Arc<dyn Any + Send + Sync>>
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 get_arc<T: Any + Send + Sync>(&self) -> Option<Arc<T>>
pub fn get_arc<T: Any + Send + Sync>(&self) -> Option<Arc<T>>
Get a cloned Arc<T> of the extension, if set.
Sourcepub fn contains<T: Any + Send + Sync>(&self) -> bool
pub fn contains<T: Any + Send + Sync>(&self) -> bool
Returns true if an extension of type T is set.
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 more