56个版本
0.18.1 | 2023年10月13日 |
---|---|
0.17.0 | 2023年7月24日 |
0.15.3 | 2023年1月31日 |
0.15.2 | 2022年11月21日 |
0.2.0 | 2017年3月17日 |
#1 in Cargo插件
2,595,066 每月下载量
在 2,229 个crate中使用 (558个直接使用)
65KB
983 行
cargo_metadata
对 cargo metadata
输出的结构化访问。通常用于 cargo-*
可执行文件中。
还支持序列化,以帮助在 cargo-*
子命令中实现类似 --message-format=json
的输出生成,因为 cargo --message-format=json
输出的某些类型与 cargo metadata
的类型完全相同。
lib.rs
:
对 cargo metadata
和 cargo --message-format=json
的结构化访问。通常用于 cargo-*
可执行文件中。
有关 cargo 的详细信息,请参阅 cargo 书籍。
示例
let mut args = std::env::args().skip_while(|val| !val.starts_with("--manifest-path"));
let mut cmd = cargo_metadata::MetadataCommand::new();
let manifest_path = match args.next() {
Some(ref p) if p == "--manifest-path" => {
cmd.manifest_path(args.next().unwrap());
}
Some(p) => {
cmd.manifest_path(p.trim_start_matches("--manifest-path="));
}
None => {}
};
let _metadata = cmd.exec().unwrap();
传递功能标志
use cargo_metadata::{MetadataCommand, CargoOpt};
let _metadata = MetadataCommand::new()
.manifest_path("./Cargo.toml")
.features(CargoOpt::AllFeatures)
.exec()
.unwrap();
解析 message-format 输出
use std::process::{Stdio, Command};
use cargo_metadata::Message;
let mut command = Command::new("cargo")
.args(&["build", "--message-format=json-render-diagnostics"])
.stdout(Stdio::piped())
.spawn()
.unwrap();
let reader = std::io::BufReader::new(command.stdout.take().unwrap());
for message in cargo_metadata::Message::parse_stream(reader) {
match message.unwrap() {
Message::CompilerMessage(msg) => {
println!("{:?}", msg);
},
Message::CompilerArtifact(artifact) => {
println!("{:?}", artifact);
},
Message::BuildScriptExecuted(script) => {
println!("{:?}", script);
},
Message::BuildFinished(finished) => {
println!("{:?}", finished);
},
_ => () // Unknown message
}
}
let output = command.wait().expect("Couldn't get cargo's exit status");
依赖关系
~1–2MB
~40K SLoC