robin_derives/
lib.rs

1extern crate proc_macro;
2#[macro_use]
3extern crate quote;
4extern crate syn;
5
6mod each_variant;
7mod jobs;
8
9use proc_macro::TokenStream;
10use syn::*;
11use quote::Tokens;
12
13#[doc(hidden)]
14#[proc_macro_derive(EachVariant)]
15pub fn derive_each_variant(input: TokenStream) -> TokenStream {
16    expand_derive(input, each_variant::derive)
17}
18
19#[doc(hidden)]
20#[proc_macro_derive(Job, attributes(perform_with))]
21pub fn derive_jobs(input: TokenStream) -> TokenStream {
22    expand_derive(input, jobs::derive)
23}
24
25fn expand_derive<F>(input: TokenStream, f: F) -> TokenStream
26where
27    F: Fn(DeriveInput) -> Tokens,
28{
29    let input: DeriveInput = parse(input).unwrap();
30    f(input).into()
31}