bitmask_enum/lib.rs
1#![doc = include_str!("../README.md")]
2
3mod parser;
4
5use proc_macro::TokenStream;
6use syn::{parse_macro_input, ItemEnum};
7
8/// ## Bitmask-Enum
9///
10/// A bitmask can have unsigned integer types, the default type is `usize`.
11///
12/// ```
13/// use bitmask_enum::bitmask;
14///
15/// #[bitmask] // usize
16/// enum Bitmask { /* ... */ }
17///
18/// #[bitmask(u8)] // u8
19/// enum BitmaskU8 { /* ... */ }
20/// ```
21#[proc_macro_attribute]
22pub fn bitmask(attr: TokenStream, item: TokenStream) -> TokenStream {
23 match parser::parse(attr, parse_macro_input!(item as ItemEnum)) {
24 Ok(ts) => ts,
25 Err(err) => err.into_compile_error().into(),
26 }
27}