diff --git a/CHANGELOG.md b/CHANGELOG.md index a2c6b94..ba03899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [unreleased] +### Changed + +- Moved register value mask definitions from reg module to field value impl. + ## [0.3.0] - 2025-03-27 ### Added diff --git a/src/generator/codegen_register.rs b/src/generator/codegen_register.rs index 62bfef0..b54e4a9 100644 --- a/src/generator/codegen_register.rs +++ b/src/generator/codegen_register.rs @@ -232,11 +232,11 @@ fn generate_single_field( } } FieldType::CustomValue(values) => { - let additional = + let values_enum_masks = generate_custom_values_const_enumdef(&base_type, &snake_case_name, values); quote! { const #mask_name: #base_type = #mask_val; - #additional + #values_enum_masks } } }; @@ -320,13 +320,8 @@ fn generate_single_ux_field( (code_getter, code_setter) } -fn custom_value_const_name(field_name: &Ident, value_name: &str) -> Ident { - util::parse_to_ident(&format!( - "{}_VAL_{}", - field_name.to_string().to_shouty_snake_case(), - value_name.to_shouty_snake_case() - )) - .unwrap() +fn custom_value_const_name(value_name: &str) -> Ident { + util::parse_to_ident(&format!("VAL_{}", value_name.to_shouty_snake_case())).unwrap() } /// Generate const var and value enum definition. @@ -338,7 +333,7 @@ fn generate_custom_values_const_enumdef( values: &[Value], ) -> TokenStream { let consts = values.iter().map(|value| { - let const_name = custom_value_const_name(field_name, &value.name); + let const_name = custom_value_const_name(&value.name); let val = value.data; quote! { const #const_name: #base_type = #val; @@ -356,10 +351,13 @@ fn generate_custom_values_const_enumdef( util::parse_to_ident(&field_name.to_string().to_upper_camel_case()).unwrap(); quote! { - #(#consts)* pub enum #value_enum_name { #(#variants),* } + + impl #value_enum_name { + #(#consts)* + } } } @@ -376,14 +374,14 @@ fn generate_single_custom_values_field( let (getter_match_arms, setter_match_arms): (Vec<_>, Vec<_>) = values .iter() .map(|value| { - let const_name = custom_value_const_name(&snake_case_name, &value.name); + let const_name = custom_value_const_name(&value.name); let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap(); ( quote! { - #const_name => #value_enum_name::#variant_name + #value_enum_name::#const_name => #value_enum_name::#variant_name }, quote! { - #value_enum_name::#variant_name => #const_name + #value_enum_name::#variant_name => #value_enum_name::#const_name }, ) }) @@ -596,14 +594,14 @@ fn generate_multiple_custom_values_field( let (getter_match_arms, setter_match_arms): (Vec<_>, Vec<_>) = values .iter() .map(|value| { - let const_name = custom_value_const_name(&snake_case_name, &value.name); + let const_name = custom_value_const_name(&value.name); let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap(); ( quote! { - #const_name => #value_enum_name::#variant_name + #value_enum_name::#const_name => #value_enum_name::#variant_name }, quote! { - #value_enum_name::#variant_name => #const_name + #value_enum_name::#variant_name => #value_enum_name::#const_name }, ) })