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