Skip to content

Commit 6f33bbe

Browse files
committed
Add middleware Result type
1 parent 4ec4d10 commit 6f33bbe

14 files changed

+35
-53
lines changed

src/middleware.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
mod prelude {
22
pub use conduit::{Handler, Request, Response};
33
pub use conduit_middleware::{AroundMiddleware, Middleware};
4-
pub use std::error::Error;
4+
5+
use std::error::Error;
6+
pub type BoxError = Box<dyn Error + Send>;
7+
pub type Result<T> = std::result::Result<T, BoxError>;
58
}
69

7-
pub use self::app::AppMiddleware;
8-
pub use self::current_user::CurrentUser;
9-
pub use self::debug::*;
10-
pub use self::ember_index_rewrite::EmberIndexRewrite;
11-
pub use self::head::Head;
10+
pub use prelude::Result;
11+
12+
use self::app::AppMiddleware;
13+
use self::current_user::CurrentUser;
14+
use self::debug::*;
15+
use self::ember_index_rewrite::EmberIndexRewrite;
16+
use self::head::Head;
1217
use self::log_connection_pool_status::LogConnectionPoolStatus;
13-
pub use self::security_headers::SecurityHeaders;
14-
pub use self::static_or_continue::StaticOrContinue;
18+
use self::security_headers::SecurityHeaders;
19+
use self::static_or_continue::StaticOrContinue;
1520

1621
pub mod app;
1722
mod block_traffic;

src/middleware/app.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@ impl AppMiddleware {
1717
}
1818

