Бітові прапорці (крейт bitflags)

Крейт bitflags корисний для роботи з бітовими флагами.

use bitflags::bitflags;

bitflags! {
    /// Прапорці з регістру прапорів UART.
    #[repr(transparent)]
    #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    struct Flags: u16 {
        /// Очистити для відправки.
        const CTS = 1 << 0;
        /// Набір даних готовий.
        const DSR = 1 << 1;
        /// Визначення носія даних.
        const DCD = 1 << 2;
        /// UART зайнятий передачею даних.
        const BUSY = 1 << 3;
        /// FIFO отримання порожній.
        const RXFE = 1 << 4;
        /// FIFO передачі заповнено.
        const TXFF = 1 << 5;
        /// FIFO отримання заповнено.
        const RXFF = 1 << 6;
        /// FIFO передачі порожній.
        const TXFE = 1 << 7;
        /// Індикатор кільця.
        const RI = 1 << 8;
    }
}
  • Макрос bitflags! створює новий тип, щось на кшталт Flags(u16) разом із купою реалізацій методів для отримання та встановлення прапорів.