as_what/
lib.rs

1#![no_std]
2#![warn(rust_2018_idioms, clippy::dbg_macro, clippy::print_stdout)]
3#![allow(clippy::wrong_self_convention)]
4#![doc = include_str!("../README.md")]
5
6macro_rules! as_trait {
7    ($target_type:ty, $trait_name:ident, $method_name:ident, [$($type:ty),*]) => {
8        #[doc = concat!("A trait for converting to [`", stringify!($target_type), "`].")]
9        pub trait $trait_name {
10            fn $method_name(self) -> $target_type;
11        }
12
13        $(
14            impl $trait_name for $type {
15                #[inline(always)]
16                fn $method_name(self) -> $target_type {
17                    self as $target_type
18                }
19            }
20        )*
21    };
22}
23
24as_trait!(
25    i8,
26    AsI8,
27    as_i8,
28    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
29);
30as_trait!(
31    i16,
32    AsI16,
33    as_i16,
34    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
35);
36as_trait!(
37    i32,
38    AsI32,
39    as_i32,
40    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
41);
42as_trait!(
43    i64,
44    AsI64,
45    as_i64,
46    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
47);
48as_trait!(
49    i128,
50    AsI128,
51    as_i128,
52    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
53);
54as_trait!(
55    isize,
56    AsIsize,
57    as_isize,
58    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
59);
60as_trait!(
61    u8,
62    AsU8,
63    as_u8,
64    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
65);
66as_trait!(
67    u16,
68    AsU16,
69    as_u16,
70    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
71);
72as_trait!(
73    u32,
74    AsU32,
75    as_u32,
76    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
77);
78as_trait!(
79    u64,
80    AsU64,
81    as_u64,
82    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
83);
84as_trait!(
85    u128,
86    AsU128,
87    as_u128,
88    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
89);
90as_trait!(
91    usize,
92    AsUsize,
93    as_usize,
94    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64, char]
95);
96as_trait!(
97    f32,
98    AsF32,
99    as_f32,
100    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64]
101);
102as_trait!(
103    f64,
104    AsF64,
105    as_f64,
106    [i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64]
107);
108as_trait!(char, AsChar, as_char, [u8, char]);