2 个版本
0.1.1 | 2023 年 2 月 5 日 |
---|---|
0.1.0 | 2023 年 2 月 5 日 |
#903 在 文件系统
71KB
1.5K SLoC
runix
一个安全的接口,用于 nix CLI。
由 flox
安装
使用 cargo add
安装(Rust >= 1.64)
cargo add runix
或者,手动添加
runix = "{{current_version}}" # check the latest version before adding
到您的 Cargo.toml
。
使用方法
runix 需要现有的 nix 安装。
runix 是一个库,允许您使用类型接口来 运行 nix。
runix 将命令结构转换为对 NixBackend
实现的调用。目前开发中的后端是 command_line::NixCommandLine
后端,该后端使用 tokio::process::Command
来 exec
nix CLI。
虽然这是参考实现,但其他后端,如基于 FFI 的实现或用于测试的 Mocking 模块,也是可能的。
注意 runix 仍在积极开发中!
它的 API 还没有定下来,随着我们扩展 Nix CLI 和特质的覆盖范围,更多字段将被添加,并且如果必要,特质 可能会 发生变化。
我们非常感谢反馈和贡献。
示例
通过示例了解接口是最简单的方法。
再次提醒,您需要将 nix 添加到您的 PATH
以使用 runix,并且已启用 experimental-features='nix-command flakes'
。
// (1) initialize a backend
let cli = NixCommandLine::default();
// (2) define the command
Eval {
source: SourceArgs {
expr: Some(r#""Hello Rust""#.into()),
},
..Default::default()
}
// (3) run the command
.run(&cli, &NixArgs::default())
.await
这是 runix 的等效操作
$ nix eval --expr '"Hello Rust"'
虽然比其 shell 对应版本更冗长,但与手动编写的相同调用相当
tokio::process::Command::new("nix")
.args([
"eval".to_string(),
"--expr".into(),
r#""Hello Rust""#.into(),
])
.status()
.await
然而,runix 的主要优点是它抽象了纯参数列表,并引导您正确调用 CLI。
感兴趣? 查看更多详细解释的 rustdoc。
未来路线图
我们计划扩展命令行后端,增加更多命令和一组全面的标志。根据 Nix 抽象的状态,我们计划采用原生绑定来访问 Nix 命令和概念。
许可证
Runix 采用 LGPL-2.1 许可
依赖关系
~5–13MB
~161K SLoC