use crate::core::config::TraitBridgeConfig;
use crate::core::ir::ApiSurface;
fn active_configs<'a>(
configs: &'a [TraitBridgeConfig],
api: &ApiSurface,
) -> impl Iterator<Item = &'a TraitBridgeConfig> {
configs
.iter()
.filter(move |c| super::active_bridge_trait(c, api).is_some())
}
pub fn collect_bridge_register_fns(configs: &[TraitBridgeConfig], api: &ApiSurface) -> Vec<String> {
active_configs(configs, api)
.filter_map(|c| crate::codegen::generators::trait_bridge::bridge_register_symbol(c))
.map(str::to_owned)
.collect()
}
pub fn collect_bridge_unregister_fns(configs: &[TraitBridgeConfig], api: &ApiSurface) -> Vec<String> {
active_configs(configs, api)
.filter_map(|c| c.unregister_fn.clone())
.collect()
}
pub fn collect_bridge_clear_fns(configs: &[TraitBridgeConfig], api: &ApiSurface) -> Vec<String> {
active_configs(configs, api)
.filter_map(|c| c.clear_fn.clone())
.collect()
}
pub fn trait_bridge_imports(configs: &[TraitBridgeConfig]) -> Vec<&'static str> {
if configs.is_empty() {
return vec![];
}
vec![
"use async_trait::async_trait;",
"use pyo3::prelude::*;",
"use std::sync::Arc;",
]
}