Skip to main content

size_convert/
lib.rs

1#![doc = include_str!("../README.md")]
2#![no_std]
3
4mod enforce;
5
6macro_rules! conversion {
7    (fn $name:ident($T:ty) -> $U:ty $(, feature = $feature:literal $(,)?)?) => {
8        $(
9            #[cfg(feature = $feature)]
10        )?
11        #[doc = concat!(
12            "Infallibly and losslessly converts from `", stringify!($T), "` to `", stringify!($U), "`.",
13        )]
14        #[inline]
15        pub const fn $name(x: $T) -> $U {
16            x as $U
17        }
18    };
19}
20
21conversion!(fn u8_to_usize(u8) -> usize);
22conversion!(fn u16_to_usize(u16) -> usize);
23conversion!(fn u32_to_usize(u32) -> usize, feature = "at-least-32");
24conversion!(fn u64_to_usize(u64) -> usize, feature = "at-least-64");
25conversion!(fn u128_to_usize(u128) -> usize, feature = "at-least-128");
26
27conversion!(fn usize_to_u16(usize) -> u16, feature = "at-most-16");
28conversion!(fn usize_to_u32(usize) -> u32, feature = "at-most-32");
29conversion!(fn usize_to_u64(usize) -> u64, feature = "at-most-64");
30conversion!(fn usize_to_u128(usize) -> u128, feature = "at-most-128");
31
32conversion!(fn i8_to_isize(i8) -> isize);
33conversion!(fn i16_to_isize(i16) -> isize);
34conversion!(fn i32_to_isize(i32) -> isize, feature = "at-least-32");
35conversion!(fn i64_to_isize(i64) -> isize, feature = "at-least-64");
36conversion!(fn i128_to_isize(i128) -> isize, feature = "at-least-128");
37
38conversion!(fn isize_to_i16(isize) -> i16, feature = "at-most-16");
39conversion!(fn isize_to_i32(isize) -> i32, feature = "at-most-32");
40conversion!(fn isize_to_i64(isize) -> i64, feature = "at-most-64");
41conversion!(fn isize_to_i128(isize) -> i128, feature = "at-most-128");