1919
impl Middleware for AppMiddleware {
20-
fn before(&self, req: &mut dyn Request) -> Result<(), Box<dyn Error + Send>> {
20+
fn before(&self, req: &mut dyn Request) -> Result<()> {
2121
req.mut_extensions().insert(Arc::clone(&self.app));
2222
Ok(())
2323
}
2424

25-
fn after(
26-
&self,
27-
req: &mut dyn Request,
28-
res: Result<Response, Box<dyn Error + Send>>,
29-
) -> Result<Response, Box<dyn Error + Send>> {
25+
fn after(&self, req: &mut dyn Request, res: Result<Response>) -> Result<Response> {
3026
req.mut_extensions().pop::<Arc<App>>().unwrap();
3127
res
3228
}

src/middleware/block_traffic.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl AroundMiddleware for BlockTraffic {
3939
}
4040

4141
impl Handler for BlockTraffic {
42-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
42+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
4343
let has_blocked_value = req
4444
.headers()
4545
.find(&self.header_name)

src/middleware/current_user.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,15 @@ pub enum AuthenticationSource {
2020
}
2121

2222
impl Middleware for CurrentUser {
23-
fn before(&self, req: &mut dyn Request) -> Result<(), Box<dyn Error + Send>> {
23+
fn before(&self, req: &mut dyn Request) -> Result<()> {
2424
// Check if the request has a session cookie with a `user_id` property inside
2525
let id = {
2626
req.session()
2727
.get("user_id")
2828
.and_then(|s| s.parse::<i32>().ok())
2929
};
3030

31-
let conn = req
32-
.db_conn()
33-
.map_err(|e| Box::new(e) as Box<dyn Error + Send>)?;
31+
let conn = req.db_conn().map_err(|e| Box::new(e) as BoxError)?;
3432

3533
if let Some(id) = id {
3634
// If it did, look for a user in the database with the given `user_id`
@@ -58,7 +56,7 @@ impl Middleware for CurrentUser {
5856
})
5957
})
6058
.optional()
61-
.map_err(|e| Box::new(e) as Box<dyn Error + Send>)?
59+
.map_err(|e| Box::new(e) as BoxError)?
6260
} else {
6361
None
6462
};

src/middleware/debug.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,11 @@ use super::prelude::*;
66
pub struct Debug;
77

88
impl Middleware for Debug {
9-
fn before(&self, req: &mut dyn Request) -> Result<(), Box<dyn Error + Send>> {
9+
fn before(&self, req: &mut dyn Request) -> Result<()> {
1010
DebugRequest.before(req)
1111
}
1212

13-
fn after(
14-
&self,
15-
_req: &mut dyn Request,
16-
res: Result<Response, Box<dyn Error + Send>>,
17-
) -> Result<Response, Box<dyn Error + Send>> {
13+
fn after(&self, _req: &mut dyn Request, res: Result<Response>) -> Result<Response> {
1814
res.map(|res| {
1915
println!(" <- {:?}", res.status);
2016
for (k, v) in &res.headers {
@@ -29,7 +25,7 @@ impl Middleware for Debug {
2925
pub struct DebugRequest;
3026

3127
impl Middleware for DebugRequest {
32-
fn before(&self, req: &mut dyn Request) -> Result<(), Box<dyn Error + Send>> {
28+
fn before(&self, req: &mut dyn Request) -> Result<()> {
3329
println!(" version: {}", req.http_version());
3430
println!(" method: {:?}", req.method());
3531
println!(" scheme: {:?}", req.scheme());

src/middleware/ember_index_rewrite.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ impl AroundMiddleware for EmberIndexRewrite {
2424
}
2525

2626
impl Handler for EmberIndexRewrite {
27-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
27+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
2828
// If the client is requesting html, then we've only got one page so
2929
// rewrite the request.
3030
let wants_html = req

src/middleware/ensure_well_formed_500.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ use std::collections::HashMap;
1010
pub struct EnsureWellFormed500;
1111

1212
impl Middleware for EnsureWellFormed500 {
13-
fn after(
14-
&self,
15-
_: &mut dyn Request,
16-
res: Result<Response, Box<dyn Error + Send>>,
17-
) -> Result<Response, Box<dyn Error + Send>> {
13+
fn after(&self, _: &mut dyn Request, res: Result<Response>) -> Result<Response> {
1814
res.or_else(|_| {
1915
let body = "Internal Server Error";
2016
let mut headers = HashMap::new();

src/middleware/head.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl AroundMiddleware for Head {
2020
}
2121

2222
impl Handler for Head {
23-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
23+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
2424
if req.method() == Method::Head {
2525
let mut req = RequestProxy::rewrite_method(req, Method::Get);
2626
self.handler

src/middleware/log_connection_pool_status.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl LogConnectionPoolStatus {
2828
}
2929

3030
impl Middleware for LogConnectionPoolStatus {
31-
fn before(&self, _: &mut dyn Request) -> Result<(), Box<dyn Error + Send>> {
31+
fn before(&self, _: &mut dyn Request) -> Result<()> {
3232
let mut last_log_time = self
3333
.last_log_time
3434
.lock()
@@ -45,11 +45,7 @@ impl Middleware for LogConnectionPoolStatus {
4545
Ok(())
4646
}
4747

48-
fn after(
49-
&self,
50-
_: &mut dyn Request,
51-
res: Result<Response, Box<dyn Error + Send>>,
52-
) -> Result<Response, Box<dyn Error + Send>> {
48+
fn after(&self, _: &mut dyn Request, res: Result<Response>) -> Result<Response> {
5349
self.in_flight_requests.fetch_sub(1, Ordering::SeqCst);
5450
res
5551
}

src/middleware/log_request.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl AroundMiddleware for LogRequests {
2020
}
2121

2222
impl Handler for LogRequests {
23-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
23+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
2424
let request_start = Instant::now();
2525
let res = self.handler.as_ref().unwrap().call(req);
2626
let (level, response_code) = match res {

src/middleware/require_user_agent.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl AroundMiddleware for RequireUserAgent {
2020
}
2121

2222
impl Handler for RequireUserAgent {
23-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
23+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
2424
let has_user_agent = request_header(req, "User-Agent") != "";
2525
let is_download = req.path().ends_with("download");
2626
if !has_user_agent && !is_download {

src/middleware/security_headers.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,7 @@ impl SecurityHeaders {
5757
}
5858

5959
impl Middleware for SecurityHeaders {
60-
fn after(
61-
&self,
62-
_: &mut dyn Request,
63-
mut res: Result<Response, Box<dyn Error + Send>>,
64-
) -> Result<Response, Box<dyn Error + Send>> {
60+
fn after(&self, _: &mut dyn Request, mut res: Result<Response>) -> Result<Response> {
6561
if let Ok(ref mut response) = res {
6662
response.headers.extend(self.headers.clone());
6763
}

src/middleware/static_or_continue.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl AroundMiddleware for StaticOrContinue {
2727
}
2828

2929
impl Handler for StaticOrContinue {
30-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
30+
fn call(&self, req: &mut dyn Request) -> Result<Response> {
3131
match self.static_handler.call(req) {
3232
Ok(ref resp) if resp.status.0 == 404 => {}
3333
ret => return ret,

src/router.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::error::Error;
21
use std::sync::Arc;
32

43
use conduit::{Handler, Request, Response};
@@ -7,7 +6,7 @@ use conduit_router::{RequestParams, RouteBuilder};
76
use crate::controllers::*;
87
use crate::util::errors::{std_error, AppError, AppResult, NotFound};
98
use crate::util::RequestProxy;
10-
use crate::{App, Env};
9+
use crate::{middleware, App, Env};
1110

1211
pub fn build_router(app: &App) -> R404 {
1312
let mut api_router = RouteBuilder::new();
@@ -136,7 +135,7 @@ pub fn build_router(app: &App) -> R404 {
136135
struct C(pub fn(&mut dyn Request) -> AppResult<Response>);
137136

138137
impl Handler for C {
139-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
138+
fn call(&self, req: &mut dyn Request) -> middleware::Result<Response> {
140139
let C(f) = *self;
141140
match f(req) {
142141
Ok(resp) => Ok(resp),
@@ -151,7 +150,7 @@ impl Handler for C {
151150
struct R<H>(pub Arc<H>);
152151

153152
impl<H: Handler> Handler for R<H> {
154-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
153+
fn call(&self, req: &mut dyn Request) -> middleware::Result<Response> {
155154
let path = req.params()["path"].to_string();
156155
let R(ref sub_router) = *self;
157156
sub_router.call(&mut RequestProxy::rewrite_path(req, &path))
@@ -163,7 +162,7 @@ impl<H: Handler> Handler for R<H> {
163162
pub struct R404(pub RouteBuilder);
164163

165164
impl Handler for R404 {
166-
fn call(&self, req: &mut dyn Request) -> Result<Response, Box<dyn Error + Send>> {
165+
fn call(&self, req: &mut dyn Request) -> middleware::Result<Response> {
167166
let R404(ref router) = *self;
168167
match router.recognize(&req.method(), req.path()) {
169168
Ok(m) => {

0 commit comments

Comments
 (0)