【Rust日报】2023-02-26 ws-tool 0.7.0 发布

发布 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 typesplitproxy(auth)tlsbuffered streamdeflateuse as clientuse as server
阻塞
异步

目前 ws-tool 的性能相当不错,你可以在 README 中找到基准测试数据,或者克隆项目并使用 load_test 和 bench_xxx 示例。

这是一个包含 300 字节负载大小的基准测试的简要表。

servercountDuration(ms)Message/sec
uWebSocket50000000107854636068.61
tungstenite50000000220452268088.00
bench_server(no buffer)50000000284731756049.59
bench_server(8k)50000000107914633490.87
bench_async_server(no buffer)50000000410681217492.94
bench_async_server(8k)50000000148923357507.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 语言中文社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值