use crate::repr::EnumSetTypeRepr;
#[cfg(feature = "serde")]
use crate::EnumSet;
pub unsafe trait EnumSetType: Copy + Eq + EnumSetTypePrivate {}
pub unsafe trait EnumSetTypeWithRepr:
EnumSetType + EnumSetTypePrivate<Repr = <Self as EnumSetTypeWithRepr>::Repr>
{
type Repr: EnumSetTypeRepr;
}
pub unsafe trait EnumSetTypePrivate: EnumSetConstHelper + Sized {
type Repr: EnumSetTypeRepr;
const ALL_BITS: Self::Repr;
const BIT_WIDTH: u32;
const VARIANT_COUNT: u32;
fn enum_into_u32(self) -> u32;
unsafe fn enum_from_u32(val: u32) -> Self;
unsafe fn enum_from_u32_checked(val: u32) -> Self {
debug_assert!(Self::ALL_BITS.has_bit(val), "Unknown bit retrieved from bitset.");
Self::enum_from_u32(val)
}
#[cfg(feature = "serde")]
fn serialize<S: serde::Serializer>(set: EnumSet<Self>, ser: S) -> Result<S::Ok, S::Error>
where Self: EnumSetType;
#[cfg(feature = "serde")]
fn deserialize<'de, D: serde::Deserializer<'de>>(de: D) -> Result<EnumSet<Self>, D::Error>
where Self: EnumSetType;
}
pub unsafe trait EnumSetConstHelper {
type ConstInitHelper;
const CONST_INIT_HELPER: Self::ConstInitHelper;
type ConstOpHelper;
const CONST_OP_HELPER: Self::ConstOpHelper;
}