http-box 0.1.6

Fast push/callback oriented HTTP parser
Documentation
## Parsing Query Strings

- [http_box::util::QueryIterator()]https://docs.rs/http-box/0.1.5/http_box/util/struct.QueryIterator.html
- [http_box::util::QueryError]https://docs.rs/http-box/0.1.5/http_box/util/enum.QueryError.html

`QueryIterator` enables you to iterate over a query string. Each iteration will return
`(String, Option<String>)`. You can optionally set a callback for receiving errors with
`QueryIterator::on_error()`. This callback will receive instances of `QueryError`.

Here's a basic example that ignores errors:

```rust
extern crate http_box;

use http_box::util::QueryIterator;

fn main() {
    let query = b"field1=value1&field2=value2&field3";

    for (n, (name, value)) in QueryIterator::new(query).enumerate() {
        if n == 0 {
            assert_eq!(
                name,
                "field1"
            );

            assert_eq!(
                value.unwrap(),
                "value1"
            );
        } else if n == 1 {
            assert_eq!(
                name,
                "field2"
            );

            assert_eq!(
                value.unwrap(),
                "value2"
            );
        } else if n == 2 {
            assert_eq!(
                name,
                "field3"
            );

            assert_eq!(
                value,
                None
            );
        }
    }
}
```

And here's an example of specifying an error callback to handle a decoding error:

```rust
extern crate http_box;

use http_box::util::{ QueryError, QueryIterator };

fn main() {
    // notice the null byte at the end of the last parameter name
    // this will report a QueryError::Name error with the byte value that triggered the error
    let query = b"field1=value1&field2=value2&field3\0";

    for (n, (name, value)) in QueryIterator::new(query)
    .on_error(
        |error| {
            match error {
                QueryError::Name(x) => assert_eq!(x, 0),
                QueryError::Value(_) => panic!()
            }
        }
    )
    .enumerate() {
        if n == 0 {
            assert_eq!(
                name,
                "field1"
            );

            assert_eq!(
                value.unwrap(),
                "value1"
            );
        } else if n == 1 {
            assert_eq!(
                name,
                "field2"
            );

            assert_eq!(
                value.unwrap(),
                "value2"
            );
        }
    }
}
```