pub trait Enum<V>: Sized {
type Array;
const POSSIBLE_VALUES: usize;
// Required methods
fn slice(array: &Self::Array) -> &[V];
fn slice_mut(array: &mut Self::Array) -> &mut [V];
fn from_usize(value: usize) -> Self;
fn to_usize(self) -> usize;
fn from_function<F: FnMut(Self) -> V>(f: F) -> Self::Array;
}
Expand description
Enum mapping type
This trait is internally used by #[derive(Enum)]
. Enum<T>
is
implemented by any enum type where V is a generic type representing a
value. The purpose of this generic type is to allow providing a value
type for arrays, as Rust currently does not support higher kinded types.
This trait is also implemented by bool
and u8
. While u8
is
strictly speaking not an actual enum, there are good reasons to consider
it like one, as array of u8
keys is a relatively common pattern.
Required Associated Constants§
Sourceconst POSSIBLE_VALUES: usize
const POSSIBLE_VALUES: usize
Number of possible states the type can have.
Required Associated Types§
Required Methods§
Sourcefn from_usize(value: usize) -> Self
fn from_usize(value: usize) -> Self
Takes an usize, and returns an element matching to_usize
function.
Sourcefn to_usize(self) -> usize
fn to_usize(self) -> usize
Returns an unique identifier for a value within range of 0..POSSIBLE_VALUES
.
Sourcefn from_function<F: FnMut(Self) -> V>(f: F) -> Self::Array
fn from_function<F: FnMut(Self) -> V>(f: F) -> Self::Array
Creates an array using a function called for each argument.
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.