//! This module shows an example of code generated by the macro. **IT MUST NOT BE USED OUTSIDE THIS
//! CRATE**.
//!
//! Usually, when you call the `bitflags!` macro, only the `Flags` type would be visible. In this
//! example, the `Field0`, `Iter`, and `IterRaw` types are also exposed so that you can explore
//! their APIs. The `Field0` type can be accessed as `self.0` on an instance of `Flags`.

__declare_public_bitflags! {
    /// This is the same `Flags` struct defined in the [crate level example](../index.html#example).
    /// Note that this struct is just for documentation purposes only, it must not be used outside
    /// this crate.
    pub struct Flags;
}

__declare_internal_bitflags! {
    pub struct Field0: u32;
    pub struct Iter;
    pub struct IterRaw;
}

__impl_internal_bitflags! {
    Field0: u32, Flags, Iter, IterRaw {
        A;
        B;
        C;
        ABC;
    }
}

__impl_public_bitflags! {
    Flags: u32, Field0, Iter, IterRaw;
}

__impl_public_bitflags_consts! {
    Flags {
        /// Field `A`.
        ///
        /// This flag has the value `0b00000001`.
        A = 0b00000001;
        /// Field `B`.
        ///
        /// This flag has the value `0b00000010`.
        B = 0b00000010;
        /// Field `C`.
        ///
        /// This flag has the value `0b00000100`.
        C = 0b00000100;
        ABC = Self::A.bits() | Self::B.bits() | Self::C.bits();
    }
}
