pub struct Extensions { /* private fields */ }
Expand description
A type map of protocol extensions.
Extensions
can be used by Request
and Response
to store
extra data derived from the underlying protocol.
Implementations§
Source§impl Extensions
impl Extensions
Sourcepub fn new() -> Extensions
pub fn new() -> Extensions
Create an empty Extensions
.
Sourcepub fn insert<T: Clone + Send + Sync + 'static>(&mut self, val: T) -> Option<T>
pub fn insert<T: Clone + Send + Sync + 'static>(&mut self, val: T) -> Option<T>
Insert a type into this Extensions
.
If a extension of this type already existed, it will be returned and replaced with the new one.
§Example
let mut ext = Extensions::new();
assert!(ext.insert(5i32).is_none());
assert!(ext.insert(4u8).is_none());
assert_eq!(ext.insert(9i32), Some(5i32));
Sourcepub fn get<T: Send + Sync + 'static>(&self) -> Option<&T>
pub fn get<T: Send + Sync + 'static>(&self) -> Option<&T>
Get a reference to a type previously inserted on this Extensions
.
§Example
let mut ext = Extensions::new();
assert!(ext.get::<i32>().is_none());
ext.insert(5i32);
assert_eq!(ext.get::<i32>(), Some(&5i32));
Sourcepub fn get_mut<T: Send + Sync + 'static>(&mut self) -> Option<&mut T>
pub fn get_mut<T: Send + Sync + 'static>(&mut self) -> Option<&mut T>
Get a mutable reference to a type previously inserted on this Extensions
.
§Example
let mut ext = Extensions::new();
ext.insert(String::from("Hello"));
ext.get_mut::<String>().unwrap().push_str(" World");
assert_eq!(ext.get::<String>().unwrap(), "Hello World");
Sourcepub fn get_or_insert<T: Clone + Send + Sync + 'static>(
&mut self,
value: T,
) -> &mut T
pub fn get_or_insert<T: Clone + Send + Sync + 'static>( &mut self, value: T, ) -> &mut T
Get a mutable reference to a type, inserting value
if not already present on this
Extensions
.
§Example
let mut ext = Extensions::new();
*ext.get_or_insert(1i32) += 2;
assert_eq!(*ext.get::<i32>().unwrap(), 3);
Sourcepub fn get_or_insert_with<T: Clone + Send + Sync + 'static, F: FnOnce() -> T>(
&mut self,
f: F,
) -> &mut T
pub fn get_or_insert_with<T: Clone + Send + Sync + 'static, F: FnOnce() -> T>( &mut self, f: F, ) -> &mut T
Get a mutable reference to a type, inserting the value created by f
if not already present
on this Extensions
.
§Example
let mut ext = Extensions::new();
*ext.get_or_insert_with(|| 1i32) += 2;
assert_eq!(*ext.get::<i32>().unwrap(), 3);
Sourcepub fn get_or_insert_default<T: Default + Clone + Send + Sync + 'static>(
&mut self,
) -> &mut T
pub fn get_or_insert_default<T: Default + Clone + Send + Sync + 'static>( &mut self, ) -> &mut T
Get a mutable reference to a type, inserting the type’s default value if not already present
on this Extensions
.
§Example
let mut ext = Extensions::new();
*ext.get_or_insert_default::<i32>() += 2;
assert_eq!(*ext.get::<i32>().unwrap(), 2);
Sourcepub fn remove<T: Send + Sync + 'static>(&mut self) -> Option<T>
pub fn remove<T: Send + Sync + 'static>(&mut self) -> Option<T>
Remove a type from this Extensions
.
If a extension of this type existed, it will be returned.
§Example
let mut ext = Extensions::new();
ext.insert(5i32);
assert_eq!(ext.remove::<i32>(), Some(5i32));
assert!(ext.get::<i32>().is_none());
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clear the Extensions
of all inserted extensions.
§Example
let mut ext = Extensions::new();
ext.insert(5i32);
ext.clear();
assert!(ext.get::<i32>().is_none());
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Check whether the extension set is empty or not.
§Example
let mut ext = Extensions::new();
assert!(ext.is_empty());
ext.insert(5i32);
assert!(!ext.is_empty());
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Get the number of extensions available.
§Example
let mut ext = Extensions::new();
assert_eq!(ext.len(), 0);
ext.insert(5i32);
assert_eq!(ext.len(), 1);
Sourcepub fn extend(&mut self, other: Self)
pub fn extend(&mut self, other: Self)
Extends self
with another Extensions
.
If an instance of a specific type exists in both, the one in self
is overwritten with the
one from other
.
§Example
let mut ext_a = Extensions::new();
ext_a.insert(8u8);
ext_a.insert(16u16);
let mut ext_b = Extensions::new();
ext_b.insert(4u8);
ext_b.insert("hello");
ext_a.extend(ext_b);
assert_eq!(ext_a.len(), 3);
assert_eq!(ext_a.get::<u8>(), Some(&4u8));
assert_eq!(ext_a.get::<u16>(), Some(&16u16));
assert_eq!(ext_a.get::<&'static str>().copied(), Some("hello"));
Trait Implementations§
Source§impl Clone for Extensions
impl Clone for Extensions
Source§fn clone(&self) -> Extensions
fn clone(&self) -> Extensions
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more