use crate::From;
macro_rules! impl_from {
($Small: ty, $Large: ty, $doc: expr) => {
impl const From<$Small> for $Large {
#[doc = $doc]
#[inline(always)]
fn from(small: $Small) -> Self {
small as Self
}
}
};
($Small: ty, $Large: ty) => {
impl_from!(
$Small,
$Large,
concat!(
"Converts `",
stringify!($Small),
"` to `",
stringify!($Large),
"` losslessly."
)
);
};
}
macro_rules! impl_from_bool {
($target: ty) => {
impl_from!(
bool,
$target,
concat!(
"Converts a `bool` to a `",
stringify!($target),
"`. The resulting value is `0` for `false` and `1` for `true`
values.
# Examples
```
assert_eq!(",
stringify!($target),
"::from(true), 1);
assert_eq!(",
stringify!($target),
"::from(false), 0);
```"
)
);
};
}
impl_from_bool! { u8}
impl_from_bool! { u16}
impl_from_bool! { u32}
impl_from_bool! { u64}
impl_from_bool! { u128}
impl_from_bool! { usize}
impl_from_bool! { i8}
impl_from_bool! { i16}
impl_from_bool! { i32}
impl_from_bool! { i64}
impl_from_bool! { i128}
impl_from_bool! { isize}
impl_from! { u8, u16}
impl_from! { u8, u32}
impl_from! { u8, u64}
impl_from! { u8, u128}
impl_from! { u8, usize}
impl_from! { u16, u32}
impl_from! { u16, u64}
impl_from! { u16, u128}
impl_from! { u32, u64}
impl_from! { u32, u128}
impl_from! { u64, u128}
impl_from! { i8, i16}
impl_from! { i8, i32}
impl_from! { i8, i64}
impl_from! { i8, i128}
impl_from! { i8, isize}
impl_from! { i16, i32}
impl_from! { i16, i64}
impl_from! { i16, i128}
impl_from! { i32, i64}
impl_from! { i32, i128}
impl_from! { i64, i128}
impl_from! { u8, i16}
impl_from! { u8, i32}
impl_from! { u8, i64}
impl_from! { u8, i128}
impl_from! { u16, i32}
impl_from! { u16, i64}
impl_from! { u16, i128}
impl_from! { u32, i64}
impl_from! { u32, i128}
impl_from! { u64, i128}
impl_from! { u16, usize}
impl_from! { u8, isize}
impl_from! { i16, isize}
impl_from! { i8, f32}
impl_from! { i8, f64}
impl_from! { i16, f32}
impl_from! { i16, f64}
impl_from! { i32, f64}
impl_from! { u8, f32}
impl_from! { u8, f64}
impl_from! { u16, f32}
impl_from! { u16, f64}
impl_from! { u32, f64}
impl_from! { f32, f64}
impl const From<bool> for f32 {
#[inline]
fn from(small: bool) -> Self {
small as u8 as Self
}
}
impl const From<bool> for f64 {
#[inline]
fn from(small: bool) -> Self {
small as u8 as Self
}
}
use core::num::NonZeroI128;
use core::num::NonZeroI16;
use core::num::NonZeroI32;
use core::num::NonZeroI64;
use core::num::NonZeroI8;
use core::num::NonZeroIsize;
use core::num::NonZeroU128;
use core::num::NonZeroU16;
use core::num::NonZeroU32;
use core::num::NonZeroU64;
use core::num::NonZeroU8;
use core::num::NonZeroUsize;
macro_rules! nzint_impl_from {
($Small: ty, $Large: ty, $doc: expr) => {
impl const From<$Small> for $Large {
#[doc = $doc]
#[inline]
fn from(small: $Small) -> Self {
unsafe { Self::new_unchecked(From::from(small.get())) }
}
}
};
($Small: ty, $Large: ty) => {
nzint_impl_from!(
$Small,
$Large,
concat!(
"Converts `",
stringify!($Small),
"` to `",
stringify!($Large),
"` losslessly."
)
);
};
}
nzint_impl_from! { NonZeroU8, NonZeroU16}
nzint_impl_from! { NonZeroU8, NonZeroU32}
nzint_impl_from! { NonZeroU8, NonZeroU64}
nzint_impl_from! { NonZeroU8, NonZeroU128}
nzint_impl_from! { NonZeroU8, NonZeroUsize}
nzint_impl_from! { NonZeroU16, NonZeroU32}
nzint_impl_from! { NonZeroU16, NonZeroU64}
nzint_impl_from! { NonZeroU16, NonZeroU128}
nzint_impl_from! { NonZeroU16, NonZeroUsize}
nzint_impl_from! { NonZeroU32, NonZeroU64}
nzint_impl_from! { NonZeroU32, NonZeroU128}
nzint_impl_from! { NonZeroU64, NonZeroU128}
nzint_impl_from! { NonZeroI8, NonZeroI16}
nzint_impl_from! { NonZeroI8, NonZeroI32}
nzint_impl_from! { NonZeroI8, NonZeroI64}
nzint_impl_from! { NonZeroI8, NonZeroI128}
nzint_impl_from! { NonZeroI8, NonZeroIsize}
nzint_impl_from! { NonZeroI16, NonZeroI32}
nzint_impl_from! { NonZeroI16, NonZeroI64}
nzint_impl_from! { NonZeroI16, NonZeroI128}
nzint_impl_from! { NonZeroI16, NonZeroIsize}
nzint_impl_from! { NonZeroI32, NonZeroI64}
nzint_impl_from! { NonZeroI32, NonZeroI128}
nzint_impl_from! { NonZeroI64, NonZeroI128}
nzint_impl_from! { NonZeroU8, NonZeroI16}
nzint_impl_from! { NonZeroU8, NonZeroI32}
nzint_impl_from! { NonZeroU8, NonZeroI64}
nzint_impl_from! { NonZeroU8, NonZeroI128}
nzint_impl_from! { NonZeroU8, NonZeroIsize}
nzint_impl_from! { NonZeroU16, NonZeroI32}
nzint_impl_from! { NonZeroU16, NonZeroI64}
nzint_impl_from! { NonZeroU16, NonZeroI128}
nzint_impl_from! { NonZeroU32, NonZeroI64}
nzint_impl_from! { NonZeroU32, NonZeroI128}
nzint_impl_from! { NonZeroU64, NonZeroI128}