rust_helpers 2.12.0

Rust utilities to help with projects
Documentation
macro_rules! impl_for{
    ($(($t:ty,$t2:ty)),*) => {
        $(
        impl CastNumExt<$t> for $t2 {
            fn cast_as(self) -> $t {
                self as $t
            }
        }
    )*
    };
}
pub trait CastNumExt<T> {
    fn cast_as(self) -> T;
}

impl_for!(
    (u8, u16),
    (u8, u32),
    (u8, u64),
    (u8, u128),
    (u8, usize),
    (u8, i8),
    (u8, i16),
    (u8, i32),
    (u8, i64),
    (u8, i128),
    (u8, isize),
    (u8, f32),
    (u8, f64),
    (u16, u8),
    (u16, u32),
    (u16, u64),
    (u16, u128),
    (u16, usize),
    (u16, i8),
    (u16, i16),
    (u16, i32),
    (u16, i64),
    (u16, i128),
    (u16, isize),
    (u16, f32),
    (u16, f64),
    (u32, u8),
    (u32, u16),
    (u32, u64),
    (u32, u128),
    (u32, usize),
    (u32, i8),
    (u32, i16),
    (u32, i32),
    (u32, i64),
    (u32, i128),
    (u32, isize),
    (u32, f32),
    (u32, f64),
    (u64, u8),
    (u64, u16),
    (u64, u32),
    (u64, u128),
    (u64, usize),
    (u64, i8),
    (u64, i16),
    (u64, i32),
    (u64, i64),
    (u64, i128),
    (u64, isize),
    (u64, f32),
    (u64, f64),
    (u128, u8),
    (u128, u16),
    (u128, u32),
    (u128, u64),
    (u128, usize),
    (u128, i8),
    (u128, i16),
    (u128, i32),
    (u128, i64),
    (u128, i128),
    (u128, isize),
    (u128, f32),
    (u128, f64),
    (usize, u8),
    (usize, u16),
    (usize, u32),
    (usize, u64),
    (usize, u128),
    (usize, i8),
    (usize, i16),
    (usize, i32),
    (usize, i64),
    (usize, i128),
    (usize, isize),
    (usize, f32),
    (usize, f64),
    (i8, u8),
    (i8, u16),
    (i8, u32),
    (i8, u64),
    (i8, u128),
    (i8, usize),
    (i8, i16),
    (i8, i32),
    (i8, i64),
    (i8, i128),
    (i8, isize),
    (i8, f32),
    (i8, f64),
    (i16, u8),
    (i16, u16),
    (i16, u32),
    (i16, u64),
    (i16, u128),
    (i16, usize),
    (i16, i8),
    (i16, i32),
    (i16, i64),
    (i16, i128),
    (i16, isize),
    (i16, f32),
    (i16, f64),
    (i32, u8),
    (i32, u16),
    (i32, u32),
    (i32, u64),
    (i32, u128),
    (i32, usize),
    (i32, i8),
    (i32, i16),
    (i32, i64),
    (i32, i128),
    (i32, isize),
    (i32, f32),
    (i32, f64),
    (i64, u8),
    (i64, u16),
    (i64, u32),
    (i64, u64),
    (i64, u128),
    (i64, usize),
    (i64, i8),
    (i64, i16),
    (i64, i32),
    (i64, i128),
    (i64, isize),
    (i64, f32),
    (i64, f64),
    (i128, u8),
    (i128, u16),
    (i128, u32),
    (i128, u64),
    (i128, u128),
    (i128, usize),
    (i128, i8),
    (i128, i16),
    (i128, i32),
    (i128, i64),
    (i128, isize),
    (i128, f32),
    (i128, f64),
    (isize, u8),
    (isize, u16),
    (isize, u32),
    (isize, u64),
    (isize, u128),
    (isize, usize),
    (isize, i8),
    (isize, i16),
    (isize, i32),
    (isize, i64),
    (isize, i128),
    (isize, f32),
    (isize, f64),
    (f32, u8),
    (f32, u16),
    (f32, u32),
    (f32, u64),
    (f32, u128),
    (f32, usize),
    (f32, i8),
    (f32, i16),
    (f32, i32),
    (f32, i64),
    (f32, i128),
    (f32, isize),
    (f32, f64),
    (f64, u8),
    (f64, u16),
    (f64, u32),
    (f64, u64),
    (f64, u128),
    (f64, usize),
    (f64, i8),
    (f64, i16),
    (f64, i32),
    (f64, i64),
    (f64, i128),
    (f64, isize),
    (f64, f32)
);

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_cast() {
        let a: u8 = 1;
        let b: u16 = a.cast_as();
        assert_eq!(b, 1);
    }
}