Struct Extensions

pub struct Extensions { /* private fields */ }

A type map of protocol extensions.

Extensions can be used by Request and Response to store extra data derived from the underlying protocol.

Implementations

impl Extensions

fn new() -> Extensions

Create an empty Extensions.

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

# use http::Extensions;
let mut ext = Extensions::new();
assert!(ext.insert(5i32).is_none());
assert!(ext.insert(4u8).is_none());
assert_eq!(ext.insert(9i32), Some(5i32));
fn get<T: Send + Sync + 'static>(&self) -> Option<&T>

Get a reference to a type previously inserted on this Extensions.

Example

# use http::Extensions;
let mut ext = Extensions::new();
assert!(ext.get::<i32>().is_none());
ext.insert(5i32);

assert_eq!(ext.get::<i32>(), Some(&5i32));
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

# use http::Extensions;
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");
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

# use http::Extensions;
let mut ext = Extensions::new();
*ext.get_or_insert(1i32) += 2;

assert_eq!(*ext.get::<i32>().unwrap(), 3);
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

# use http::Extensions;
let mut ext = Extensions::new();
*ext.get_or_insert_with(|| 1i32) += 2;

assert_eq!(*ext.get::<i32>().unwrap(), 3);
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

# use http::Extensions;
let mut ext = Extensions::new();
*ext.get_or_insert_default::<i32>() += 2;

assert_eq!(*ext.get::<i32>().unwrap(), 2);
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

# use http::Extensions;
let mut ext = Extensions::new();
ext.insert(5i32);
assert_eq!(ext.remove::<i32>(), Some(5i32));
assert!(ext.get::<i32>().is_none());
fn clear(&mut self)

Clear the Extensions of all inserted extensions.

Example

# use http::Extensions;
let mut ext = Extensions::new();
ext.insert(5i32);
ext.clear();

assert!(ext.get::<i32>().is_none());
fn is_empty(&self) -> bool

Check whether the extension set is empty or not.

Example

# use http::Extensions;
let mut ext = Extensions::new();
assert!(ext.is_empty());
ext.insert(5i32);
assert!(!ext.is_empty());
fn len(&self) -> usize

Get the number of extensions available.

Example

# use http::Extensions;
let mut ext = Extensions::new();
assert_eq!(ext.len(), 0);
ext.insert(5i32);
assert_eq!(ext.len(), 1);
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

# use http::Extensions;
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

impl Clone for Extensions

fn clone(&self) -> Extensions

impl Debug for Extensions

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl Default for 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

impl<T> Any for Extensions where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Extensions where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Extensions where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for Extensions where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for Extensions

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Extensions where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for Extensions where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for Extensions where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for Extensions where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>