1crate::ix!();
3
4#[derive(Debug, StructOpt)]
6pub enum MetaSubcommand {
7 Crate {
8 #[structopt(long = "crate")]
9 crate_name: PathBuf,
10 },
11 Workspace {
12 #[structopt(long = "path")]
13 path: PathBuf,
14 },
15}
16
17impl MetaSubcommand {
18 pub async fn run(&self) -> Result<(), WorkspaceError> {
19 match self {
20 MetaSubcommand::Crate { crate_name } => {
21 run_with_crate(crate_name.clone(), false, move |handle| {
24 Box::pin(async move {
25 let metadata = handle.get_cargo_metadata().await.map_err(|crate_err| {
27 error!("Failed to retrieve metadata for crate='{}': {crate_err:?}", handle.name());
28 WorkspaceError::CrateError(crate_err)
29 })?;
30
31 println!("Cargo metadata for crate='{}':\n{:#?}", handle.name(), metadata);
33 Ok(())
34 })
35 })
36 .await
37 }
38
39 MetaSubcommand::Workspace { path } => {
40 run_with_workspace(Some(path.clone()), false, move |ws| {
42 Box::pin(async move {
43 let metadata = ws.get_cargo_metadata().await.map_err(|we| {
45 error!("Failed to retrieve metadata for workspace: {we:?}");
46 we
47 })?;
48
49 println!("Cargo metadata for workspace at '{}':\n{:#?}", ws.as_ref().display(), metadata);
51 Ok(())
52 })
53 })
54 .await
55 }
56 }
57 }
58}