mirror of
https://github.com/actix/actix-extras.git
synced 2025-06-25 18:09:22 +02:00
allow middlware error result
This commit is contained in:
@ -13,6 +13,8 @@ pub use self::session::{RequestSession, Session, SessionImpl,
|
||||
|
||||
/// Middleware start result
|
||||
pub enum Started {
|
||||
/// Moddleware error
|
||||
Err(Error),
|
||||
/// Execution completed
|
||||
Done(HttpRequest),
|
||||
/// New http response got generated. If middleware generates response
|
||||
@ -24,8 +26,10 @@ pub enum Started {
|
||||
|
||||
/// Middleware execution result
|
||||
pub enum Response {
|
||||
/// Moddleware error
|
||||
Err(Error),
|
||||
/// New http response got generated
|
||||
Response(HttpResponse),
|
||||
Done(HttpResponse),
|
||||
/// Result is a future that resolves to a new http response
|
||||
Future(Box<Future<Item=HttpResponse, Error=Error>>),
|
||||
}
|
||||
@ -49,12 +53,12 @@ pub trait Middleware {
|
||||
}
|
||||
|
||||
/// Method is called when handler returns response,
|
||||
/// but before sending body stream to peer.
|
||||
/// but before sending http message to peer.
|
||||
fn response(&self, req: &mut HttpRequest, resp: HttpResponse) -> Response {
|
||||
Response::Response(resp)
|
||||
Response::Done(resp)
|
||||
}
|
||||
|
||||
/// Method is called after http response get sent to peer.
|
||||
/// Method is called after body stream get sent to peer.
|
||||
fn finish(&self, req: &mut HttpRequest, resp: &HttpResponse) -> Finished {
|
||||
Finished::Done
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ impl<T: SessionBackend> Middleware for SessionStorage<T> {
|
||||
if let Some(s_box) = req.extensions().remove::<Arc<SessionImplBox>>() {
|
||||
s_box.0.write(resp)
|
||||
} else {
|
||||
Response::Response(resp)
|
||||
Response::Done(resp)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -151,7 +151,7 @@ impl SessionImpl for DummySessionImpl {
|
||||
fn remove(&mut self, key: &str) {}
|
||||
fn clear(&mut self) {}
|
||||
fn write(&self, resp: HttpResponse) -> Response {
|
||||
Response::Response(resp)
|
||||
Response::Done(resp)
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,7 +176,7 @@ impl SessionImpl for CookieSession {
|
||||
}
|
||||
|
||||
fn clear(&mut self) {
|
||||
let cookies: Vec<_> = self.jar.iter().map(|c| c.clone()).collect();
|
||||
let cookies: Vec<_> = self.jar.iter().cloned().collect();
|
||||
for cookie in cookies {
|
||||
self.jar.remove(cookie);
|
||||
}
|
||||
@ -185,11 +185,11 @@ impl SessionImpl for CookieSession {
|
||||
fn write(&self, mut resp: HttpResponse) -> Response {
|
||||
for cookie in self.jar.delta() {
|
||||
match HeaderValue::from_str(&cookie.to_string()) {
|
||||
Err(err) => return Response::Response(err.error_response()),
|
||||
Err(err) => return Response::Err(err.into()),
|
||||
Ok(val) => resp.headers.append(header::SET_COOKIE, val),
|
||||
};
|
||||
}
|
||||
Response::Response(resp)
|
||||
Response::Done(resp)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user