< 返回版块

baymax-xhl 发表于 2023-02-26 20:14

Tags:Rust,日报,其他和内容相关的

发布 serde-query 0.2.0

img

发布了 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 发布 🎉🎉🎉

img

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 日报小组 时光

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页