1pub trait RawFrom<F: Sized>: Sized {
7 fn raw_from (other: F) -> Self;
8}
9
10macro_rules! impl_raw_from {
11 { $($($f:ty),* => $t:ty;)* } => { $($(
12 impl RawFrom<$f> for $t {
13 #[inline(always)]
14 fn raw_from (other: $f) -> $t { other as $t }
15 }
16 )*)* };
17}
18
19impl_raw_from! {
20 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i8;
21 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i16;
22 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i32;
23 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => i64;
24 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => isize;
25 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u8;
26 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u16;
27 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u32;
28 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => u64;
29 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => usize;
30 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => f32;
31 i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64 => f64;
32}
33
34pub trait RawInto<T: Sized>: Sized {
38 fn raw_into (self) -> T;
39}
40
41impl<F: Sized, T: RawFrom<F>> RawInto<T> for F {
42 #[inline(always)]
43 fn raw_into (self) -> T { T::raw_from(self) }
44}