diff --git a/actix-http/src/extensions.rs b/actix-http/src/extensions.rs index b169c464d..ea502e727 100644 --- a/actix-http/src/extensions.rs +++ b/actix-http/src/extensions.rs @@ -104,6 +104,17 @@ impl Extensions { .and_then(|boxed| boxed.downcast_mut()) } + /// Get a mutable reference or insert an item of a given type. + /// + /// ``` + /// # use actix_http::Extensions; + /// let mut map = Extensions::new(); + /// assert_eq!(map.get::>(), None); + /// map.get_or_insert(Vec::::new()).push(1); + /// assert_eq!(map.get::>(), Some(vec![1])); + /// map.get_or_insert(Vec::::new()).push(2); + /// assert_eq!(map.get::>(), Some(vec![1,2])); + /// ``` pub fn get_or_insert(&mut self, value: T) -> &mut T { self.map .entry(TypeId::of::()) @@ -112,6 +123,17 @@ impl Extensions { .expect("extensions map to always contain value T") } + /// Get a mutable reference or insert an item of a given type calculated with the closure given. + /// + /// ``` + /// # use actix_http::Extensions; + /// let mut map = Extensions::new(); + /// assert_eq!(map.get::>(), None); + /// map.get_or_insert_with(Vec::::new).push(1); + /// assert_eq!(map.get::>(), Some(vec![1])); + /// map.get_or_insert_with(Vec::::new).push(2); + /// assert_eq!(map.get::>(), Some(vec![1,2])); + /// ``` pub fn get_or_insert_with T>(&mut self, default: F) -> &mut T { self.map .entry(TypeId::of::())