发布 serde-query 0.2.0
发布了 serde-query 0.2.0 版本!这个 proc-macro 库允许您针对任何与 serde 兼容的数据格式编写查询:https://github.com/pandaman64/serde-query/
新版本完全重写了代码生成。这次重写使我能够实现数组查询并显着改进错误消息!欢迎任何问题和意见!
例子
数组查询
#[derive(DeserializeQuery)]
struct Data {
#[query(".commits.[].author")]
authors: Vec<String>,
#[query(".count")]
count: usize,
}
let document = serde_json::json!({
"commits": [
{ "author": "Kou", "hash": 0x0202 },
{ "author": "Kasumi", "hash": 0x1013 },
{ "author": "Masaru", "hash": 0x0809 },
],
"count": 3,
}).to_string();
// You can use `Query<T>` as a `Deserialize` type for any `Deserializer`
// and convert the result to the desired type using `From`/`Into`.
let data: Data = serde_json::from_str::<Query<Data>>(&document)?.into();
assert_eq!(data.authors, vec!["Kou", "Kasumi", "Masaru"]);
assert_eq!(data.count, 3);
错误信息
#[derive(Debug, Deserialize)]
struct Data {
// missing field
#[query(".author.name")]
author_name: String,
// typo
#[query(".commit.commiter.name")]
committer_name: String,
// type error
#[query(".author.id")]
id: String,
}
let error = serde_json::from_str::<Data>(INPUT).unwrap_err();
assert_eq!(
error.to_string(),
r#"
Queries failed for fields: 'author_name', 'committer_name', 'id'
1. Query for field 'author_name' failed at '.author': missing field 'name'
2. Query for field 'committer_name' failed at '.commit': missing field 'commiter'
3. Query for field 'id' failed at '.author.id': invalid type: integer `5635139`, expected a string at line 34 column 17
"#
.trim_start()
);
公告:ws-tool 0.7.0 发布 🎉🎉🎉
ws-tool 0.7.0 发布,带来了 permessage-deflate 扩展以及更多的性能和 API 优化。
这是 ws-tool 的特征矩阵
IO type | split | proxy(auth) | tls | buffered stream | deflate | use as client | use as server |
---|---|---|---|---|---|---|---|
阻塞 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
异步 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
目前 ws-tool 的性能相当不错,你可以在 README 中找到基准测试数据,或者克隆项目并使用 load_test 和 bench_xxx 示例。
这是一个包含 300 字节负载大小的基准测试的简要表。
server | count | Duration(ms) | Message/sec |
---|---|---|---|
uWebSocket | 50000000 | 10785 | 4636068.61 |
tungstenite | 50000000 | 22045 | 2268088.00 |
bench_server(no buffer) | 50000000 | 28473 | 1756049.59 |
bench_server(8k) | 50000000 | 10791 | 4633490.87 |
bench_async_server(no buffer) | 50000000 | 41068 | 1217492.94 |
bench_async_server(8k) | 50000000 | 14892 | 3357507.39 |
欢迎PR和star。
Libmake 简介:一个 Rust 库生成器,可帮助您快速轻松地创建高质量的 Rust 库。
Libmake 简介:一个 Rust 库生成器,可帮助您快速轻松地创建高质量的 Rust 库。
Libmake旨在易于使用,并生成一个简单、惯用的 Rust 库,您可以使用它来构建自己的应用程序。
该库旨在用作命令行工具。Libmake 的一些主要功能包括:
- 通过命令行手动生成新的 Rust 库。
- 从预定义的 CSV、JSON 或 YAML 文件生成新的 Rust 库。
如果您有兴趣尝试 Libmake,可以通过以下链接在 Crates.io 上找到它:
- https://crates.io/crates/libmake
From 日报小组 时光
社区学习交流平台订阅:
- Rustcc 论坛:支持 rss
- [微信公众号:Rust 语言中文社区]
评论区
写评论还没有评论