Function synstructure::each_field [] [src]

pub fn each_field<F, T: ToTokens>(
    input: &MacroInput,
    options: &BindOpts,
    func: F
) -> Tokens where
    F: FnMut(BindingInfo) -> T, 

This method calls func once per field in the struct or enum, and generates a series of match branches which will destructure match argument, and run the result of func once on each of the bindings.

Example

extern crate syn;
extern crate synstructure;
#[macro_use]
extern crate quote;
use synstructure::{each_field, BindStyle};

fn main() {
    let mut ast = syn::parse_macro_input("struct A { a: i32, b: i32 }").unwrap();

    let tokens = each_field(&mut ast, &BindStyle::Ref.into(), |bi| quote! {
        println!("Saw: {:?}", #bi);
    });
    assert_eq!(tokens.to_string(), quote! {
        A{ a: ref __binding_0, b: ref __binding_1, } => {
            { println!("Saw: {:?}", __binding_0); }
            { println!("Saw: {:?}", __binding_1); }
            ()
        }
    }.to_string());
}