diff --git a/src/generator/codegen_register.rs b/src/generator/codegen_register.rs index 0cff61d..4445086 100644 --- a/src/generator/codegen_register.rs +++ b/src/generator/codegen_register.rs @@ -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, + 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, + 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, 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),*