quick-impl 0.2.1

Quickly implement usual methods and traits for enums and structs.
Documentation
use proc_macro2::{Group, Span, TokenStream, TokenTree};

pub fn respan2(input: TokenStream, span: Span) -> TokenStream {
    input.into_iter().map(|tt| respan2_tt(tt, span)).collect()
}

fn respan2_tt(tt: TokenTree, span: Span) -> TokenTree {
    match tt {
        TokenTree::Group(mut group) => {
            group.set_span(span);
            let delim = group.delimiter();
            let stream = respan2(group.stream(), span);
            TokenTree::Group(Group::new(delim, stream))
        }
        TokenTree::Ident(mut ident) => {
            ident.set_span(span);
            TokenTree::Ident(ident)
        }
        TokenTree::Punct(mut punct) => {
            punct.set_span(span);
            TokenTree::Punct(punct)
        }
        TokenTree::Literal(mut literal) => {
            literal.set_span(span);
            TokenTree::Literal(literal)
        }
    }
}