stdin_parser_derive 0.1.0

Parse stdin by defining a struct - trait derive
Documentation
extern crate proc_macro;

mod common;
mod enum_derive;
mod struct_derive;

use crate::proc_macro::TokenStream;
use quote::quote;
use syn;

#[proc_macro_derive(StdinParser)]
pub fn derive_stdin_parser(input: TokenStream) -> TokenStream {
    let ast: syn::DeriveInput = syn::parse(input).unwrap();
    let ty = ast.ident;

    let trait_impl = match ast.data {
        syn::Data::Struct(data) => struct_derive::derive(&ty, &data),
        syn::Data::Enum(data) => enum_derive::derive(&ty, &data),
        _ => panic!("StdinParser only works with structs and enums"),
    };

    let gen = quote! {
        impl StdinParser for #ty {
            fn parse_stdin() -> std::io::Result<Self>{
                #trait_impl
            }
        }
    };

    gen.into()
}