Refactor const def

This commit is contained in:
Wataru Otsubo 2025-03-27 16:08:42 +00:00
parent e6e7ada193
commit b5d165a3f5
2 changed files with 19 additions and 17 deletions

View file

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [unreleased] ## [unreleased]
### Changed
- Moved register value mask definitions from reg module to field value impl.
## [0.3.0] - 2025-03-27 ## [0.3.0] - 2025-03-27
### Added ### Added

View file

@ -232,11 +232,11 @@ fn generate_single_field(
} }
} }
FieldType::CustomValue(values) => { FieldType::CustomValue(values) => {
let additional = let values_enum_masks =
generate_custom_values_const_enumdef(&base_type, &snake_case_name, values); generate_custom_values_const_enumdef(&base_type, &snake_case_name, values);
quote! { quote! {
const #mask_name: #base_type = #mask_val; const #mask_name: #base_type = #mask_val;
#additional #values_enum_masks
} }
} }
}; };
@ -320,13 +320,8 @@ fn generate_single_ux_field(
(code_getter, code_setter) (code_getter, code_setter)
} }
fn custom_value_const_name(field_name: &Ident, value_name: &str) -> Ident { fn custom_value_const_name(value_name: &str) -> Ident {
util::parse_to_ident(&format!( util::parse_to_ident(&format!("VAL_{}", value_name.to_shouty_snake_case())).unwrap()
"{}_VAL_{}",
field_name.to_string().to_shouty_snake_case(),
value_name.to_shouty_snake_case()
))
.unwrap()
} }
/// Generate const var and value enum definition. /// Generate const var and value enum definition.
@ -338,7 +333,7 @@ fn generate_custom_values_const_enumdef(
values: &[Value], values: &[Value],
) -> TokenStream { ) -> TokenStream {
let consts = values.iter().map(|value| { 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; let val = value.data;
quote! { quote! {
const #const_name: #base_type = #val; 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(); util::parse_to_ident(&field_name.to_string().to_upper_camel_case()).unwrap();
quote! { quote! {
#(#consts)*
pub enum #value_enum_name { pub enum #value_enum_name {
#(#variants),* #(#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 let (getter_match_arms, setter_match_arms): (Vec<_>, Vec<_>) = values
.iter() .iter()
.map(|value| { .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(); let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap();
( (
quote! { quote! {
#const_name => #value_enum_name::#variant_name #value_enum_name::#const_name => #value_enum_name::#variant_name
}, },
quote! { 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 let (getter_match_arms, setter_match_arms): (Vec<_>, Vec<_>) = values
.iter() .iter()
.map(|value| { .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(); let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap();
( (
quote! { quote! {
#const_name => #value_enum_name::#variant_name #value_enum_name::#const_name => #value_enum_name::#variant_name
}, },
quote! { quote! {
#value_enum_name::#variant_name => #const_name #value_enum_name::#variant_name => #value_enum_name::#const_name
}, },
) )
}) })