fn exec()

in tools/cargo-hakari/src/command.rs [105:164]


    fn exec(self, output: OutputOpts) -> Result<i32> {
        let output = output.init();
        let metadata_command = MetadataCommand::new();
        let package_graph = metadata_command
            .build_graph()
            .context("building package graph failed")?;

        match self {
            Command::Initialize {
                path,
                package_name,
                skip_config,
                dry_run,
                yes,
            } => {
                let package_name = match package_name.as_deref() {
                    Some(name) => name,
                    None => match path.file_name() {
                        Some(name) => name,
                        None => bail!("invalid path {}", path),
                    },
                };

                let workspace_path =
                    cwd_rel_to_workspace_rel(&path, package_graph.workspace().root())?;

                let mut init = HakariInit::new(&package_graph, package_name, &workspace_path)
                    .with_context(|| "error initializing Hakari package")?;
                init.set_cargo_toml_comment(CARGO_TOML_COMMENT);
                if !skip_config {
                    init.set_config(DEFAULT_CONFIG_PATH.as_ref(), CONFIG_COMMENT)
                        .with_context(|| "error initializing Hakari package")?;
                }

                let ops = init.make_ops();
                apply_on_dialog(dry_run, yes, &ops, &output, || {
                    let steps = [
                        format!(
                            "* configure at {}",
                            DEFAULT_CONFIG_PATH.style(output.styles.config_path),
                        ),
                        format!(
                            "* run {} to generate contents",
                            "cargo hakari generate".style(output.styles.command),
                        ),
                        format!(
                            "* run {} to add dependency lines",
                            "cargo hakari manage-deps".style(output.styles.command),
                        ),
                    ];
                    info!("next steps:\n{}\n", steps.join("\n"));
                    Ok(())
                })
            }
            Command::WithBuilder(cmd) => {
                let (builder, hakari_output) = make_builder_and_output(&package_graph)?;
                cmd.exec(builder, hakari_output, output)
            }
        }
    }