1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::errors::*;
use cargo_metadata::Package;
use failure::Fail;
pub fn manifest_from_pkgid(pkgid: &str) -> Result<Package> {
let mut cmd = cargo_metadata::MetadataCommand::new();
cmd.no_deps();
let result = cmd
.exec()
.map_err(|e| Error::from(e.compat()).chain_err(|| "Invalid manifest"))?;
let packages = result.packages;
let package = packages
.into_iter()
.find(|pkg| pkg.name == pkgid)
.chain_err(|| {
"Found virtual manifest, but this command requires running against an \
actual package in this workspace. Try adding `--workspace`."
})?;
Ok(package)
}