fn render_helper_functions()

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