EnumLike

Trait EnumLike 

Source
pub unsafe trait EnumLike: Copy {
    const NUM_VARIANTS: usize;

    // Required methods
    fn to_discr(self) -> usize;
    fn from_discr(x: usize) -> Self;
}
Expand description

Not sure if this is needed The EnumLike trait specifies how a type will be stored inside the EnumVec.

It associates every possible instance of the type with a number. However this number does not need to be the same as the result of a simple enum as usize cast.

This trait is unsafe because implementations must follow the contract, especially the first rule:

  • self.to_discr() returns a value x < NUM_VARIANTS
  • Self::from_discr(self.to_discr()) == self
  • Self::from_discr(x) is only required to handle valid values of x

§Example 1

use enum_like::EnumLike;

#[derive(Copy, Clone, Debug)]
enum ExtendedBool {
    True,
    False,
    FileNotFound,
}

unsafe impl EnumLike for ExtendedBool {
    const NUM_VARIANTS: usize = 3;

    fn to_discr(self) -> usize {
        match self {
            ExtendedBool::True => 0,
            ExtendedBool::False => 1,
            ExtendedBool::FileNotFound => 2,
        }
    }

    fn from_discr(x: usize) -> Self {
        match x {
            0 => ExtendedBool::True,
            1 => ExtendedBool::False,
            2 => ExtendedBool::FileNotFound,
            _ => unreachable!(),
        }
    }
}

§Example 2

use enum_like::EnumLike;

#[derive(Copy, Clone, Debug)]
enum SomeFlags {
    Read = 4,
    Write = 2,
    Exec = 1,
}

unsafe impl EnumLike for SomeFlags {
    const NUM_VARIANTS: usize = 3;

    fn to_discr(self) -> usize {
        match self {
            // We override the default values, because 4 is out of range,
            // but we could also increase NUM_VARIANTS to 5 instead.
            SomeFlags::Read => 0,
            SomeFlags::Write => 1,
            SomeFlags::Exec => 2,

        }
    }

    fn from_discr(x: usize) -> Self {
        match x {
            0 => SomeFlags::Read,
            1 => SomeFlags::Write,
            2 => SomeFlags::Exec,
            _ => unreachable!(),
        }
    }
}

§Example 3

Of course, it is not limited to enums:

use enum_like::EnumLike;

#[derive(Copy, Clone, Debug)]
struct Digit {
    x: u8, // x >= 0 && x <= 9
}

unsafe impl EnumLike for Digit {
    const NUM_VARIANTS: usize = 10;
    fn to_discr(self) -> usize {
        self.x as usize
    }
    fn from_discr(x: usize) -> Self {
        let x = x as u8;
        Self { x }
    }
}

Here it is important to make sure that the Digit will always have a valid value in the [0, 9] range. Otherwise, if self.to_discr() returns any number bigger than NUM_VARIANTS, everything breaks.

Required Associated Constants§

Source

const NUM_VARIANTS: usize

The number of variants of this type

Required Methods§

Source

fn to_discr(self) -> usize

Convert type to discriminant

Source

fn from_discr(x: usize) -> Self

Get type instance from discriminant

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl EnumLike for bool

Source§

impl EnumLike for ()

Source§

impl<A1, A0, A2> EnumLike for (A1, A0, A2)
where A1: EnumLike, A0: EnumLike, A2: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A1, A0), A2)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A1, A0, A2)

Source§

impl<A2, A1, A0, A3> EnumLike for (A2, A1, A0, A3)
where A2: EnumLike, A1: EnumLike, A0: EnumLike, A3: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A2, A1, A0), A3)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A2, A1, A0, A3)

Source§

impl<A3, A2, A1, A0, A4> EnumLike for (A3, A2, A1, A0, A4)
where A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A4: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A3, A2, A1, A0), A4)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A3, A2, A1, A0, A4)

Source§

impl<A4, A3, A2, A1, A0, A5> EnumLike for (A4, A3, A2, A1, A0, A5)
where A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A5: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A4, A3, A2, A1, A0), A5)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A4, A3, A2, A1, A0, A5)

Source§

impl<A5, A4, A3, A2, A1, A0, A6> EnumLike for (A5, A4, A3, A2, A1, A0, A6)
where A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A6: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A5, A4, A3, A2, A1, A0), A6)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A5, A4, A3, A2, A1, A0, A6)

Source§

impl<A6, A5, A4, A3, A2, A1, A0, A7> EnumLike for (A6, A5, A4, A3, A2, A1, A0, A7)
where A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A7: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A6, A5, A4, A3, A2, A1, A0), A7)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A6, A5, A4, A3, A2, A1, A0, A7)

Source§

impl<A7, A6, A5, A4, A3, A2, A1, A0, A8> EnumLike for (A7, A6, A5, A4, A3, A2, A1, A0, A8)
where A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A8: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A7, A6, A5, A4, A3, A2, A1, A0), A8)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A7, A6, A5, A4, A3, A2, A1, A0, A8)

Source§

impl<A8, A7, A6, A5, A4, A3, A2, A1, A0, A9> EnumLike for (A8, A7, A6, A5, A4, A3, A2, A1, A0, A9)
where A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A9: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A8, A7, A6, A5, A4, A3, A2, A1, A0), A9)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A8, A7, A6, A5, A4, A3, A2, A1, A0, A9)

Source§

impl<A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A10> EnumLike for (A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A10)
where A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A10: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A10)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A10)

Source§

impl<A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A11> EnumLike for (A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A11)
where A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A11: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A11)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A11)

Source§

impl<A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A12> EnumLike for (A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A12)
where A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A12: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A12)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A12)

Source§

impl<A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A13> EnumLike for (A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A13)
where A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A13: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A13)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A13)

Source§

