powerset_enum_attr/
lib.rs

1#![recursion_limit = "128"]
2extern crate proc_macro;
3
4use syn::parse_macro_input;
5
6mod powerset_enum_impl;
7mod powerset_macro_impl;
8
9#[proc_macro]
10pub fn powerset(args: proc_macro::TokenStream) -> proc_macro::TokenStream {
11    match powerset_macro_impl::powerset_macro_impl(parse_macro_input!(args)) {
12        Ok(output) => output.into(),
13        Err(error) => error.to_compile_error().into(),
14    }
15}
16
17/// Parametrize an `enum` to make it a powerset (set of all subsets), and create a macro with the
18/// same name of the `enum` for easy notation of the subsets.
19///
20/// See [powerset_enum](../powerset_enum/index.html) for more info.
21/// ```
22#[proc_macro_attribute]
23pub fn powerset_enum(
24    _args: proc_macro::TokenStream,
25    input: proc_macro::TokenStream,
26) -> proc_macro::TokenStream {
27    match powerset_enum_impl::powerset_enum_impl(parse_macro_input!(input)) {
28        Ok(output) => output.into(),
29        Err(error) => error.to_compile_error().into(),
30    }
31}