2 个版本
0.1.1-alpha.2 | 2024 年 6 月 26 日 |
---|---|
0.1.1-alpha.1 | 2024 年 6 月 25 日 |
169 在 构建工具 中排名
每月下载量 22
11KB
213 代码行
如何构建一个通用的 IDL 库(没有服务代码,只有类型和客户端)
在接下来的阅读中,我们假设你的包含你的 IDL 绑定的库被命名为 $PROJECT_IDLS_NAME
。我们还将从示例 echo.idl
中说明如何构建绑定。
创建一个新的库
cargo new --lib $PROJECT_IDLS_NAME
cd $PROJECT_IDLS_NAME
在您的 Cargo.toml
中依赖此库,以及作为标准依赖项的 orbit2-sys
[dependencies]
orbit2-sys = ">=0.1.0"
[build-dependencies]
orbit2-buildtools = ">=0.1.0"
在 'static' 中添加您的 idls
$ mkdir static/
# And put your IDL(s?), for instance:
$ cat static/echo.idl
interface Echo {
void echoString(in string input);
};
创建一个 build.rs
来编译 idl
示例 build.rs
(假设 echo.idl)
use std::path::PathBuf;
use orbit2_buildtools::CommonBuilder;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let idl_path = PathBuf::from("static/echo.idl");
let out_path = PathBuf::from(std::env::var("OUT_DIR").unwrap());
// generate the C code plus the Rust binding
// Note the name of the service is the toplevel name in your IDL
let r = CommonBuilder::new("Echo")
.idl_file(&idl_path)
.out_path(&out_path)
.generate()?;
// make the binding path available in the rest of the compilation
println!(
"cargo:rustc-env=ECHO_IDL_BINDING={:?}",
r.binding_file.as_path()
);
Ok(())
}
在您的 lib.rs 中(或如果您愿意,在子模块中)组织生成的代码
use orbit2_sys::core::*;
include!(env!("ECHO_IDL_BINDING"));
就是这样。现在您可以在客户端和服务器应用程序中使用您的模块。
依赖关系
~6–8.5MB
~154K SLoC