perf(method): improve logic of parsing a Method
This commit is contained in:
		| @@ -87,25 +87,49 @@ impl Method { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | macro_rules! from_str { | ||||||
|  |     ($s:ident, { $($n:pat => { $($text:pat => $var:ident,)* },)* }) => ({ | ||||||
|  |         let s = $s; | ||||||
|  |         match s.len() { | ||||||
|  |             $( | ||||||
|  |             $n => match s { | ||||||
|  |                 $( | ||||||
|  |                 $text => return Ok($var), | ||||||
|  |                 )* | ||||||
|  |                 _ => {}, | ||||||
|  |             }, | ||||||
|  |             )* | ||||||
|  |             0 => return Err(::Error::Method), | ||||||
|  |             _ => {}, | ||||||
|  |         } | ||||||
|  |         Ok(Extension(s.to_owned())) | ||||||
|  |     }) | ||||||
|  | } | ||||||
|  |  | ||||||
| impl FromStr for Method { | impl FromStr for Method { | ||||||
|     type Err = Error; |     type Err = Error; | ||||||
|     fn from_str(s: &str) -> Result<Method, Error> { |     fn from_str(s: &str) -> Result<Method, Error> { | ||||||
|         if s == "" { |         from_str!(s, { | ||||||
|             Err(Error::Method) |             3 => { | ||||||
|         } else { |  | ||||||
|             Ok(match s { |  | ||||||
|                 "OPTIONS" => Options, |  | ||||||
|                 "GET" => Get, |                 "GET" => Get, | ||||||
|                 "POST" => Post, |  | ||||||
|                 "PUT" => Put, |                 "PUT" => Put, | ||||||
|                 "DELETE" => Delete, |             }, | ||||||
|  |             4 => { | ||||||
|                 "HEAD" => Head, |                 "HEAD" => Head, | ||||||
|                 "TRACE" => Trace, |                 "POST" => Post, | ||||||
|                 "CONNECT" => Connect, |             }, | ||||||
|  |             5 => { | ||||||
|                 "PATCH" => Patch, |                 "PATCH" => Patch, | ||||||
|                 _ => Extension(s.to_owned()) |                 "TRACE" => Trace, | ||||||
|             }) |             }, | ||||||
|         } |             6 => { | ||||||
|  |                 "DELETE" => Delete, | ||||||
|  |             }, | ||||||
|  |             7 => { | ||||||
|  |                 "OPTIONS" => Options, | ||||||
|  |                 "CONNECT" => Connect, | ||||||
|  |             }, | ||||||
|  |         }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user