cli_xtask/subcommand/
dist.rs

1use crate::{config::Config, Result, Run};
2
3/// Arguments definition of the `dist` subcommand.
4#[cfg_attr(doc, doc = include_str!("../../doc/cargo-xtask-dist.md"))]
5#[derive(Debug, Clone, Default, clap::Args)]
6#[non_exhaustive]
7pub struct Dist {
8    /// Arguments for the `dist-build` subcommand.
9    #[cfg(subcommand_dist_build)]
10    #[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-*")))]
11    #[clap(flatten)]
12    pub dist_build_args: super::DistBuild,
13    /// Arguments for the `dist-archive` subcommand.
14    #[clap(flatten)]
15    pub dist_archive_args: super::DistArchive,
16}
17
18impl Run for Dist {
19    fn run(&self, config: &Config) -> Result<()> {
20        self.run(config)
21    }
22}
23
24impl Dist {
25    /// Runs the `dist` subcommand.
26    #[tracing::instrument(name = "dist", skip_all, err)]
27    pub fn run(&self, config: &Config) -> Result<()> {
28        let Self {
29            #[cfg(subcommand_dist_build)]
30            dist_build_args,
31            dist_archive_args,
32        } = self;
33        let dist_config = config.dist()?;
34
35        let working_dir = dist_config.dist_base_working_directory();
36        crate::fs::create_or_cleanup_dir(working_dir)?;
37
38        #[cfg(subcommand_dist_build)]
39        dist_build_args.run(config)?;
40
41        dist_archive_args.run(config)?;
42
43        Ok(())
44    }
45}