pub struct OneBasedU8(/* private fields */);Expand description
Represents 1-based index of u8.
To describe configuration by humans, often 1-based index is easier than 0-based to understand.
On the other hand, 0-based index is easier to use in the programming.
Also, it’s quite hard to track if the index is 0-based or 1-based.
OneBasedU8 provides ergonomics to handle user provided 1-baed index safely.
// Creates from 1-based index
let v = OneBasedU8::from_one_based(5).unwrap();
assert_eq!(v.as_zero_based(), 4);
// Creates from 0-based index
let v = OneBasedU8::from_zero_based(0).unwrap();
assert_eq!(v.as_one_based().get(), 1);Implementations§
Source§impl OneBasedU8
impl OneBasedU8
Sourcepub const BITS: u32 = 8u32
pub const BITS: u32 = 8u32
The size of this one-based integer type in bits.
This value is equal to u8::BITS.
Sourcepub const MIN: Self
pub const MIN: Self
The smallest value that can be represented by this one-based integer type, from_one_based(1).
Sourcepub const MAX: Self
pub const MAX: Self
The largest value that can be represented by this one-based integer type, equal to from_one_based(u8::MAX).
Sourcepub const fn from_one_based(v: u8) -> Option<Self>
pub const fn from_one_based(v: u8) -> Option<Self>
Creates a one-based integer from 1-based index value.
Returns None if the given index is zero.
Note you can define a constant easily given Option::unwrap() or Option::expect() are also const.
const ONE_BASED_TEN: OneBasedU8 = OneBasedU8::from_one_based(10).expect("10 is non zero");
assert_eq!(ONE_BASED_TEN.as_zero_based(), 9);Sourcepub const unsafe fn from_one_based_unchecked(v: u8) -> Self
pub const unsafe fn from_one_based_unchecked(v: u8) -> Self
Creates a one-based integer from 1-based index value without check.
§Safety
Input must be greater than zero.
Sourcepub const fn from_one_based_nonzero(v: NonZeroU8) -> Self
pub const fn from_one_based_nonzero(v: NonZeroU8) -> Self
Creates a one-based integer from non-zero 1-based index value.
Given the underlying value is guaranteed to be non-zero, this will always succeed.
Sourcepub const fn from_zero_based(v: u8) -> Option<Self>
pub const fn from_zero_based(v: u8) -> Option<Self>
Creates a one-based integer from 0-based index value.
Returns None if the given index is MAX value,
as that would cause overflow when converted to 1-based.
Sourcepub const unsafe fn from_zero_based_unchecked(v: u8) -> Self
pub const unsafe fn from_zero_based_unchecked(v: u8) -> Self
Creates a one-based integer from 0-based index value without check.
§Safety
This function results in undefined behavior when v == u8::MAX.
// This should cause undefined behavior
unsafe {
OneBasedU8::from_zero_based_unchecked(u8::MAX);
}Sourcepub const fn as_zero_based(self) -> u8
pub const fn as_zero_based(self) -> u8
Returns regular 0-based index.
Sourcepub const fn as_one_based(self) -> NonZeroU8
pub const fn as_one_based(self) -> NonZeroU8
Returns 1-based index.
Sourcepub const fn checked_add(self, other: u8) -> Option<Self>
pub const fn checked_add(self, other: u8) -> Option<Self>
Adds an unsigned integer to a one-based integer value. Checks for overflow and returns None on overflow.
let one = OneBasedU8::from_zero_based(1).unwrap();
let two = OneBasedU8::from_zero_based(2).unwrap();
let max = OneBasedU8::MAX;
assert_eq!(Some(two), one.checked_add(1));
assert_eq!(None, max.checked_add(1));Sourcepub const fn saturating_add(self, other: u8) -> Self
pub const fn saturating_add(self, other: u8) -> Self
Adds an unsigned integer to a one-based integer value. Returns Self::MAX on overflow.
let one = OneBasedU8::from_zero_based(1).unwrap();
let two = OneBasedU8::from_zero_based(2).unwrap();
let max = OneBasedU8::MAX;
assert_eq!(two, one.saturating_add(1));
assert_eq!(max, max.saturating_add(1));Trait Implementations§
Source§impl Clone for OneBasedU8
impl Clone for OneBasedU8
Source§fn clone(&self) -> OneBasedU8
fn clone(&self) -> OneBasedU8
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OneBasedU8
impl Debug for OneBasedU8
Source§impl Display for OneBasedU8
impl Display for OneBasedU8
Source§impl From<OneBasedU8> for OneBasedU128
impl From<OneBasedU8> for OneBasedU128
Source§fn from(value: OneBasedU8) -> Self
fn from(value: OneBasedU8) -> Self
Converts OneBasedU8 to OneBasedU128.
Source§impl From<OneBasedU8> for OneBasedU16
impl From<OneBasedU8> for OneBasedU16
Source§fn from(value: OneBasedU8) -> Self
fn from(value: OneBasedU8) -> Self
Converts OneBasedU8 to OneBasedU16.
Source§impl From<OneBasedU8> for OneBasedU32
impl From<OneBasedU8> for OneBasedU32
Source§fn from(value: OneBasedU8) -> Self
fn from(value: OneBasedU8) -> Self
Converts OneBasedU8 to OneBasedU32.
Source§impl From<OneBasedU8> for OneBasedU64
impl From<OneBasedU8> for OneBasedU64
Source§fn from(value: OneBasedU8) -> Self
fn from(value: OneBasedU8) -> Self
Converts OneBasedU8 to OneBasedU64.
Source§impl FromStr for OneBasedU8
impl FromStr for OneBasedU8
Source§impl Ord for OneBasedU8
impl Ord for OneBasedU8
Source§fn cmp(&self, other: &OneBasedU8) -> Ordering
fn cmp(&self, other: &OneBasedU8) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for OneBasedU8
impl PartialEq for OneBasedU8
Source§impl PartialOrd for OneBasedU8
impl PartialOrd for OneBasedU8
Source§impl TryFrom<OneBasedU128> for OneBasedU8
impl TryFrom<OneBasedU128> for OneBasedU8
Source§fn try_from(value: OneBasedU128) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU128) -> Result<Self, Self::Error>
Attempts to convert OneBasedU128 to OneBasedU8.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU16> for OneBasedU8
impl TryFrom<OneBasedU16> for OneBasedU8
Source§fn try_from(value: OneBasedU16) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU16) -> Result<Self, Self::Error>
Attempts to convert OneBasedU16 to OneBasedU8.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU32> for OneBasedU8
impl TryFrom<OneBasedU32> for OneBasedU8
Source§fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
Attempts to convert OneBasedU32 to OneBasedU8.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU64> for OneBasedU8
impl TryFrom<OneBasedU64> for OneBasedU8
Source§fn try_from(value: OneBasedU64) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU64) -> Result<Self, Self::Error>
Attempts to convert OneBasedU64 to OneBasedU8.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU8> for OneBasedUsize
impl TryFrom<OneBasedU8> for OneBasedUsize
Source§fn try_from(value: OneBasedU8) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU8) -> Result<Self, Self::Error>
Attempts to convert OneBasedU8 to OneBasedUsize.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedUsize> for OneBasedU8
impl TryFrom<OneBasedUsize> for OneBasedU8
Source§fn try_from(value: OneBasedUsize) -> Result<Self, Self::Error>
fn try_from(value: OneBasedUsize) -> Result<Self, Self::Error>
Attempts to convert OneBasedUsize to OneBasedU8.