in crate_universe/src/renderer.rs [417:493]
fn render_helper_functions<Out: Write>(&self, output: &mut Out) -> anyhow::Result<()> {
let mut crate_repo_names_inner = BTreeMap::new();
crate_repo_names_inner.extend(&self.context.member_packages_version_mapping.normal);
crate_repo_names_inner.extend(&self.context.member_packages_version_mapping.build);
crate_repo_names_inner.extend(&self.context.member_packages_version_mapping.dev);
let renderable_packages: Vec<_> = self
.context
.transitive_renderable_packages
.iter()
.filter(|krate| {
crate_repo_names_inner.get(&krate.crate_context.pkg_name)
== Some(&&krate.crate_context.pkg_version)
})
.collect();
let (proc_macro_crates, default_crates): (Vec<_>, Vec<_>) = self
.context
.member_packages_version_mapping
.normal
.iter()
.partition(|(name, version)| {
self.context
.transitive_renderable_packages
.iter()
.any(|package| {
*package.crate_context.pkg_name == **name
&& package.crate_context.pkg_version == **version
&& package.is_proc_macro
})
});
let mut kind_to_labels_to_crate_names = BTreeMap::new();
kind_to_labels_to_crate_names
.insert(Kind::Normal, self.label_to_crate_names(&default_crates));
kind_to_labels_to_crate_names.insert(
Kind::Dev,
self.label_to_crate_names(
&self
.context
.member_packages_version_mapping
.dev
.iter()
.collect(),
),
);
kind_to_labels_to_crate_names.insert(
Kind::Build,
self.label_to_crate_names(
&self
.context
.member_packages_version_mapping
.build
.iter()
.collect(),
),
);
kind_to_labels_to_crate_names.insert(
Kind::ProcMacro,
self.label_to_crate_names(&proc_macro_crates),
);
let mut context = tera::Context::new();
context.insert("crates", &renderable_packages);
context.insert("repo_rule_name", &self.context.config.repo_rule_name);
context.insert(
"kind_to_labels_to_crate_names",
&kind_to_labels_to_crate_names,
);
let rendered_helper_functions = self
.internal_renderer
.render("templates/helper_functions.template", &context)?;
write!(output, "{}", &rendered_helper_functions)?;
Ok(())
}