1
+ #![ feature( core) ]
2
+ #![ cfg_attr( test, feature( test) ) ]
3
+
1
4
#[ cfg( test) ] extern crate test;
2
5
3
6
use nfa:: NFA ;
@@ -56,7 +59,7 @@ impl PartialEq for Metadata {
56
59
57
60
impl Eq for Metadata { }
58
61
59
- #[ derive( PartialEq , Clone , Show ) ]
62
+ #[ derive( PartialEq , Clone , Debug ) ]
60
63
pub struct Params {
61
64
map : BTreeMap < String , String >
62
65
}
@@ -70,15 +73,15 @@ impl Params {
70
73
self . map . insert ( key, value) ;
71
74
}
72
75
73
- pub fn find < ' a > ( & ' a self , key : & str ) -> Option < & ' a str > {
74
- self . map . get ( key) . map ( |s| s . as_slice ( ) )
76
+ pub fn find ( & self , key : & str ) -> Option < & str > {
77
+ self . map . get ( key) . map ( |s| & s [ .. ] )
75
78
}
76
79
}
77
80
78
- impl Index < & ' static str > for Params {
81
+ impl < ' a > Index < & ' a str > for Params {
79
82
type Output = String ;
80
- fn index < ' a > ( & ' a self , index : & & ' static str ) -> & ' a String {
81
- match self . map . get ( & index. to_string ( ) ) {
83
+ fn index ( & self , index : & ' a str ) -> & String {
84
+ match self . map . get ( index) {
82
85
None => panic ! ( format!( "params[{}] did not exist" , index) ) ,
83
86
Some ( s) => s,
84
87
}
@@ -108,8 +111,8 @@ impl<T> Router<T> {
108
111
}
109
112
110
113
pub fn add ( & mut self , mut route : & str , dest : T ) {
111
- if route. len ( ) != 0 && route. char_at ( 0 ) == '/' {
112
- route = route. slice_from ( 1 )
114
+ if route. len ( ) != 0 && route. as_bytes ( ) [ 0 ] == b '/' {
115
+ route = & route[ 1 .. ] ;
113
116
}
114
117
115
118
let nfa = & mut self . nfa ;
@@ -119,14 +122,14 @@ impl<T> Router<T> {
119
122
for ( i, segment) in route. split ( '/' ) . enumerate ( ) {
120
123
if i > 0 { state = nfa. put ( state, CharacterClass :: valid_char ( '/' ) ) ; }
121
124
122
- if segment. len ( ) > 0 && segment. char_at ( 0 ) == ':' {
125
+ if segment. len ( ) > 0 && segment. as_bytes ( ) [ 0 ] == b ':' {
123
126
state = process_dynamic_segment ( nfa, state) ;
124
127
metadata. dynamics += 1 ;
125
- metadata. param_names . push ( segment. slice_from ( 1 ) . to_string ( ) ) ;
126
- } else if segment. len ( ) > 0 && segment. char_at ( 0 ) == '*' {
128
+ metadata. param_names . push ( segment[ 1 .. ] . to_string ( ) ) ;
129
+ } else if segment. len ( ) > 0 && segment. as_bytes ( ) [ 0 ] == b '*' {
127
130
state = process_star_state ( nfa, state) ;
128
131
metadata. stars += 1 ;
129
- metadata. param_names . push ( segment. slice_from ( 1 ) . to_string ( ) ) ;
132
+ metadata. param_names . push ( segment[ 1 .. ] . to_string ( ) ) ;
130
133
} else {
131
134
state = process_static_segment ( segment, nfa, state) ;
132
135
metadata. statics += 1 ;
@@ -139,8 +142,8 @@ impl<T> Router<T> {
139
142
}
140
143
141
144
pub fn recognize < ' a > ( & ' a self , mut path : & str ) -> Result < Match < & ' a T > , String > {
142
- if path. len ( ) != 0 && path. char_at ( 0 ) == '/' {
143
- path = path. slice_from ( 1 ) ;
145
+ if path. len ( ) != 0 && path. as_bytes ( ) [ 0 ] == b '/' {
146
+ path = & path[ 1 .. ] ;
144
147
}
145
148
146
149
let nfa = & self . nfa ;
0 commit comments