#metadata #cargo-metadata #cargo #downstream #reverse #inject

构建 inwelling

在编译时收集下游crates的信息

12次发布

0.5.5 2024年2月9日
0.5.4 2024年2月4日
0.5.1 2024年1月30日
0.5.0 2023年3月22日
0.1.2 2021年2月15日

#138构建实用工具

Download history 51/week @ 2024-03-11 37/week @ 2024-03-18 29/week @ 2024-03-25 88/week @ 2024-04-01 33/week @ 2024-04-08 34/week @ 2024-04-15 48/week @ 2024-04-22 30/week @ 2024-04-29 27/week @ 2024-05-06 42/week @ 2024-05-13 62/week @ 2024-05-20 43/week @ 2024-05-27 43/week @ 2024-06-03 50/week @ 2024-06-10 41/week @ 2024-06-17 49/week @ 2024-06-24

每月186次下载
用于 12 个crates (7 个直接)

MIT/Apache

14KB
169

项目目标

为上游crates提供一个从下游crates收集信息的机制。

用例

用例1,匿名结构体

Rust尚未提供匿名结构体。为了模拟此功能,我们希望在定义结构体字段和访问其值的地方定义结构体。提供匿名结构体模拟的上游crate必须知道其下游crate源代码中的所有临时struct,以便在下游crate开始编译之前定义它们。

用例2,消除多个-sys crates

如果我们可以有一种统一的方法来编译来自"C世界"的API,而不是维护多个-sys crates,那会很好。并且定义在相同头文件中的相同API可能被分离到不同的-sys crates中,例如tcl_sys::TCL_OKtk_sys::TCL_OK。一些crate,如cib,试图提供一种统一的方法来编译C库,并提供了统一的命名空间clib::

从下游crates收集的信息

调用inwelling::collect_downstream()将收集以下信息,这些信息来自在其build.rs中调用inwelling::to()的crates。

  • 包名。

  • Cargo.toml中定义的元数据。

  • Cargo.toml的清单路径。

  • 源文件路径(可选)。使用参数 inwelling::Opt::dump_rs_paths == true 调用 collect_downstream() 以进行收集。

快速入门

  1. 上游crate(例如 crate foo)在其 build.rs 中调用 inwelling::collect_downstream(),并为其下游生成API。

  2. 下游crate(例如 crate bar)在其 build.rs 中调用 inwelling::to()

// build.rs
fn main() { inwelling::to( "foo" ); }

要将一些元数据发送到上游,请将其编码在 Cargo.toml 的包元数据中。

[package.metadata.inwelling.foo]
answer = { type = "integer", value = "42" }

许可证

根据Apache许可证2.0或MIT许可证,由您选择。

依赖项

~0.4–8MB
~54K SLoC