5 个不稳定版本
0.3.1 | 2024 年 6 月 10 日 |
---|---|
0.3.0 | 2024 年 6 月 7 日 |
0.2.1 | 2022 年 8 月 2 日 |
0.2.0 | 2022 年 6 月 28 日 |
0.1.0 | 2022 年 6 月 21 日 |
#238 在 编码
9,627 每月下载量
用于 6 个 crate(直接使用 2 个)
34KB
912 行
Yaup - 另一个 URL 参数 crate
将您的结构体序列化为查询参数。我创建这个 crate 是因为我没有找到任何与 Meilisearch 中使用的查询参数结构相匹配的东西。
此查询参数格式的特性
- 如果需要发送参数,则该 crate 会写入初始的
?
。 - 您只能序列化遵循 "键值" 形状的结构体,如结构体、
HashMap
、BTreeMap
等。 - 序列(数组、向量、元组等)用逗号分隔。
{ doggo: vec!["kefir", "echo", "echo"] }
序列化为?doggo=kefir,echo
。 - 空和
null
值不会被忽略。{ doggo: Vec::new(), catto: None }
序列化为?doggo=&catto=null
。 - 如果您尝试序列化具有多级键值结构的结构体(例如,包含
HashMap
的对象),则会返回错误。
示例
#[derive(Debug, serde::Serialize)]
enum Filter { New, Registered, Blocked }
#[derive(Debug, serde::Serialize)]
struct Params {
cursor: Option<usize>,
per_page: Option<usize>,
username: String,
filter: Vec<Filter>,
}
let params = Params {
cursor: Some(42),
per_page: None,
username: String::from("tamo"),
filter: vec![Filter::New, Filter::Blocked],
};
assert_eq!(
yaup::to_string(¶ms).unwrap(),
"?cursor=42&per_page=null&username=tamo&filter=New,Blocked"
);
谢谢
这最初是 serde_url_params
的一个分支,该分支仍然在维护。感谢 boxdot
提供的初始代码。
从零开始重写了 v0.3.0 的所有内容。
许可
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在此文档中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖
~0.4–1MB
~22K SLoC