impl<A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A14> EnumLike for (A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A14)
where A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A14: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A14)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A14)

Source§

impl<A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A15> EnumLike for (A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A15)
where A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A15: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A15)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A15)

Source§

impl<A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A16> EnumLike for (A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A16)
where A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A16: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A16)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A16)

Source§

impl<A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A17> EnumLike for (A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A17)
where A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A17: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A17)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A17)

Source§

impl<A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A18> EnumLike for (A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A18)
where A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A18: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A18)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A18)

Source§

impl<A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A19> EnumLike for (A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A19)
where A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A19: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A19)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A19)

Source§

impl<A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A20> EnumLike for (A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A20)
where A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A20: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A20)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A20)

Source§

impl<A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A21> EnumLike for (A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A21)
where A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A21: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A21)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A21)

Source§

impl<A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A22> EnumLike for (A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A22)
where A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A22: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A22)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A22)

Source§

impl<A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A23> EnumLike for (A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A23)
where A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A23: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A23)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A23)

Source§

impl<A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A24> EnumLike for (A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A24)
where A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A24: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A24)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A24)

Source§

impl<A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A25> EnumLike for (A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A25)
where A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A25: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A25)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A25)

Source§

impl<A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A26> EnumLike for (A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A26)
where A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A26: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A26)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A26)

Source§

impl<A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A27> EnumLike for (A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A27)
where A26: EnumLike, A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A27: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A27)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A27)

Source§

impl<A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A28> EnumLike for (A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A28)
where A27: EnumLike, A26: EnumLike, A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A28: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A28)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A28)

Source§

impl<A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A29> EnumLike for (A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A29)
where A28: EnumLike, A27: EnumLike, A26: EnumLike, A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A29: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A29)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A29)

Source§

impl<A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A30> EnumLike for (A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A30)
where A29: EnumLike, A28: EnumLike, A27: EnumLike, A26: EnumLike, A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A30: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A30)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A30)

Source§

impl<A30, A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A31> EnumLike for (A30, A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A31)
where A30: EnumLike, A29: EnumLike, A28: EnumLike, A27: EnumLike, A26: EnumLike, A25: EnumLike, A24: EnumLike, A23: EnumLike, A22: EnumLike, A21: EnumLike, A20: EnumLike, A19: EnumLike, A18: EnumLike, A17: EnumLike, A16: EnumLike, A15: EnumLike, A14: EnumLike, A13: EnumLike, A12: EnumLike, A11: EnumLike, A10: EnumLike, A9: EnumLike, A8: EnumLike, A7: EnumLike, A6: EnumLike, A5: EnumLike, A4: EnumLike, A3: EnumLike, A2: EnumLike, A1: EnumLike, A0: EnumLike, A31: EnumLike,

Source§

const NUM_VARIANTS: usize = <((A30, A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0), A31)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr( x: usize, ) -> (A30, A29, A28, A27, A26, A25, A24, A23, A22, A21, A20, A19, A18, A17, A16, A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0, A31)

Source§

impl<A> EnumLike for [A; 1]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A,)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 1]

Source§

impl<A> EnumLike for [A; 2]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 2]

Source§

impl<A> EnumLike for [A; 3]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 3]

Source§

impl<A> EnumLike for [A; 4]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 4]

Source§

impl<A> EnumLike for [A; 5]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 5]

Source§

impl<A> EnumLike for [A; 6]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 6]

Source§

impl<A> EnumLike for [A; 7]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 7]

Source§

impl<A> EnumLike for [A; 8]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 8]

Source§

impl<A> EnumLike for [A; 9]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 9]

Source§

impl<A> EnumLike for [A; 10]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 10]

Source§

impl<A> EnumLike for [A; 11]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 11]

Source§

impl<A> EnumLike for [A; 12]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 12]

Source§

impl<A> EnumLike for [A; 13]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 13]

Source§

impl<A> EnumLike for [A; 14]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 14]

Source§

impl<A> EnumLike for [A; 15]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 15]

Source§

impl<A> EnumLike for [A; 16]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 16]

Source§

impl<A> EnumLike for [A; 17]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 17]

Source§

impl<A> EnumLike for [A; 18]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 18]

Source§

impl<A> EnumLike for [A; 19]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 19]

Source§

impl<A> EnumLike for [A; 20]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 20]

Source§

impl<A> EnumLike for [A; 21]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 21]

Source§

impl<A> EnumLike for [A; 22]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 22]

Source§

impl<A> EnumLike for [A; 23]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 23]

Source§

impl<A> EnumLike for [A; 24]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 24]

Source§

impl<A> EnumLike for [A; 25]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 25]

Source§

impl<A> EnumLike for [A; 26]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 26]

Source§

impl<A> EnumLike for [A; 27]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 27]

Source§

impl<A> EnumLike for [A; 28]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 28]

Source§

impl<A> EnumLike for [A; 29]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 29]

Source§

impl<A> EnumLike for [A; 30]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 30]

Source§

impl<A> EnumLike for [A; 31]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 31]

Source§

impl<A> EnumLike for [A; 32]
where A: EnumLike,

Source§

const NUM_VARIANTS: usize = <(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)>::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> [A; 32]

Source§

impl<T> EnumLike for Option<T>
where T: EnumLike,

Source§

impl<T> EnumLike for [T; 0]
where T: EnumLike,

Source§

impl<T> EnumLike for (T,)
where T: EnumLike,

Source§

const NUM_VARIANTS: usize = T::NUM_VARIANTS

Source§

fn to_discr(self) -> usize

Source§

fn from_discr(x: usize) -> (T,)

Source§

impl<T, S> EnumLike for Result<T, S>
where T: EnumLike, S: EnumLike,

Source§

impl<T, S> EnumLike for (T, S)
where T: EnumLike, S: EnumLike,

Implementors§