2个不稳定版本
0.2.0+flatc-24.3.25 | 2024年5月20日 |
---|---|
0.1.2+flatc-23.5.26 | 2024年3月31日 |
0.1.1+flatc-23.5.26 |
|
0.1.0+flatc-23.5.26 |
|
0.0.0+flatc-23.5.26 |
|
#566 in 编码
25KB
280 行
flatbuffers-build
此crate提供了一套函数,以方便在Rust中从Rust编译flatbuffer。这对于在build.rs
脚本中使用尤其有帮助。请注意,为了兼容性,此crate将仅支持flatc
编译器的单个版本。请检查它是否与您系统上安装的版本匹配。话虽如此,由于flatbuffers的版本策略,混合补丁和甚至次要版本可能是可以的。
用法
如果您不确定从哪里开始,请查看仓库中的flatbuffers-example
文件夹以获取示例。然而,我们将在这里解释全部功能。
例如,想象一个具有以下文件夹结构的crate
├── build.rs
├── Cargo.toml
├── schemas
│ ├── example.fbs
│ └── weapon.fbs
└── src
└── main.rs
为了编译和使用从example.fbs
和weapon.fbs
生成的代码,首先您需要将flatbuffers-build
添加到您的构建依赖项中,以及匹配的flatbuffers
版本
# Cargo.toml
# [...]
[dependencies]
flatbuffers = "=24.3.25"
[build-dependencies]
flatbuffers-build = "=0.1.0"
# [...]
然后您可以将一个非常简单的build.rs
编写如下
use flatbuffers_build::BuilderOptions;
BuilderOptions::new_with_files(["schemas/weapon.fbs", "schemas/example.fbs"])
.set_symlink_directory("src/gen_flatbuffers")
.compile()
.expect("flatbuffer compilation failed");
请注意,这里weapon.fbs
和example.fbs
是基于flatbuffers
提供的示例方案。命名空间为MyGame.Sample
,其中包含多个表和结构体,包括一个Monster
表。
这将只编译flatbuffer,并将它们放入${OUT_DIR}/flatbuffers
,并在src/gen_flatbuffers
下创建一个符号链接。然后您可以在lib.rs
中这样使用它们
#[allow(warnings)]
mod gen_flatbuffers;
use gen_flatbuffers::my_game::sample::Monster;
fn some_fn() {
// Make use of `Monster`
}
请注意,由于这将生成src/gen_flatbuffers
下的符号链接,您需要将其添加到您的gitignore中,因为这个符号链接会在运行时动态更改。
关于文件排序
不幸的是,由于flatc
编译器的一个小瑕疵,您提供的fbs
文件的顺序确实很重要。通过一些实验,建议您始终在依赖项之后列出文件。否则,生成的mod.rs
文件将无法使用。例如,我们有一个weapon.fbs
和一个example.fbs
文件。由于后者包含对weapon.fbs
的include
指令,它应该在列表中放在后面。如果您将example.fbs
放在weapon.fbs
之前,您将只能导入weapon.fbs
的内容,并且如果尝试使用其他组件,将会出现编译错误。
依赖项
~0.3–2.1MB
~37K SLoC