mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-19 21:04:41 +00:00
replaced manual TestRandom implementation with macro when possible; fixed typo in TestRandom macro (lighthouse-246)
This commit is contained in:
@@ -6,22 +6,22 @@ use syn::{parse_macro_input, DeriveInput};
|
||||
|
||||
#[proc_macro_derive(TestRandom)]
|
||||
pub fn test_random_derive(input: TokenStream) -> TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
let name = &ast.ident;
|
||||
let derived_input = parse_macro_input!(input as DeriveInput);
|
||||
let name = &derived_input.ident;
|
||||
|
||||
let struct_data = match &ast.data {
|
||||
let struct_data = match &derived_input.data {
|
||||
syn::Data::Struct(s) => s,
|
||||
_ => panic!("test_random_derive only supports structs."),
|
||||
};
|
||||
|
||||
let field_names = get_named_field_idents_and_types(&struct_data);
|
||||
let field_names = get_named_field_idents(&struct_data);
|
||||
|
||||
let output = quote! {
|
||||
impl<T: RngCore> TestRandom<T> for #name {
|
||||
fn random_for_test(rng: &mut T) -> Self {
|
||||
Self {
|
||||
#(
|
||||
#field_names: <_>::random_for_test(rng)
|
||||
#field_names: <_>::random_for_test(rng),
|
||||
)*
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ pub fn test_random_derive(input: TokenStream) -> TokenStream {
|
||||
output.into()
|
||||
}
|
||||
|
||||
fn get_named_field_idents_and_types(struct_data: &syn::DataStruct) -> Vec<(&syn::Ident)> {
|
||||
fn get_named_field_idents(struct_data: &syn::DataStruct) -> Vec<(&syn::Ident)> {
|
||||
struct_data
|
||||
.fields
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user