| //! An example of implementing the `BitFlags` trait manually for a flags type. |
| |
| use std::str; |
| |
| use bitflags::bitflags; |
| |
| // Define a flags type outside of the `bitflags` macro as a newtype |
| // It can accept custom derives for libraries `bitflags` doesn't support natively |
| #[derive(zerocopy::AsBytes, zerocopy::FromBytes, zerocopy::FromZeroes)] |
| #[repr(transparent)] |
| pub struct ManualFlags(u32); |
| |
| // Next: use `impl Flags` instead of `struct Flags` |
| bitflags! { |
| impl ManualFlags: u32 { |
| const A = 0b00000001; |
| const B = 0b00000010; |
| const C = 0b00000100; |
| const ABC = Self::A.bits() | Self::B.bits() | Self::C.bits(); |
| } |
| } |
| |
| fn main() {} |