flutter_rust_bridge_codegen 2.12.0

Flutter/Dart <-> Rust binding generator, feature-rich, but seamless and simple
Documentation
use crate::codegen::dumper::Dumper;
use crate::codegen::ir::hir::raw::crates::HirRawCrate;
use crate::codegen::ir::hir::raw::pack::HirRawPack;
use crate::codegen::parser::hir::internal_config::ParserHirInternalConfig;
use crate::library::commands::cargo_expand::run_cargo_expand;
use crate::utils::crate_name::CrateName;
use itertools::concat;

pub(crate) fn parse(
    config: &ParserHirInternalConfig,
    dumper: &Dumper,
) -> anyhow::Result<HirRawPack> {
    let crates = concat([
        vec![CrateName::self_crate()],
        config.third_party_crate_names.clone(),
    ])
    .iter()
    .map(|crate_name| {
        Ok(HirRawCrate {
            name: crate_name.to_owned(),
            syn_file: run_cargo_expand(
                &config.rust_crate_dir,
                (!crate_name.is_self_crate()).then_some(crate_name),
                dumper,
                config.rust_features.as_deref(),
            )?,
        })
    })
    .collect::<anyhow::Result<Vec<_>>>()?
    .into_iter()
    .collect();
    Ok(HirRawPack { crates })
}