1
1
//! Types/fns concerning URLs (see RFC 3986)
2
2
3
- import map;
4
- import map:: * ;
5
-
6
3
export url, userinfo, query, from_str, to_str;
7
4
8
5
type url = {
@@ -19,7 +16,7 @@ type userinfo = {
19
16
pass : option < ~str >
20
17
} ;
21
18
22
- type query = map :: hashmap < ~ str , ~str > ;
19
+ type query = ~ [ ( ~ str , ~str ) ] ;
23
20
24
21
fn url ( -scheme : ~str , -user : option < userinfo > , -host : ~str ,
25
22
-path : ~str , -query : query , -fragment : option < ~str > ) -> url {
@@ -61,19 +58,20 @@ fn userinfo_to_str(-userinfo: userinfo) -> ~str {
61
58
}
62
59
63
60
fn query_from_str ( rawquery : ~str ) -> query {
64
- let query: query = map :: str_hash ( ) ;
61
+ let mut query: query = ~ [ ] ;
65
62
if str:: len ( rawquery) != 0 {
66
63
for str:: split_char( rawquery, '&' ) . each |p| {
67
64
let ( k, v) = split_char_first ( p, '=' ) ;
68
- query. insert ( k, v) ;
65
+ vec :: push ( query, ( k, v) ) ;
69
66
} ;
70
67
}
71
68
ret query;
72
69
}
73
70
74
71
fn query_to_str ( query : query ) -> ~str {
75
72
let mut strvec = ~[ ] ;
76
- for query. each |k, v| {
73
+ for query. each |kv| {
74
+ let ( k, v) = kv;
77
75
strvec += ~[ #fmt ( "%s=%s" , k, v) ] ;
78
76
} ;
79
77
ret str:: connect ( strvec, ~"& ");
@@ -161,7 +159,7 @@ fn to_str(url: url) -> ~str {
161
159
} else {
162
160
~""
163
161
} ;
164
- let query = if url. query . size ( ) == 0 {
162
+ let query = if url. query . len ( ) == 0 {
165
163
~""
166
164
} else {
167
165
str:: concat ( ~[ ~"?", query_to_str ( url. query ) ] )
0 commit comments