alef_codegen/conversions/
enums.rs1use alef_core::ir::EnumDef;
2
3use super::ConversionConfig;
4use super::helpers::{binding_to_core_match_arm_ext_cfg, core_enum_path_remapped, core_to_binding_match_arm_ext_cfg};
5
6pub fn gen_enum_from_binding_to_core(enum_def: &EnumDef, core_import: &str) -> String {
8 gen_enum_from_binding_to_core_cfg(enum_def, core_import, &ConversionConfig::default())
9}
10
11pub fn gen_enum_from_binding_to_core_cfg(enum_def: &EnumDef, core_import: &str, config: &ConversionConfig) -> String {
13 let core_path = core_enum_path_remapped(enum_def, core_import, config.source_crate_remaps);
14 let binding_name = format!("{}{}", config.type_name_prefix, enum_def.name);
15
16 let arms: Vec<String> = enum_def
18 .variants
19 .iter()
20 .map(|variant| {
21 binding_to_core_match_arm_ext_cfg(
22 &binding_name,
23 &variant.name,
24 &variant.fields,
25 config.binding_enums_have_data,
26 config,
27 enum_def.serde_untagged && config.binding_tuple_form_for_untagged_variants,
28 )
29 })
30 .collect();
31
32 crate::template_env::render(
33 "conversions/enum_from_binding_to_core",
34 minijinja::context! {
35 binding_name => binding_name,
36 core_path => core_path,
37 arms => arms,
38 },
39 )
40}
41
42pub fn gen_enum_from_core_to_binding(enum_def: &EnumDef, core_import: &str) -> String {
44 gen_enum_from_core_to_binding_cfg(enum_def, core_import, &ConversionConfig::default())
45}
46
47pub fn gen_enum_from_core_to_binding_cfg(enum_def: &EnumDef, core_import: &str, config: &ConversionConfig) -> String {
49 let core_path = core_enum_path_remapped(enum_def, core_import, config.source_crate_remaps);
50 let binding_name = format!("{}{}", config.type_name_prefix, enum_def.name);
51
52 let arms: Vec<String> = enum_def
54 .variants
55 .iter()
56 .map(|variant| {
57 core_to_binding_match_arm_ext_cfg(
58 &core_path,
59 &variant.name,
60 &variant.fields,
61 config.binding_enums_have_data,
62 config,
63 enum_def.serde_untagged && config.binding_tuple_form_for_untagged_variants,
64 )
65 })
66 .collect();
67
68 crate::template_env::render(
69 "conversions/enum_from_core_to_binding",
70 minijinja::context! {
71 binding_name => binding_name,
72 core_path => core_path,
73 arms => arms,
74 },
75 )
76}