use derive_more::Display;
use crate::error::Error;
#[derive(Debug, Display)]
#[display("Arch Error: {_variant}")]
pub enum ArchError {
#[display("usize to u32: {_0} cannot be converted into a u32")]
UsizeToU32(usize),
#[display("u64 to usize: {_0} cannot be converted into a usize")]
U64ToUsize(u64),
}
impl core::error::Error for ArchError {}
#[inline]
pub fn usize_to_u32(n: usize) -> Result<u32, Error<!>> {
u32::try_from(n).map_err(|_| Error::Arch(ArchError::UsizeToU32(n)))
}
#[inline]
#[must_use]
pub fn usize_to_u64(n: usize) -> u64 {
unsafe { u64::try_from(n).unwrap_unchecked() }
}
#[inline]
#[must_use]
pub fn u32_to_usize(#[allow(unused)] n: u32) -> usize {
unsafe { usize::try_from(n).unwrap_unchecked() }
}
#[inline]
pub fn u64_to_usize(n: u64) -> Result<usize, Error<!>> {
usize::try_from(n).map_err(|_| Error::Arch(ArchError::U64ToUsize(n)))
}