Expand description
Structured access to the output of cargo metadata
and cargo --message-format=json
.
Usually used from within a cargo-*
executable
See the cargo book for details on cargo itself.
§Examples
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();
Pass features flags
use cargo_metadata::{MetadataCommand, CargoOpt};
let _metadata = MetadataCommand::new()
.manifest_path("./Cargo.toml")
.features(CargoOpt::AllFeatures)
.exec()
.unwrap();
Parse message-format output:
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");
Re-exports§
Modules§
- This module contains
Diagnostic
and the types/functions it uses for deserialization.
Structs§
- A compiler-generated file.
- Profile settings used to determine which compiler flags to use for a target.
- Final result of a build.
- Output of a build script execution.
- Message left by the compiler
- Information about a dependency kind.
- A dependency of the main crate
- An iterator of Messages.
- Starting point for metadata returned by
cargo metadata
- A builder for configuring
cargo metadata
invocation. - A node in a dependencies graph
- A dependency in a node
- One or more crates described by a single
Cargo.toml
- An “opaque” identifier for a package.
- A dependency graph
- The source of a package such as crates.io.
- A single target (lib, bin, example, …) provided by a crate
- A list of default workspace members.
Enums§
- The kind of debug information included in the artifact.
- Cargo features flags
- Similar to
kind
, but only reports the Cargo crate types:bin
,lib
,rlib
,dylib
,cdylib
,staticlib
,proc-macro
. Everything that’s not a proc macro or a library of some kind is reported as “bin”. - Dependencies can come in three kinds
- The Rust edition
- Error returned when executing/parsing
cargo metadata
fails. - A cargo message
- Kind of target.
Functions§
- parse_
messages Deprecated Creates an iterator of Message from a Read outputting a stream of JSON messages. For usage information, look at the top-level documentation.
Type Aliases§
- Custom result type for
cargo_metadata::Error