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 在 编码 中
143,173 每月下载量
在 200 个crate中 使用 200 (4 个直接使用)
135KB
3K SLoC
Planus – flatbuffer的替代实现
Planus 是一个针对 flatbuffers 的替代编译器,flatbuffers 是一个高效的跨平台序列化库。
入门指南
首先,安装命令行工具
cargo install planus-cli
然后,编写一个 flatbuffers 文件(或使用现有的一个)。然后可以使用以下命令生成代码:
planus rust -o <output_path.rs> <input_file.fbs>
完整的示例请参阅 examples/rust。
功能
planus view
:序列化 flatbuffer 文件的 TUI 查看器
要使用它,您需要指定 .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作为我们的编译器,我们能够利用像clap、LALRPOP和codespan这样的优秀crate作为倍增器。
非目标
- 完整功能一致性:某些功能难以以干净的方式重新实现。
- API级别兼容性:我们旨在达到二进制级别的兼容性,但我们生成的代码将无法直接与官方实现的API一起使用。
- 语言特定扩展:我们不计划支持任何会破坏不同语言之间支持的扩展。
- 无验证访问:无验证访问使得不小心伤到自己变得非常容易。我们将不提供此类API。
支持的语言
目前我们仅支持Rust,尽管我们计划在未来添加对更多语言的支持。欢迎提交pull请求!
社区
在向社区贡献或参与讨论之前,您应该熟悉我们在本项目中遵循的行为准则。
- Discord:Planus的官方Discord服务器。
- GitHub Discussions:关于planus的复杂讨论的最佳场所。
如果您想做出贡献,请打开一个issue或pull请求来讨论您的想法。
对于更开放的问题或复杂决策,请随时在GitHub讨论或ping Discord上的开发者。
实现状态
我们支持大多数基本语言,尽管一些部分尚未经过深入测试。
我们不目前支持的功能
rpc_service
file_extension
、file_identifier
和root_type
- 固定大小的数组
- 联合体向量
- 除了
required
、deprecated
、id
或force_align
之外的所有属性。 - 一些更复杂的字面值,如十六进制浮点数或Unicode代理对解析。
- JSON转换。
我们可能永远不会支持的功能
native_includes
- 每个文件中不止一个
namespace
。 - Flexbuffers。
最低支持的Rust版本(MSRV)
我们当前的最低支持的Rust版本是1.64.0。在添加功能时,我们将遵循以下指南
- 我们旨在支持最新的五个次要Rust版本。这为您提供了6个月的编译器升级窗口。
- 任何对MSRV的更改都将伴随着小版本号的增加
- 在crate为1.0之前,这将是对补丁版本的更改。
我想我发现了一个bug!
请提交一个issue!我们也认为错误消息不佳或不直观的行为是高优先级的bug。
依赖关系
~0–425KB