//! Types representing the three basic "styles" of macro calls in Rust source: //! - Function-like macros ("bang macros"), e.g. `foo!(...)` //! - Attribute macros, e.g. `#[foo]` //! - Derive macros, e.g. `#[derive(Foo)]` #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum MacroCallStyle { FnLike, Attr, Derive, } bitflags::bitflags! { /// A set of `MacroCallStyle` values, allowing macros to indicate that /// they support more than one style. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct MacroCallStyles: u8 { const FN_LIKE = (1 << 0); const ATTR = (1 << 1); const DERIVE = (1 << 2); } } impl From for MacroCallStyles { fn from(kind: MacroCallStyle) -> Self { match kind { MacroCallStyle::FnLike => Self::FN_LIKE, MacroCallStyle::Attr => Self::ATTR, MacroCallStyle::Derive => Self::DERIVE, } } }