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)
}
}
}