Function constmuck::contiguous::from_u8 [−][src]
pub const fn from_u8<T>(integer: u8, bounds: IsContiguous<T, u8>) -> Option<T>
Expand description
Converts integer: u8
to T
if it’s between the minimum and maximum values for T
,
otherwise returns None
.
Requires that T
implements Contiguous<Int = u8>
Examples
NonZeroU8
use constmuck::{IsContiguous, contiguous, infer};
use std::num::NonZeroU8;
const ZERO: Option<NonZeroU8> = contiguous::from_u8(0, infer!());
assert_eq!(ZERO, None);
const ONE: Option<NonZeroU8> = contiguous::from_u8(1, IsContiguous!());
assert_eq!(ONE, NonZeroU8::new(1));
const HUNDRED: Option<NonZeroU8> = contiguous::from_u8(100, IsContiguous!(NonZeroU8));
assert_eq!(HUNDRED, NonZeroU8::new(100));
Custom type
use constmuck::{Contiguous, IsContiguous, contiguous, infer};
#[repr(u8)]
#[derive(Debug, PartialEq, Copy, Clone)]
enum Direction {
Up = 10,
Down = 11,
Left = 12,
Right = 13,
}
unsafe impl Contiguous for Direction {
type Int = u8;
const MIN_VALUE: u8 = 10;
const MAX_VALUE: u8 = 13;
}
const NONE0: Option<Direction> = contiguous::from_u8(0, infer!());
assert_eq!(NONE0, None);
const NONE9: Option<Direction> = contiguous::from_u8(9, infer!());
assert_eq!(NONE9, None);
const UP: Option<Direction> = contiguous::from_u8(10, infer!());
assert_eq!(UP, Some(Direction::Up));
const DOWN: Option<Direction> = contiguous::from_u8(11, IsContiguous!());
assert_eq!(DOWN, Some(Direction::Down));
// Passing the `Direction` type argument is required,
// since any type can `ìmpl PartialEq<Foo> for Direction`.
let left = contiguous::from_u8(12, IsContiguous!(Direction));
assert_eq!(left, Some(Direction::Left));
let right = contiguous::from_u8(13, IsContiguous!(Direction, u8));
assert_eq!(right, Some(Direction::Right));
const NONE14: Option<Direction> = contiguous::from_u8(14, IsContiguous!());
assert_eq!(NONE14, None);