Struct socketioxide::extensions::Extensions
source · pub struct Extensions { /* private fields */ }
Available on crate feature
extensions
only.Expand description
A type map of protocol extensions.
It is heavily inspired by the Extensions
type from the http
crate.
The main difference is that it uses a DashMap
instead of a HashMap
to allow concurrent access.
This is necessary because Extensions
are shared between all the threads that handle the same socket.
Implementations§
source§impl Extensions
impl Extensions
sourcepub fn new() -> Extensions
pub fn new() -> Extensions
Create an empty Extensions
.
sourcepub fn insert<T: Send + Sync + 'static>(&self, val: T) -> Option<T>
pub fn insert<T: Send + Sync + 'static>(&self, val: T) -> Option<T>
Insert a type into this Extensions
.
If a extension of this type already existed, it will be returned.
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<Ref<'_, T>>
pub fn get<T: Send + Sync + 'static>(&self) -> Option<Ref<'_, T>>
Get a reference to a type previously inserted on this Extensions
.
Example
let ext = Extensions::new();
assert!(ext.get::<i32>().is_none());
ext.insert(5i32);
assert_eq!(*ext.get::<i32>().unwrap(), 5i32);
sourcepub fn get_mut<T: Send + Sync + 'static>(&self) -> Option<RefMut<'_, T>>
pub fn get_mut<T: Send + Sync + 'static>(&self) -> Option<RefMut<'_, T>>
Get a mutable reference to a type previously inserted on this Extensions
.
Example
let 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 remove<T: Send + Sync + 'static>(&self) -> Option<T>
pub fn remove<T: Send + Sync + 'static>(&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(&self)
pub fn clear(&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());
Trait Implementations§
source§impl Debug for Extensions
impl Debug for Extensions
source§impl Default for Extensions
impl Default for Extensions
source§fn default() -> Extensions
fn default() -> Extensions
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for Extensions
impl Send for Extensions
impl Sync for Extensions
impl Unpin for Extensions
impl !UnwindSafe for Extensions
Blanket Implementations§
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
Mutably borrows from an owned value. Read more