ビットフラッグ

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)のような新しいタイプを生成し、フラグを読み書きするための多くのメソッド実装を一緒に提供します。