diff options
author | Jesse Luehrs <doy@tozt.net> | 2015-03-19 23:07:26 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2015-03-19 23:07:26 -0400 |
commit | da4d11a3338300961938eb4efc6bbb50bd0ecfde (patch) | |
tree | f1fff8282436d0bff939bbca3b43d2097d0bef20 | |
parent | fe7444df4b4280f4a0e92ef4c686f1c45a03b9ec (diff) | |
download | matasano-da4d11a3338300961938eb4efc6bbb50bd0ecfde.tar.gz matasano-da4d11a3338300961938eb4efc6bbb50bd0ecfde.zip |
this should all just deal in strings
-rw-r--r-- | src/http.rs | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/http.rs b/src/http.rs index b85f1b4..ded9608 100644 --- a/src/http.rs +++ b/src/http.rs @@ -1,24 +1,21 @@ use std::collections::HashMap; -fn parse_query_string (string: &[u8]) -> HashMap<&[u8], &[u8]> { +fn parse_query_string (string: &str) -> HashMap<&str, &str> { let mut map = HashMap::new(); let mut offset = 0; - let len = string.len(); + let len = string.as_bytes().len(); while offset < len { let key_start = offset; let key_end = key_start + string[key_start..] - .iter() - .take_while(|&&c| c != b'=') - .count(); - if string[key_end] != b'=' { - panic!("couldn't parse query string '{:?}'", string); - } + .find('=') + .unwrap_or_else(|| { + panic!("couldn't parse query string '{:?}'", string) + }); let key = &string[key_start..key_end]; let value_start = key_end + 1; let value_end = value_start + string[value_start..] - .iter() - .take_while(|&&c| c != b'&') - .count(); + .find('&') + .unwrap_or_else(|| string[value_start..].as_bytes().len()); let value = &string[value_start..value_end]; map.insert(key, value); offset = value_end + 1; @@ -29,10 +26,10 @@ fn parse_query_string (string: &[u8]) -> HashMap<&[u8], &[u8]> { #[test] fn test_parse_query_string () { - let got = parse_query_string(b"foo=bar&baz=qux&zap=zazzle"); + let got = parse_query_string("foo=bar&baz=qux&zap=zazzle"); let mut expected = HashMap::new(); - expected.insert(b"foo", b"bar"); - expected.insert(b"baz", b"qux"); - expected.insert(b"zap", b"zazzle"); + expected.insert("foo", "bar"); + expected.insert("baz", "qux"); + expected.insert("zap", "zazzle"); assert_eq!(got, expected); } |