From 779b480663d2649775ce275d86e6c038ec24c307 Mon Sep 17 00:00:00 2001
From: Nikolay Kim <fafhrd91@gmail.com>
Date: Mon, 23 Oct 2017 22:02:42 -0700
Subject: [PATCH] more simplification for RouteRecognizer

---
 src/httpcodes.rs  | 9 +++++++++
 src/recognizer.rs | 6 ++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/httpcodes.rs b/src/httpcodes.rs
index e5487690..87299aaf 100644
--- a/src/httpcodes.rs
+++ b/src/httpcodes.rs
@@ -13,7 +13,16 @@ pub const HTTPOk: StaticResponse = StaticResponse(StatusCode::OK);
 pub const HTTPCreated: StaticResponse = StaticResponse(StatusCode::CREATED);
 pub const HTTPNoContent: StaticResponse = StaticResponse(StatusCode::NO_CONTENT);
 
+pub const HTTPMultipleChoices: StaticResponse = StaticResponse(StatusCode::MULTIPLE_CHOICES);
+pub const HTTPMovedPermanenty: StaticResponse = StaticResponse(StatusCode::MOVED_PERMANENTLY);
 pub const HTTPFound: StaticResponse = StaticResponse(StatusCode::FOUND);
+pub const HTTPSeeOther: StaticResponse = StaticResponse(StatusCode::SEE_OTHER);
+pub const HTTPNotModified: StaticResponse = StaticResponse(StatusCode::NOT_MODIFIED);
+pub const HTTPUseProxy: StaticResponse = StaticResponse(StatusCode::USE_PROXY);
+pub const HTTPTemporaryRedirect: StaticResponse =
+    StaticResponse(StatusCode::TEMPORARY_REDIRECT);
+pub const HTTPPermanentRedirect: StaticResponse =
+    StaticResponse(StatusCode::PERMANENT_REDIRECT);
 
 pub const HTTPBadRequest: StaticResponse = StaticResponse(StatusCode::BAD_REQUEST);
 pub const HTTPNotFound: StaticResponse = StaticResponse(StatusCode::NOT_FOUND);
diff --git a/src/recognizer.rs b/src/recognizer.rs
index 2dcb75c3..ff80f624 100644
--- a/src/recognizer.rs
+++ b/src/recognizer.rs
@@ -25,7 +25,9 @@ impl<T> Default for RouteRecognizer<T> {
 
 impl<T> RouteRecognizer<T> {
 
-    pub fn new(prefix: String, routes: Vec<(String, T)>) -> Self {
+    pub fn new<P: ToString, U>(prefix: P, routes: U) -> Self
+        where U: IntoIterator<Item=(String, T)>
+    {
         let mut paths = Vec::new();
         let mut handlers = Vec::new();
         for item in routes {
@@ -36,7 +38,7 @@ impl<T> RouteRecognizer<T> {
         let regset = RegexSet::new(&paths);
 
         RouteRecognizer {
-            prefix: prefix.len() - 1,
+            prefix: prefix.to_string().len() - 1,
             patterns: regset.unwrap(),
             routes: handlers,
         }