Struct socketioxide::extensions::Extensions
source · pub struct Extensions { /* private fields */ }
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 the inner Map is wrapped with an RwLock
to allow concurrent access.
This is necessary because Extensions
are shared between all the threads that handle the same socket.
You can use the Extension
or
MaybeExtension
extractor to extract an extension of the given type.
Implementations§
source§impl Extensions
impl Extensions
sourcepub fn new() -> Extensions
pub fn new() -> Extensions
Create an empty Extensions
.
sourcepub fn insert<T: Send + Sync + Clone + 'static>(&self, val: T) -> Option<T>
pub fn insert<T: Send + Sync + Clone + 'static>(&self, val: T) -> Option<T>
Insert a type into this Extensions
.
The type must be cloneable and thread safe to be stored.
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 + Clone + 'static>(&self) -> Option<T>
pub fn get<T: Send + Sync + Clone + 'static>(&self) -> Option<T>
Get a cloned value of 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 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());