mirror of
https://github.com/fafhrd91/actix-web
synced 2025-09-01 17:27:18 +02:00
implement App::data
as App::app_data(Data::new(T)))
(#1906)
This commit is contained in:
29
src/data.rs
29
src/data.rs
@@ -10,8 +10,9 @@ use crate::dev::Payload;
|
||||
use crate::extract::FromRequest;
|
||||
use crate::request::HttpRequest;
|
||||
|
||||
/// Application data factory
|
||||
/// Data factory.
|
||||
pub(crate) trait DataFactory {
|
||||
/// Return true if modifications were made to extensions map.
|
||||
fn create(&self, extensions: &mut Extensions) -> bool;
|
||||
}
|
||||
|
||||
@@ -126,12 +127,8 @@ impl<T: ?Sized + 'static> FromRequest for Data<T> {
|
||||
|
||||
impl<T: ?Sized + 'static> DataFactory for Data<T> {
|
||||
fn create(&self, extensions: &mut Extensions) -> bool {
|
||||
if !extensions.contains::<Data<T>>() {
|
||||
extensions.insert(Data(self.0.clone()));
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
extensions.insert(Data(self.0.clone()));
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,6 +164,24 @@ mod tests {
|
||||
let req = TestRequest::default().to_request();
|
||||
let resp = srv.call(req).await.unwrap();
|
||||
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
|
||||
|
||||
let mut srv = init_service(
|
||||
App::new()
|
||||
.data(10u32)
|
||||
.data(13u32)
|
||||
.app_data(12u64)
|
||||
.app_data(15u64)
|
||||
.default_service(web::to(|n: web::Data<u32>, req: HttpRequest| {
|
||||
// in each case, the latter insertion should be preserved
|
||||
assert_eq!(*req.app_data::<u64>().unwrap(), 15);
|
||||
assert_eq!(*n.into_inner(), 13);
|
||||
HttpResponse::Ok()
|
||||
})),
|
||||
)
|
||||
.await;
|
||||
let req = TestRequest::default().to_request();
|
||||
let resp = srv.call(req).await.unwrap();
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
}
|
||||
|
||||
#[actix_rt::test]
|
||||
|
Reference in New Issue
Block a user