From da4d11a3338300961938eb4efc6bbb50bd0ecfde Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 19 Mar 2015 23:07:26 -0400 Subject: this should all just deal in strings --- src/http.rs | 27 ++++++++++++--------------- 1 file 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); } -- cgit v1.2.3-54-g00ecf