| bitflags! { |
| /// Constants shared by multiple CSS Box Alignment properties |
| /// |
| /// These constants match Gecko's `NS_STYLE_ALIGN_*` constants. |
| #[derive(MallocSizeOf)] |
| #[repr(C)] |
| pub struct AlignFlags: u8 { |
| /// 'auto' |
| const AUTO = 0; |
| /// 'normal' |
| const NORMAL = 1; |
| /// 'start' |
| const START = 1 << 1; |
| /// 'end' |
| const END = 1 << 2; |
| const ALIAS = Self::END.bits(); |
| /// 'flex-start' |
| const FLEX_START = 1 << 3; |
| const MIXED = 1 << 4 | AlignFlags::FLEX_START.bits() | AlignFlags::END.bits(); |
| const MIXED_SELF = 1 << 5 | AlignFlags::FLEX_START.bits() | AlignFlags::END.bits(); |
| } |
| } |
| |
| bitflags! { |
| #[repr(C)] |
| pub struct DebugFlags: u32 { |
| /// Flag with the topmost bit set of the u32 |
| const BIGGEST_ALLOWED = 1 << 31; |
| } |
| } |
| |
| bitflags! { |
| #[repr(C)] |
| pub struct LargeFlags: u64 { |
| /// Flag with a very large shift that usually would be narrowed. |
| const LARGE_SHIFT = 1u64 << 44; |
| const INVERTED = !Self::LARGE_SHIFT.bits(); |
| } |
| } |
| |
| // bitflags 2 allows to define types out-of-line for custom derives |
| // #[derive(SomeTrait)] |
| #[repr(C)] |
| pub struct OutOfLine(u32); |
| |
| bitflags! { |
| impl OutOfLine: u32 { |
| const A = 1; |
| const B = 2; |
| const AB = Self::A.bits() | Self::B.bits(); |
| } |
| } |
| |
| #[no_mangle] |
| pub extern "C" fn root( |
| flags: AlignFlags, |
| bigger_flags: DebugFlags, |
| largest_flags: LargeFlags, |
| out_of_line: OutOfLine, |
| ) { |
| } |