#idl #binding #build #service #orbit2-sys #corba

构建 orbit2-buildtools

使用 orbit2-sys 从 IDL 生成一些 Corba 绑定的工具

2 个版本

0.1.1-alpha.22024 年 6 月 26 日
0.1.1-alpha.12024 年 6 月 25 日

169构建工具 中排名

每月下载量 22

MIT 许可证

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