#flat-buffers #serialization #zero-copy #cross-platform

无std planus

Planus 是一个针对 flatbuffers 的替代编译器,flatbuffers 是一个高效的跨平台序列化库。

5 个版本 (3 个重大更新)

0.4.0 2023年6月3日
0.3.1 2022年6月16日
0.3.0 2022年2月6日
0.2.0 2022年1月12日
0.1.0 2021年12月30日

#83编码

Download history 28937/week @ 2024-03-14 30170/week @ 2024-03-21 28733/week @ 2024-03-28 28514/week @ 2024-04-04 34731/week @ 2024-04-11 33546/week @ 2024-04-18 31139/week @ 2024-04-25 30997/week @ 2024-05-02 33790/week @ 2024-05-09 34656/week @ 2024-05-16 35993/week @ 2024-05-23 33938/week @ 2024-05-30 32398/week @ 2024-06-06 33640/week @ 2024-06-13 37440/week @ 2024-06-20 33089/week @ 2024-06-27

143,173 每月下载量
200 个crate中 使用 200 (4 个直接使用)

MIT/Apache

135KB
3K SLoC

Planus – flatbuffer的替代实现

Build Status Rustc Version 1.64+ License Crates.io Rust Documentation Discord

Planus 是一个针对 flatbuffers 的替代编译器,flatbuffers 是一个高效的跨平台序列化库。

入门指南

首先,安装命令行工具

cargo install planus-cli

然后,编写一个 flatbuffers 文件(或使用现有的一个)。然后可以使用以下命令生成代码:

planus rust -o <output_path.rs> <input_file.fbs>

完整的示例请参阅 examples/rust

功能

  • planus view:序列化 flatbuffer 文件的 TUI 查看器

Planus View

要使用它,您需要指定 .fbs 文件、根类型和二进制文件

planus view test/rust/test_files/alignment.fbs Root test/rust/test_files/alignment/serialize/alignment.bin
  • planus format:对 .fbs 文件进行格式化

  • planus check:检查 .fbs 文件的有效性,并提供良好的错误信息

  • planus dot:为 .fbs 文件生成 DOT 图

  • planus rust:为 .fbs 文件生成 Rust 绑定

目标

  • 用户体验:我们的命令行界面具有出色的错误和帮助信息。我们旨在即使对于不支持的功能,也能输出良好的错误信息。
  • 代码风格:我们希望生成高度符合目标编程语言风格的代码,让程序员非常熟悉。
  • 安全性:生成的代码中任何未定义/不安全的行为都被视为严重错误。
  • 性能:我们希望至少与官方实现一样高效。
  • 模块化:我们编写的代码使得解析、验证和翻译明确分离。我们希望这会使实现具有完整支持的额外后端变得容易。
  • 有观点:在某些情况下,我们的实现比官方实现更为严格。
  • 开发工具:我们希望使用我们的库构建良好的开发工具。这包括至少一个模式格式化工具和一个输出模式中类型DOT图的工具。
  • Rust:通过选择使用Rust作为我们的编译器,我们能够利用像clapLALRPOPcodespan这样的优秀crate作为倍增器。

非目标

  • 完整功能一致性:某些功能难以以干净的方式重新实现。
  • API级别兼容性:我们旨在达到二进制级别的兼容性,但我们生成的代码将无法直接与官方实现的API一起使用。
  • 语言特定扩展:我们不计划支持任何会破坏不同语言之间支持的扩展。
  • 无验证访问:无验证访问使得不小心伤到自己变得非常容易。我们将不提供此类API。

支持的语言

目前我们仅支持Rust,尽管我们计划在未来添加对更多语言的支持。欢迎提交pull请求!

社区

在向社区贡献或参与讨论之前,您应该熟悉我们在本项目中遵循的行为准则

如果您想做出贡献,请打开一个issue或pull请求来讨论您的想法。

对于更开放的问题或复杂决策,请随时在GitHub讨论或ping Discord上的开发者。

实现状态

我们支持大多数基本语言,尽管一些部分尚未经过深入测试。

我们不目前支持的功能

  • rpc_service
  • file_extensionfile_identifierroot_type
  • 固定大小的数组
  • 联合体向量
  • 除了requireddeprecatedidforce_align之外的所有属性。
  • 一些更复杂的字面值,如十六进制浮点数或Unicode代理对解析。
  • JSON转换。

我们可能永远不会支持的功能

  • native_includes
  • 每个文件中不止一个namespace
  • Flexbuffers。

最低支持的Rust版本(MSRV)

我们当前的最低支持的Rust版本是1.64.0。在添加功能时,我们将遵循以下指南

  • 我们旨在支持最新的五个次要Rust版本。这为您提供了6个月的编译器升级窗口。
  • 任何对MSRV的更改都将伴随着小版本号的增加
  • 在crate为1.0之前,这将是对补丁版本的更改。

我想我发现了一个bug!

请提交一个issue!我们也认为错误消息不佳或不直观的行为是高优先级的bug。

依赖关系

~0–425KB