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]
### Changed
- Moved register value mask definitions from reg module to field value impl.
## [0.3.0] - 2025-03-27
### Added

View file

@ -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
},
)
})