mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-02-23 00:57:08 +09:00
new(codegen_register): add docs
This commit is contained in:
parent
3e72513b75
commit
b5a189f9a1
1 changed files with 47 additions and 6 deletions
|
@ -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),*
|
||||
|
|
Loading…
Reference in a new issue