mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-23 16:21:06 +01:00
Merge branch 'master' into master
This commit is contained in:
commit
1931388bf2
@ -5,7 +5,11 @@
|
|||||||
- Implement `MessageBody` for `&mut B` where `B: MessageBody + Unpin`. [#2868]
|
- Implement `MessageBody` for `&mut B` where `B: MessageBody + Unpin`. [#2868]
|
||||||
- Implement `MessageBody` for `Pin<B>` where `B::Target: MessageBody`. [#2868]
|
- Implement `MessageBody` for `Pin<B>` where `B::Target: MessageBody`. [#2868]
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- Improve overall performance of operations on `Extensions`. [#2890]
|
||||||
|
|
||||||
[#2868]: https://github.com/actix/actix-web/pull/2868
|
[#2868]: https://github.com/actix/actix-web/pull/2868
|
||||||
|
[#2890]: https://github.com/actix/actix-web/pull/2890
|
||||||
|
|
||||||
|
|
||||||
## 3.2.2 - 2022-09-11
|
## 3.2.2 - 2022-09-11
|
||||||
|
@ -1,9 +1,30 @@
|
|||||||
use std::{
|
use std::{
|
||||||
any::{Any, TypeId},
|
any::{Any, TypeId},
|
||||||
|
collections::HashMap,
|
||||||
fmt,
|
fmt,
|
||||||
|
hash::{BuildHasherDefault, Hasher},
|
||||||
};
|
};
|
||||||
|
|
||||||
use ahash::AHashMap;
|
/// A hasher for `TypeId`s that takes advantage of its known characteristics.
|
||||||
|
///
|
||||||
|
/// Author of `anymap` crate has done research on the topic:
|
||||||
|
/// https://github.com/chris-morgan/anymap/blob/2e9a5704/src/lib.rs#L599
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
struct NoOpHasher(u64);
|
||||||
|
|
||||||
|
impl Hasher for NoOpHasher {
|
||||||
|
fn write(&mut self, _bytes: &[u8]) {
|
||||||
|
unimplemented!("This NoOpHasher can only handle u64s")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_u64(&mut self, i: u64) {
|
||||||
|
self.0 = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn finish(&self) -> u64 {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A type map for request extensions.
|
/// A type map for request extensions.
|
||||||
///
|
///
|
||||||
@ -11,7 +32,7 @@ use ahash::AHashMap;
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Extensions {
|
pub struct Extensions {
|
||||||
/// Use AHasher with a std HashMap with for faster lookups on the small `TypeId` keys.
|
/// Use AHasher with a std HashMap with for faster lookups on the small `TypeId` keys.
|
||||||
map: AHashMap<TypeId, Box<dyn Any>>,
|
map: HashMap<TypeId, Box<dyn Any>, BuildHasherDefault<NoOpHasher>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Extensions {
|
impl Extensions {
|
||||||
@ -19,7 +40,7 @@ impl Extensions {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub fn new() -> Extensions {
|
pub fn new() -> Extensions {
|
||||||
Extensions {
|
Extensions {
|
||||||
map: AHashMap::new(),
|
map: HashMap::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user