use std::convert::TryInto;
use super::errors::ErrorCodes;
use anyhow::Result;
pub trait Cast: Sized {
#[track_caller]
#[inline(always)]
fn cast<T: std::convert::TryFrom<Self>>(self) -> Result<T> {
match self.try_into() {
Ok(result) => Ok(result),
Err(_) => Err(ErrorCodes::CastingFailure.into()),
}
}
}
impl Cast for u128 {}
impl Cast for u64 {}
impl Cast for u32 {}
impl Cast for u16 {}
impl Cast for u8 {}
impl Cast for usize {}
impl Cast for i128 {}
impl Cast for i64 {}
impl Cast for i32 {}
impl Cast for i16 {}
impl Cast for i8 {}
impl Cast for bool {}