round_view_derive 0.4.0

Procedural macros to generate methods r2_view, r3_view and r4_view.
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn::DeriveInput;

#[proc_macro_derive(R2View)]
pub fn r2_view_derive(input: TokenStream) -> TokenStream {
    let ast: DeriveInput = syn::parse(input).unwrap();
    let name = ast.ident;
    let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
    let gen = quote! {
        impl #impl_generics #name #ty_generics #where_clause {
            #[inline(always)]
            fn r2_view(&mut self) -> RoundTwoView {
                RoundTwoView {
                    rng_combs_r1: &self.rng_combs_r1,
                    rng_combs_r2: &mut self.rng_combs_r2,
                    rng_combs_r3: &mut self.rng_combs_r3,
                    rng_combs_r4: &mut self.rng_combs_r4,
                    play: &mut self.play,
                    cache: &mut self.cache,
                }
            }
        }
    };
    gen.into()
}

#[proc_macro_derive(R3View)]
pub fn r3_view_derive(input: TokenStream) -> TokenStream {
    let ast: DeriveInput = syn::parse(input).unwrap();
    let name = ast.ident;
    let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
    let gen = quote! {
        impl #impl_generics #name #ty_generics #where_clause {
            #[inline(always)]
            fn r3_view(&mut self) -> RoundThreeView {
                RoundThreeView {
                    rng_combs_r2: &self.rng_combs_r2,
                    rng_combs_r3: &mut self.rng_combs_r3,
                    rng_combs_r4: &mut self.rng_combs_r4,
                    play: &mut self.play,
                    cache: &mut self.cache,
                }
            }
        }
    };
    gen.into()
}

#[proc_macro_derive(R4View)]
pub fn r4_view_derive(input: TokenStream) -> TokenStream {
    let ast: DeriveInput = syn::parse(input).unwrap();
    let name = ast.ident;
    let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
    let gen = quote! {
        impl #impl_generics #name #ty_generics #where_clause {
            #[inline(always)]
            fn r4_view(&mut self) -> RoundFourView {
                RoundFourView {
                    rng_combs_r3: &self.rng_combs_r3,
                    rng_combs_r4: &mut self.rng_combs_r4,
                    play: &mut self.play,
                    cache: &mut self.cache,
                }
            }
        }
    };
    gen.into()
}