Function synstructure::each_field [] [src]

pub fn each_field<F, T: ToTokens>(input: &MacroInput,
                                  options: &BindOpts,
                                  func: F)
                                  -> Tokens where F: Fn(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.

The BindingInfo object holds a mutable reference into the original MacroInput, which means that mutations will be reflected in the source object. This can be useful for removing attributes as they are used.

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());
}