From 63c3cabe083f90c01921573dfecc1f0e16596415 Mon Sep 17 00:00:00 2001 From: aaron-hardin Date: Sun, 1 Nov 2020 18:32:22 -0600 Subject: [PATCH 1/3] Adding none filter --- src/filters/mod.rs | 1 + src/filters/none.rs | 29 +++++++++++++++++++++++++++++ src/lib.rs | 2 ++ tests/none.rs | 26 ++++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 src/filters/none.rs create mode 100644 tests/none.rs diff --git a/src/filters/mod.rs b/src/filters/mod.rs index fd1fb4400..9ba56abfc 100644 --- a/src/filters/mod.rs +++ b/src/filters/mod.rs @@ -18,6 +18,7 @@ pub mod log; pub mod method; #[cfg(feature = "multipart")] pub mod multipart; +pub mod none; pub mod path; pub mod query; pub mod reply; diff --git a/src/filters/none.rs b/src/filters/none.rs new file mode 100644 index 000000000..58dc36754 --- /dev/null +++ b/src/filters/none.rs @@ -0,0 +1,29 @@ +//! A filter that matches no route. +use futures::future; + +use crate::filter::{filter_fn, Filter}; +use crate::reject::{self, Rejection}; + +/// A filter that matches no route. +/// +/// This can be useful to help with styling. +/// +/// # Example +/// +/// ``` +/// let routes = warp::none() +/// .or(route_1) +/// .or(route_2) +/// .or(route_3) +/// ``` +/// +/// looks nicer than the following because the routes are lined up +/// ``` +/// let routes = route_1 +/// .or(route_2) +/// .or(route_3) +/// ``` +pub fn none() -> impl Filter + Copy { + // always reject with not found + filter_fn(|_route| future::ready(Err(reject::not_found()))) +} diff --git a/src/lib.rs b/src/lib.rs index bc1b16089..2b3e3eb92 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -137,6 +137,8 @@ pub use self::filters::{ // log() function log::log, method::{delete, get, head, method, options, patch, post, put}, + // none() function + none::none, path, // path() function and macro path::path, diff --git a/tests/none.rs b/tests/none.rs new file mode 100644 index 000000000..810be2239 --- /dev/null +++ b/tests/none.rs @@ -0,0 +1,26 @@ +#![deny(warnings)] +use warp::Filter; + +#[tokio::test] +async fn none_is_not_found() { + let filter = warp::none(); + + // none should return not found for request + let req = warp::test::request(); + assert!(req.filter(&filter).await.unwrap_err().is_not_found()); +} + +#[tokio::test] +async fn none_can_be_chained() { + let req = warp::test::request(); + let filter = warp::none(); + + // should not match anything + assert!(!req.matches(&filter).await); + + let req = warp::test::request(); + let filter = filter.or(warp::get().map(warp::reply)); + + // this should now match because we chained the get with 'or' + assert!(req.matches(&filter).await); +} From 8463c9a650a578dc8960dcbdd679afd31a46c294 Mon Sep 17 00:00:00 2001 From: aaron-hardin Date: Sun, 1 Nov 2020 19:04:33 -0600 Subject: [PATCH 2/3] Fix examples in comments --- src/filters/none.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/filters/none.rs b/src/filters/none.rs index 58dc36754..cc0f1beca 100644 --- a/src/filters/none.rs +++ b/src/filters/none.rs @@ -11,17 +11,29 @@ use crate::reject::{self, Rejection}; /// # Example /// /// ``` +/// use warp::Filter; +/// +/// let route_1 = warp::path!("something").map(|| "Hello, world!".to_string()); +/// let route_2 = warp::path!("something2").map(|| "Hello, world again!".to_string()); +/// let route_3 = warp::path!("something3").map(|| "Hello, world again again!".to_string()); +/// /// let routes = warp::none() /// .or(route_1) /// .or(route_2) -/// .or(route_3) +/// .or(route_3); /// ``` /// /// looks nicer than the following because the routes are lined up /// ``` +/// use warp::Filter; +/// +/// let route_1 = warp::path!("something").map(|| "Hello, world!".to_string()); +/// let route_2 = warp::path!("something2").map(|| "Hello, world again!".to_string()); +/// let route_3 = warp::path!("something3").map(|| "Hello, world again again!".to_string()); +/// /// let routes = route_1 /// .or(route_2) -/// .or(route_3) +/// .or(route_3); /// ``` pub fn none() -> impl Filter + Copy { // always reject with not found From 6b76c75d8ddc4bc83af207cd8e96d35a98e02b8e Mon Sep 17 00:00:00 2001 From: aaron-hardin Date: Sun, 1 Nov 2020 19:06:45 -0600 Subject: [PATCH 3/3] Fix formatting --- src/filters/none.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/filters/none.rs b/src/filters/none.rs index cc0f1beca..4616cd81e 100644 --- a/src/filters/none.rs +++ b/src/filters/none.rs @@ -16,7 +16,7 @@ use crate::reject::{self, Rejection}; /// let route_1 = warp::path!("something").map(|| "Hello, world!".to_string()); /// let route_2 = warp::path!("something2").map(|| "Hello, world again!".to_string()); /// let route_3 = warp::path!("something3").map(|| "Hello, world again again!".to_string()); -/// +/// /// let routes = warp::none() /// .or(route_1) /// .or(route_2)