15次发布
0.3.0-beta.0 | 2024年8月8日 |
---|---|
0.2.1 | 2023年3月6日 |
0.2.0 | 2023年2月1日 |
0.1.0 | 2022年12月28日 |
0.0.7 | 2020年11月22日 |
#184 in 编码
2,789 每月下载量
用于 6 个crate (5 直接)
90KB
2K SLoC
Serde-querystring
支持不同解析方法的Rust查询字符串解析器。
安装
# Cargo.toml
[dependencies]
serde-querystring = "0.3.0-beta.0"
用法
您可以直接使用此crate提供的解析器,每个解析器的测试中都有示例。
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"
或者您可以使用serde(具有 serde
功能,默认启用)
use serde::Deserialize;
use serde_querystring::{from_str, ParseMode, DuplicateQS};
#[derive(Deserialize)]
struct MyStruct{
foo: Vec<String> // Or (String, u32) tuple
}
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();
还有针对 actix_web
(serde-querystring-actix
) 和 axum
(serde-querystring-axum
) 的crate,它们为其框架提供提取器,可以不直接依赖核心crate来使用。
解析器
简单模式
简单地解析键=值对,每个键只接受一个值。如果一个键被重复,我们只收集最后一个值。
use serde_querystring::{UrlEncodedQS, ParseMode, from_str};
UrlEncodedQS::parse(b"key=value");
// or
let res: MyStruct = from_str("foo=bar&key=value", ParseMode::UrlEncoded).unwrap();
重复键模式
通过重复键支持向量或值。
use serde_querystring::{DuplicateQS, ParseMode, from_str};
DuplicateQS::parse(b"foo=bar&foo=bar2&foo=bar3");
// or
let res: MyStruct = from_str("foo=bar&foo=bar2&foo=bar3", ParseMode::Duplicate).unwrap();
分隔符模式
通过使用分隔符字节(例如b'|')支持向量或值。
use serde_querystring::{DelimiterQS, ParseMode, from_str};
DelimiterQS::parse(b"foo=bar|bar2|bar3", b'|');
// or
let res: MyStruct = from_str("foo=bar|bar2|bar3", ParseMode::Delimiter(b'|')).unwrap();
括号模式
通过使用括号和子键支持向量或值。
use serde_querystring::{BracketsQS, ParseMode, from_str};
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();
致谢
我们使用了一些来自 form_urlencoded
的代码行来解析百分编码字符。
许可
此项目受以下任一许可协议的许可:
- Apache License, Version 2.0, (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
任选其一。
依赖
~125–350KB