use std::path::PathBuf;
use anyhow::{Context, Result};
use cargo_metadata::{Metadata, MetadataCommand, Package};
pub fn metadata() -> Result<Metadata> {
MetadataCommand::new()
.exec()
.context("reading what cargo knows of this project; is this a cargo project?")
}
pub fn chosen_package<'a>(metadata: &'a Metadata, name: Option<&str>) -> Result<&'a Package> {
match name {
Some(name) => metadata
.packages
.iter()
.find(|package| {
package.name.as_str() == name && metadata.workspace_members.contains(&package.id)
})
.with_context(|| format!("no package named {name} in this workspace")),
None => metadata
.root_package()
.context("no package in this directory: say which program with -p <package>"),
}
}
pub fn waos_folder(metadata: &Metadata) -> PathBuf {
metadata.target_directory.join("waos").into_std_path_buf()
}