use alef_core::ir::EnumDef;
use super::ConversionConfig;
use super::helpers::{binding_to_core_match_arm_ext_cfg, core_enum_path_remapped, core_to_binding_match_arm_ext_cfg};
pub fn gen_enum_from_binding_to_core(enum_def: &EnumDef, core_import: &str) -> String {
gen_enum_from_binding_to_core_cfg(enum_def, core_import, &ConversionConfig::default())
}
pub fn gen_enum_from_binding_to_core_cfg(enum_def: &EnumDef, core_import: &str, config: &ConversionConfig) -> String {
let core_path = core_enum_path_remapped(enum_def, core_import, config.source_crate_remaps);
let binding_name = format!("{}{}", config.type_name_prefix, enum_def.name);
let arms: Vec<String> = enum_def
.variants
.iter()
.map(|variant| {
binding_to_core_match_arm_ext_cfg(
&binding_name,
&variant.name,
&variant.fields,
config.binding_enums_have_data,
config,
)
})
.collect();
crate::template_env::render(
"conversions/enum_from_binding_to_core",
minijinja::context! {
binding_name => binding_name,
core_path => core_path,
arms => arms,
},
)
}
pub fn gen_enum_from_core_to_binding(enum_def: &EnumDef, core_import: &str) -> String {
gen_enum_from_core_to_binding_cfg(enum_def, core_import, &ConversionConfig::default())
}
pub fn gen_enum_from_core_to_binding_cfg(enum_def: &EnumDef, core_import: &str, config: &ConversionConfig) -> String {
let core_path = core_enum_path_remapped(enum_def, core_import, config.source_crate_remaps);
let binding_name = format!("{}{}", config.type_name_prefix, enum_def.name);
let arms: Vec<String> = enum_def
.variants
.iter()
.map(|variant| {
core_to_binding_match_arm_ext_cfg(
&core_path,
&variant.name,
&variant.fields,
config.binding_enums_have_data,
config,
)
})
.collect();
crate::template_env::render(
"conversions/enum_from_core_to_binding",
minijinja::context! {
binding_name => binding_name,
core_path => core_path,
arms => arms,
},
)
}