bitstates/
lib.rs

1#[cfg(feature = "atomic")]
2mod atomic_bit_state;
3
4mod bit_state;
5
6use proc_macro::TokenStream;
7
8#[cfg(feature = "non-atomic")]
9#[proc_macro_derive(BitStates)]
10pub fn bit_flag_derive(input: TokenStream) -> TokenStream {
11    bit_state::derive(input)
12}
13
14#[cfg(feature = "atomic")]
15#[proc_macro_derive(AtomicBitStates)]
16pub fn atomic_bit_flag_derive(input: TokenStream) -> TokenStream {
17    atomic_bit_state::derive(input)
18}
19
20#[cfg(not(feature = "atomic"))]
21#[proc_macro_derive(AtomicBitState)]
22pub fn atomic_bit_state_derive(_input: TokenStream) -> TokenStream {
23    // Return a compile error if someone tries to use it without the feature
24    syn::Error::new(
25        proc_macro2::Span::call_site(),
26        "AtomicBitState requires the `atomic` feature to be enabled.\n\
27         Add `features = [\"atomic\"]` to your dependency.",
28    )
29    .to_compile_error()
30    .into()
31}