Macro tor_dirmgr::event::impl_FlagEvent

source ·
macro_rules! impl_FlagEvent {
    { $ty:ident } => { ... };
}
Expand description

Implements FlagEvent for a C-like enum

Requiremets:

  • $ty must implement [strum::EnumCount] [strum::IntoEnumIterator]

  • $ty type must implement Into<u16> and TryFrom<u16> (for example using the num_enum crate).

  • The discriminants must be densely allocated. This will be done automatically by the compiler if explicit discriminants are not specified. (This property is checked in a test.)

  • The variants may not contain any data. This is required for correctness. We think it is checked if you use num_enum::TryFromPrimitive.

§Example

use num_enum::{IntoPrimitive, TryFromPrimitive};
use strum::{EnumCount, EnumIter};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(EnumIter, EnumCount, IntoPrimitive, TryFromPrimitive)]
#[non_exhaustive]
#[repr(u16)]
pub enum DirEvent {
    NewConsensus,
    NewDescriptors,
}

impl_FlagEvent!{ DirEvent }