pub struct OneBasedU32(/* private fields */);Expand description
Represents 1-based index of u32.
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.
$name provides ergonomics to handle user provided 1-baed index safely.
// Creates from 1-based index
let v = OneBasedU32::from_one_based(5)?;
assert_eq!(v.as_zero_based(), 4);
// Creates from 0-based index
let v = OneBasedU32::from_zero_based(0)?;
assert_eq!(v.as_one_based().get(), 1);Implementations§
Source§impl OneBasedU32
impl OneBasedU32
Sourcepub const fn from_one_based(v: u32) -> Result<Self, OneBasedError>
pub const fn from_one_based(v: u32) -> Result<Self, OneBasedError>
Creates $name from 1-based index value.
Returns error if the given index is zero.
Sourcepub const unsafe fn from_one_based_unchecked(v: u32) -> Self
pub const unsafe fn from_one_based_unchecked(v: u32) -> Self
Sourcepub const fn from_one_based_nonzero(v: NonZeroU32) -> Self
pub const fn from_one_based_nonzero(v: NonZeroU32) -> Self
Creates $name from 1-based index value as [$nonzerotype].
This will always succeed.
Sourcepub const fn from_zero_based(v: u32) -> Result<Self, OneBasedError>
pub const fn from_zero_based(v: u32) -> Result<Self, OneBasedError>
Creates $name from 0-based index value.
Returns error if the given index is MAX value,
as that would case overflow when converted to 1-based.
Sourcepub const unsafe fn from_zero_based_unchecked(v: u32) -> Self
pub const unsafe fn from_zero_based_unchecked(v: u32) -> Self
Creates $name from 0-based index value without check.
§Safety
This function results in undefined behavior when v == u32::MAX.
// This should cause undefined behavior
unsafe {
OneBasedU32::from_zero_based_unchecked(u32::MAX);
}Sourcepub const fn as_zero_based(&self) -> u32
pub const fn as_zero_based(&self) -> u32
Returns regular 0-based index.
Sourcepub const fn as_one_based(&self) -> NonZeroU32
pub const fn as_one_based(&self) -> NonZeroU32
Returns 1-based index.
Trait Implementations§
Source§impl Clone for OneBasedU32
impl Clone for OneBasedU32
Source§fn clone(&self) -> OneBasedU32
fn clone(&self) -> OneBasedU32
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OneBasedU32
impl Debug for OneBasedU32
Source§impl Display for OneBasedU32
impl Display for OneBasedU32
Source§impl From<OneBasedU16> for OneBasedU32
impl From<OneBasedU16> for OneBasedU32
Source§fn from(value: OneBasedU16) -> Self
fn from(value: OneBasedU16) -> Self
Converts OneBasedU16 to OneBasedU32.
Source§impl From<OneBasedU32> for OneBasedU128
impl From<OneBasedU32> for OneBasedU128
Source§fn from(value: OneBasedU32) -> Self
fn from(value: OneBasedU32) -> Self
Converts OneBasedU32 to OneBasedU128.
Source§impl From<OneBasedU32> for OneBasedU64
impl From<OneBasedU32> for OneBasedU64
Source§fn from(value: OneBasedU32) -> Self
fn from(value: OneBasedU32) -> Self
Converts OneBasedU32 to OneBasedU64.
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 FromStr for OneBasedU32
impl FromStr for OneBasedU32
Source§impl Ord for OneBasedU32
impl Ord for OneBasedU32
Source§fn cmp(&self, other: &OneBasedU32) -> Ordering
fn cmp(&self, other: &OneBasedU32) -> 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 OneBasedU32
impl PartialEq for OneBasedU32
Source§impl PartialOrd for OneBasedU32
impl PartialOrd for OneBasedU32
Source§impl TryFrom<OneBasedU128> for OneBasedU32
impl TryFrom<OneBasedU128> for OneBasedU32
Source§fn try_from(value: OneBasedU128) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU128) -> Result<Self, Self::Error>
Attempts to convert OneBasedU128 to OneBasedU32.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU32> for OneBasedU16
impl TryFrom<OneBasedU32> for OneBasedU16
Source§fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
Attempts to convert OneBasedU32 to OneBasedU16.
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<OneBasedU32> for OneBasedUsize
impl TryFrom<OneBasedU32> for OneBasedUsize
Source§fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU32) -> Result<Self, Self::Error>
Attempts to convert OneBasedU32 to OneBasedUsize.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedU64> for OneBasedU32
impl TryFrom<OneBasedU64> for OneBasedU32
Source§fn try_from(value: OneBasedU64) -> Result<Self, Self::Error>
fn try_from(value: OneBasedU64) -> Result<Self, Self::Error>
Attempts to convert OneBasedU64 to OneBasedU32.
Source§type Error = TryFromIntError
type Error = TryFromIntError
Source§impl TryFrom<OneBasedUsize> for OneBasedU32
impl TryFrom<OneBasedUsize> for OneBasedU32
Source§fn try_from(value: OneBasedUsize) -> Result<Self, Self::Error>
fn try_from(value: OneBasedUsize) -> Result<Self, Self::Error>
Attempts to convert OneBasedUsize to OneBasedU32.