1#![recursion_limit = "1024"]
39
40#[macro_use]
41extern crate quote;
42#[macro_use]
43extern crate syn;
44
45extern crate proc_macro;
46extern crate proc_macro2;
47
48use proc_macro::TokenStream;
49use syn::{AttributeArgs, Item};
50
51mod common;
52mod enum_flags;
53mod int_enums;
54mod int_eval;
55
56#[proc_macro_attribute]
57pub fn auto_enum(attr: TokenStream, item: TokenStream) -> TokenStream {
58 let args = parse_macro_input!(attr as AttributeArgs);
59 let input = parse_macro_input!(item as Item);
60 int_enums::expand_int_enum(&args, &input)
61 .unwrap_or_else(compile_error)
62 .into()
63}
64
65#[proc_macro_attribute]
66pub fn enum_flags(attr: TokenStream, item: TokenStream) -> TokenStream {
67 let args = parse_macro_input!(attr as AttributeArgs);
68 let input = parse_macro_input!(item as Item);
69 enum_flags::expand_enum_flags(&args, &input)
70 .unwrap_or_else(compile_error)
71 .into()
72}
73
74fn compile_error(message: String) -> proc_macro2::TokenStream {
75 quote! {
76 compile_error!(#message);
77 }
78}