A query string parser for rust with support for different parsing methods.
```toml
[dependencies] serde-querystring = "0.2.0" ```
You can use the parsers provided in this crate directly, examples are available in each parser's tests.
```rust use serde_querystring::DuplicateQS;
let parsed = DuplicateQS::parse(b"foo=bar&foo=baz"); let values = parsed.values(b"foo"); // Will give you a vector of b"bar" and b"baz" ```
Or you can use serde(with serde
feature, enabled by default)
```rust,ignore use serde::Deserialize; use serdequerystring::{fromstr, ParseMode, DuplicateQS};
struct MyStruct{
foo: Vec
let parsed: MyStruct = from_str("foo=bar&foo=2022", ParseMode::Duplicate).unwrap(); // or let parsed: MyStruct = DuplicateQS::parse(b"foo=bar&foo=baz").deserialize().unwrap(); ```
There are also crates for actix_web
(serde-querystring-actix
) and axum
(serde-querystring-axum
) which provide extractors for their frameworks and can be used without directly relying on the core crate.
Simply parses key=value pairs, accepting only one value per key. In case a key is repeated, we only collect the last value.
```rust,ignore use serdequerystring::{UrlEncodedQS, ParseMode, fromstr};
UrlEncodedQS::parse(b"key=value"); // or let res: MyStruct = from_str("foo=bar&key=value", ParseMode::UrlEncoded).unwrap(); ```
Supports vectors or values by repeating a key.
```rust,ignore use serdequerystring::{DuplicateQS, ParseMode, fromstr};
DuplicateQS::parse(b"foo=bar&foo=bar2&foo=bar3"); // or let res: MyStruct = from_str("foo=bar&foo=bar2&foo=bar3", ParseMode::Duplicate).unwrap(); ```
Supports vectors or values by using a delimiter byte(ex. b'|').
```rust,ignore use serdequerystring::{DelimiterQS, ParseMode, fromstr};
DelimiterQS::parse(b"foo=bar|bar2|bar3", b'|'); // or let res: MyStruct = from_str("foo=bar|bar2|bar3", ParseMode::Delimiter(b'|')).unwrap(); ```
Supports vectors or values by using a brackets and subkeys.
```rust,ignore use serdequerystring::{BracketsQS, ParseMode, fromstr};
BracketsQS::parse(b"foo[1]=bar&foo[2]=bar&foo[3]=bar"); // or let res: MyStruct = from_str("foo[1]=bar&foo[2]=bar&foo[3]=bar", ParseMode::Brackets).unwrap(); ```
We use some lines of code from form_urlencoded
to parse percent encoded chars.
This project is licensed under either of
at your option.