new(codegen_register): add docs

This commit is contained in:
testuser 2025-02-03 17:51:54 +09:00
parent 3e72513b75
commit b5a189f9a1

View file

@ -190,6 +190,7 @@ fn generate_field(
field_type,
snake_case_name,
multiple_params,
&field.desc.clone().unwrap_or("".to_string()),
),
None => generate_single_field(
mask_name,
@ -197,6 +198,7 @@ fn generate_field(
field.mask,
field_type,
snake_case_name,
&field.desc.clone().unwrap_or("".to_string()),
),
};
@ -220,6 +222,7 @@ fn generate_single_field(
mask_val: u32,
field_type: FieldType,
snake_case_name: Ident,
desc: &str,
) -> (TokenStream, TokenStream, TokenStream) {
let mask_val = util::parse_to_literal(&format!("0x{:x}", mask_val)).unwrap();
let code_mask = match field_type {
@ -239,13 +242,13 @@ fn generate_single_field(
};
let (code_getter, code_setter) = match field_type {
FieldType::RustType(field_type) => match field_type {
RustUxTypes::Bool => generate_single_bool_field(mask_name, snake_case_name),
RustUxTypes::Bool => generate_single_bool_field(mask_name, snake_case_name, desc),
RustUxTypes::U8 | RustUxTypes::U16 | RustUxTypes::U32 => {
generate_single_ux_field(mask_name, base_type, snake_case_name, field_type)
generate_single_ux_field(mask_name, base_type, snake_case_name, field_type, desc)
}
},
FieldType::CustomValue(values) => {
generate_single_custom_values_field(mask_name, snake_case_name, values)
generate_single_custom_values_field(mask_name, snake_case_name, values, desc)
}
};
@ -256,14 +259,19 @@ fn generate_single_field(
fn generate_single_bool_field(
mask_name: Ident,
snake_case_name: Ident,
desc: &str,
) -> (TokenStream, TokenStream) {
let setter_name = util::parse_to_ident(&format!("set_{}", snake_case_name)).unwrap();
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> bool {
(self.inner & #mask_name) == #mask_name
}
};
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(self, val: bool) -> Self {
let mut inner = self.inner;
if val {
@ -283,11 +291,14 @@ fn generate_single_ux_field(
base_type: Ident,
snake_case_name: Ident,
field_type: RustUxTypes,
desc: &str,
) -> (TokenStream, TokenStream) {
let field_type = field_type.to_rust_type_token();
let setter_name = util::parse_to_ident(&format!("set_{}", snake_case_name)).unwrap();
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> #field_type {
const RIGHT_SHIFT: #base_type = #mask_name.trailing_zeros();
((self.inner & #mask_name) >> RIGHT_SHIFT)
@ -295,7 +306,9 @@ fn generate_single_ux_field(
.unwrap()
}
};
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(&self, val: #field_type) -> Self {
let update: #base_type = (val as #base_type) & #mask_name;
let mut inner = self.inner;
@ -355,6 +368,7 @@ fn generate_single_custom_values_field(
mask_name: Ident,
snake_case_name: Ident,
values: &[Value],
desc: &str,
) -> (TokenStream, TokenStream) {
let setter_name = util::parse_to_ident(&format!("set_{}", snake_case_name)).unwrap();
let value_enum_name =
@ -374,7 +388,10 @@ fn generate_single_custom_values_field(
)
})
.unzip();
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> #value_enum_name {
match (self.inner & #mask_name)
>> #mask_name.trailing_zeros()
@ -385,7 +402,9 @@ fn generate_single_custom_values_field(
}
};
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(self, val: #value_enum_name) -> Self {
let val = match val {
#(#setter_match_arms),*
@ -415,6 +434,7 @@ fn generate_multiple_field(
single_field_type: FieldType,
snake_case_name: Ident,
multiple_params: &MultipleParams,
desc: &str,
) -> (TokenStream, TokenStream, TokenStream) {
let num_multiple = multiple_params.multiple;
let id_num_multiple = util::parse_to_literal(&num_multiple.to_string()).unwrap();
@ -437,15 +457,20 @@ fn generate_multiple_field(
let (code_getter, code_setter) = match single_field_type {
FieldType::RustType(single_field_type) => match single_field_type {
RustUxTypes::Bool => {
generate_multiple_bool_field(mask_name, base_type, snake_case_name, masks.clone())
}
RustUxTypes::Bool => generate_multiple_bool_field(
mask_name,
base_type,
snake_case_name,
masks.clone(),
desc,
),
RustUxTypes::U8 | RustUxTypes::U16 | RustUxTypes::U32 => generate_multiple_ux_field(
mask_name,
base_type,
snake_case_name,
single_field_type,
masks,
desc,
),
},
FieldType::CustomValue(values) => generate_multiple_custom_values_field(
@ -454,6 +479,7 @@ fn generate_multiple_field(
snake_case_name,
masks,
values,
desc,
),
};
@ -466,6 +492,7 @@ fn generate_multiple_bool_field(
base_type: Ident,
snake_case_name: Ident,
masks: Vec<Literal>,
desc: &str,
) -> (TokenStream, TokenStream) {
let num_multiple = masks.len();
let elem_getter = masks.iter().enumerate().map(|(i, _mask)| {
@ -473,7 +500,9 @@ fn generate_multiple_bool_field(
(self.inner & #mask_name[#i]) == #mask_name[#i]
}
});
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> [bool; #num_multiple] {
[
#(#elem_getter),*
@ -482,7 +511,9 @@ fn generate_multiple_bool_field(
};
let setter_name = util::parse_to_ident(&format!("set_{}", snake_case_name)).unwrap();
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(self, val: [bool; #num_multiple]) -> Self {
let mask: #base_type = #mask_name.iter().sum();
let update: #base_type = #mask_name
@ -507,6 +538,7 @@ fn generate_multiple_ux_field(
snake_case_name: Ident,
single_field_type: RustUxTypes,
masks: Vec<Literal>,
desc: &str,
) -> (TokenStream, TokenStream) {
let field_type = single_field_type.to_rust_type_token();
let num_multiple = masks.len();
@ -518,7 +550,9 @@ fn generate_multiple_ux_field(
.unwrap()
}
});
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> [#field_type; #num_multiple] {
[
#(#elem_getter),*
@ -527,7 +561,9 @@ fn generate_multiple_ux_field(
};
let setter_name = util::parse_to_ident(&format!("set_{}", snake_case_name)).unwrap();
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(&self, val: [#field_type; #num_multiple]) -> Self {
let mask: #base_type = #mask_name.iter().sum();
let update: #base_type = #mask_name
@ -552,6 +588,7 @@ fn generate_multiple_custom_values_field(
snake_case_name: Ident,
masks: Vec<Literal>,
values: &[Value],
desc: &str,
) -> (TokenStream, TokenStream) {
let value_enum_name =
util::parse_to_ident(&snake_case_name.to_string().to_upper_camel_case()).unwrap();
@ -582,7 +619,9 @@ fn generate_multiple_custom_values_field(
}
}
});
let getter_doc = format!("Getter. {}", desc);
let code_getter = quote! {
#[doc = #getter_doc]
pub fn #snake_case_name(&self) -> [#value_enum_name; #num_multiple] {
[
#(#elem_getter),*
@ -598,7 +637,9 @@ fn generate_multiple_custom_values_field(
}
}
});
let setter_doc = format!("Setter. {}", desc);
let code_setter = quote! {
#[doc = #setter_doc]
pub fn #setter_name(&self, val: [#value_enum_name; #num_multiple]) -> Self {
let val: [#base_type; #num_multiple] = [
#(#elem_setter),*