1#![no_std]
8
9pub mod prelude {
18 #[allow(deprecated)]
19 pub use crate::{Extend as _, Truncate as _, Widen as _};
20}
21
22mod sealed {
23 pub trait Integer {}
24
25 macro_rules! impl_integer {
26 ($($t:ty)*) => {$(
27 impl Integer for $t {}
28 )*};
29 }
30
31 impl Integer for u8 {}
impl Integer for u16 {}
impl Integer for u32 {}
impl Integer for u64 {}
impl Integer for u128 {}
impl Integer for usize {}
impl Integer for i8 {}
impl Integer for i16 {}
impl Integer for i32 {}
impl Integer for i64 {}
impl Integer for i128 {}
impl Integer for isize {}impl_integer! {
32 u8 u16 u32 u64 u128 usize
33 i8 i16 i32 i64 i128 isize
34 }
35
36 #[deprecated(since = "0.2.2", note = "use `WidenTargetSealed` instead")]
37 pub trait ExtendTargetSealed<T> {
38 #[deprecated(since = "0.2.2", note = "use `widen` instead")]
39 fn extend(self) -> T;
40 }
41
42 pub trait WidenTargetSealed<T> {
43 fn widen(self) -> T;
44 }
45
46 pub trait TruncateTargetSealed<T> {
47 fn truncate(self) -> T;
48 fn saturating_truncate(self) -> T;
49 fn checked_truncate(self) -> Option<T>;
50 }
51}
52
53#[deprecated(since = "0.2.2", note = "use `WidenTarget` instead")]
58#[allow(deprecated)]
59pub trait ExtendTarget<T>: sealed::ExtendTargetSealed<T> {}
60
61pub trait WidenTarget<T>: sealed::WidenTargetSealed<T> {}
66
67pub trait TruncateTarget<T>: sealed::TruncateTargetSealed<T> {}
72
73pub trait Widen: sealed::Integer {
91 fn widen<T>(self) -> T
93 where
94 Self: WidenTarget<T>;
95}
96
97impl<T: sealed::Integer> Widen for T {
98 fn widen<U>(self) -> U
99 where
100 T: WidenTarget<U>,
101 {
102 sealed::WidenTargetSealed::widen(self)
103 }
104}
105
106#[deprecated(since = "0.2.2", note = "use `Widen` instead")]
124#[allow(deprecated)]
125pub trait Extend: sealed::Integer {
126 fn extend<T>(self) -> T
128 where
129 Self: ExtendTarget<T>;
130}
131
132#[allow(deprecated)]
133impl<T: sealed::Integer> Extend for T {
134 fn extend<U>(self) -> U
135 where
136 T: ExtendTarget<U>,
137 {
138 sealed::ExtendTargetSealed::extend(self)
139 }
140}
141
142pub trait Truncate: sealed::Integer {
198 fn truncate<T>(self) -> T
201 where
202 Self: TruncateTarget<T>;
203
204 fn saturating_truncate<T>(self) -> T
207 where
208 Self: TruncateTarget<T>;
209
210 fn checked_truncate<T>(self) -> Option<T>
213 where
214 Self: TruncateTarget<T>;
215}
216
217impl<T: sealed::Integer> Truncate for T {
218 fn truncate<U>(self) -> U
219 where
220 T: TruncateTarget<U>,
221 {
222 sealed::TruncateTargetSealed::truncate(self)
223 }
224
225 fn saturating_truncate<U>(self) -> U
226 where
227 T: TruncateTarget<U>,
228 {
229 sealed::TruncateTargetSealed::saturating_truncate(self)
230 }
231
232 fn checked_truncate<U>(self) -> Option<U>
233 where
234 T: TruncateTarget<U>,
235 {
236 sealed::TruncateTargetSealed::checked_truncate(self)
237 }
238}
239
240macro_rules! impl_widen {
241 ($($from:ty => $($to:ty),+;)*) => {$($(
242 const _: () = assert!(
243 core::mem::size_of::<$from>() <= core::mem::size_of::<$to>(),
244 concat!(
245 "cannot widen ",
246 stringify!($from),
247 " to ",
248 stringify!($to),
249 " because ",
250 stringify!($from),
251 " is larger than ",
252 stringify!($to)
253 )
254 );
255
256 #[allow(deprecated)]
257 impl sealed::ExtendTargetSealed<$to> for $from {
258 #[inline]
259 fn extend(self) -> $to {
260 self as _
261 }
262 }
263
264 impl sealed::WidenTargetSealed<$to> for $from {
265 #[inline]
266 fn widen(self) -> $to {
267 self as _
268 }
269 }
270
271 #[allow(deprecated)]
272 impl ExtendTarget<$to> for $from {}
273 impl WidenTarget<$to> for $from {}
274 )+)*};
275}
276
277macro_rules! impl_truncate {
278 ($($($from:ty),+ => $to:ty;)*) => {$($(
279 const _: () = assert!(
280 core::mem::size_of::<$from>() >= core::mem::size_of::<$to>(),
281 concat!(
282 "cannot truncate ",
283 stringify!($from),
284 " to ",
285 stringify!($to),
286 " because ",
287 stringify!($from),
288 " is smaller than ",
289 stringify!($to)
290 )
291 );
292
293 impl sealed::TruncateTargetSealed<$to> for $from {
294 #[inline]
295 fn truncate(self) -> $to {
296 self as _
297 }
298
299 #[inline]
300 fn saturating_truncate(self) -> $to {
301 if self > <$to>::MAX as _ {
302 <$to>::MAX
303 } else if self < <$to>::MIN as _ {
304 <$to>::MIN
305 } else {
306 self as _
307 }
308 }
309
310 #[inline]
311 fn checked_truncate(self) -> Option<$to> {
312 if self > <$to>::MAX as _ || self < <$to>::MIN as _ {
313 None
314 } else {
315 Some(self as _)
316 }
317 }
318 }
319
320 impl TruncateTarget<$to> for $from {}
321 )+)*};
322}
323
324const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to u8 because u8 is larger than u8"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u8> for u8 {
#[inline]
fn extend(self) -> u8 { self as _ }
}
impl sealed::WidenTargetSealed<u8> for u8 {
#[inline]
fn widen(self) -> u8 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u8> for u8 { }
impl WidenTarget<u8> for u8 {}
const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to u16 because u8 is larger than u16"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u16> for u8 {
#[inline]
fn extend(self) -> u16 { self as _ }
}
impl sealed::WidenTargetSealed<u16> for u8 {
#[inline]
fn widen(self) -> u16 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u16> for u8 { }
impl WidenTarget<u16> for u8 {}
const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to u32 because u8 is larger than u32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u32> for u8 {
#[inline]
fn extend(self) -> u32 { self as _ }
}
impl sealed::WidenTargetSealed<u32> for u8 {
#[inline]
fn widen(self) -> u32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u32> for u8 { }
impl WidenTarget<u32> for u8 {}
const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to u64 because u8 is larger than u64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u64> for u8 {
#[inline]
fn extend(self) -> u64 { self as _ }
}
impl sealed::WidenTargetSealed<u64> for u8 {
#[inline]
fn widen(self) -> u64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u64> for u8 { }
impl WidenTarget<u64> for u8 {}
const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to u128 because u8 is larger than u128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u128> for u8 {
#[inline]
fn extend(self) -> u128 { self as _ }
}
impl sealed::WidenTargetSealed<u128> for u8 {
#[inline]
fn widen(self) -> u128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u128> for u8 { }
impl WidenTarget<u128> for u8 {}
const _: () =
if !(core::mem::size_of::<u8>() <= core::mem::size_of::<usize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u8 to usize because u8 is larger than usize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<usize> for u8 {
#[inline]
fn extend(self) -> usize { self as _ }
}
impl sealed::WidenTargetSealed<usize> for u8 {
#[inline]
fn widen(self) -> usize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<usize> for u8 { }
impl WidenTarget<usize> for u8 {}
const _: () =
if !(core::mem::size_of::<u16>() <= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u16 to u16 because u16 is larger than u16"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u16> for u16 {
#[inline]
fn extend(self) -> u16 { self as _ }
}
impl sealed::WidenTargetSealed<u16> for u16 {
#[inline]
fn widen(self) -> u16 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u16> for u16 { }
impl WidenTarget<u16> for u16 {}
const _: () =
if !(core::mem::size_of::<u16>() <= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u16 to u32 because u16 is larger than u32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u32> for u16 {
#[inline]
fn extend(self) -> u32 { self as _ }
}
impl sealed::WidenTargetSealed<u32> for u16 {
#[inline]
fn widen(self) -> u32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u32> for u16 { }
impl WidenTarget<u32> for u16 {}
const _: () =
if !(core::mem::size_of::<u16>() <= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u16 to u64 because u16 is larger than u64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u64> for u16 {
#[inline]
fn extend(self) -> u64 { self as _ }
}
impl sealed::WidenTargetSealed<u64> for u16 {
#[inline]
fn widen(self) -> u64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u64> for u16 { }
impl WidenTarget<u64> for u16 {}
const _: () =
if !(core::mem::size_of::<u16>() <= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u16 to u128 because u16 is larger than u128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u128> for u16 {
#[inline]
fn extend(self) -> u128 { self as _ }
}
impl sealed::WidenTargetSealed<u128> for u16 {
#[inline]
fn widen(self) -> u128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u128> for u16 { }
impl WidenTarget<u128> for u16 {}
const _: () =
if !(core::mem::size_of::<u16>() <= core::mem::size_of::<usize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u16 to usize because u16 is larger than usize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<usize> for u16 {
#[inline]
fn extend(self) -> usize { self as _ }
}
impl sealed::WidenTargetSealed<usize> for u16 {
#[inline]
fn widen(self) -> usize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<usize> for u16 { }
impl WidenTarget<usize> for u16 {}
const _: () =
if !(core::mem::size_of::<u32>() <= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u32 to u32 because u32 is larger than u32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u32> for u32 {
#[inline]
fn extend(self) -> u32 { self as _ }
}
impl sealed::WidenTargetSealed<u32> for u32 {
#[inline]
fn widen(self) -> u32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u32> for u32 { }
impl WidenTarget<u32> for u32 {}
const _: () =
if !(core::mem::size_of::<u32>() <= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u32 to u64 because u32 is larger than u64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u64> for u32 {
#[inline]
fn extend(self) -> u64 { self as _ }
}
impl sealed::WidenTargetSealed<u64> for u32 {
#[inline]
fn widen(self) -> u64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u64> for u32 { }
impl WidenTarget<u64> for u32 {}
const _: () =
if !(core::mem::size_of::<u32>() <= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u32 to u128 because u32 is larger than u128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u128> for u32 {
#[inline]
fn extend(self) -> u128 { self as _ }
}
impl sealed::WidenTargetSealed<u128> for u32 {
#[inline]
fn widen(self) -> u128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u128> for u32 { }
impl WidenTarget<u128> for u32 {}
const _: () =
if !(core::mem::size_of::<u64>() <= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u64 to u64 because u64 is larger than u64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u64> for u64 {
#[inline]
fn extend(self) -> u64 { self as _ }
}
impl sealed::WidenTargetSealed<u64> for u64 {
#[inline]
fn widen(self) -> u64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u64> for u64 { }
impl WidenTarget<u64> for u64 {}
const _: () =
if !(core::mem::size_of::<u64>() <= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u64 to u128 because u64 is larger than u128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u128> for u64 {
#[inline]
fn extend(self) -> u128 { self as _ }
}
impl sealed::WidenTargetSealed<u128> for u64 {
#[inline]
fn widen(self) -> u128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u128> for u64 { }
impl WidenTarget<u128> for u64 {}
const _: () =
if !(core::mem::size_of::<u128>() <= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen u128 to u128 because u128 is larger than u128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<u128> for u128 {
#[inline]
fn extend(self) -> u128 { self as _ }
}
impl sealed::WidenTargetSealed<u128> for u128 {
#[inline]
fn widen(self) -> u128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<u128> for u128 { }
impl WidenTarget<u128> for u128 {}
const _: () =
if !(core::mem::size_of::<usize>() <= core::mem::size_of::<usize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen usize to usize because usize is larger than usize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<usize> for usize {
#[inline]
fn extend(self) -> usize { self as _ }
}
impl sealed::WidenTargetSealed<usize> for usize {
#[inline]
fn widen(self) -> usize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<usize> for usize { }
impl WidenTarget<usize> for usize {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to i8 because i8 is larger than i8"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i8> for i8 {
#[inline]
fn extend(self) -> i8 { self as _ }
}
impl sealed::WidenTargetSealed<i8> for i8 {
#[inline]
fn widen(self) -> i8 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i8> for i8 { }
impl WidenTarget<i8> for i8 {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to i16 because i8 is larger than i16"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i16> for i8 {
#[inline]
fn extend(self) -> i16 { self as _ }
}
impl sealed::WidenTargetSealed<i16> for i8 {
#[inline]
fn widen(self) -> i16 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i16> for i8 { }
impl WidenTarget<i16> for i8 {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to i32 because i8 is larger than i32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i32> for i8 {
#[inline]
fn extend(self) -> i32 { self as _ }
}
impl sealed::WidenTargetSealed<i32> for i8 {
#[inline]
fn widen(self) -> i32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i32> for i8 { }
impl WidenTarget<i32> for i8 {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to i64 because i8 is larger than i64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i64> for i8 {
#[inline]
fn extend(self) -> i64 { self as _ }
}
impl sealed::WidenTargetSealed<i64> for i8 {
#[inline]
fn widen(self) -> i64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i64> for i8 { }
impl WidenTarget<i64> for i8 {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to i128 because i8 is larger than i128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i128> for i8 {
#[inline]
fn extend(self) -> i128 { self as _ }
}
impl sealed::WidenTargetSealed<i128> for i8 {
#[inline]
fn widen(self) -> i128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i128> for i8 { }
impl WidenTarget<i128> for i8 {}
const _: () =
if !(core::mem::size_of::<i8>() <= core::mem::size_of::<isize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i8 to isize because i8 is larger than isize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<isize> for i8 {
#[inline]
fn extend(self) -> isize { self as _ }
}
impl sealed::WidenTargetSealed<isize> for i8 {
#[inline]
fn widen(self) -> isize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<isize> for i8 { }
impl WidenTarget<isize> for i8 {}
const _: () =
if !(core::mem::size_of::<i16>() <= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i16 to i16 because i16 is larger than i16"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i16> for i16 {
#[inline]
fn extend(self) -> i16 { self as _ }
}
impl sealed::WidenTargetSealed<i16> for i16 {
#[inline]
fn widen(self) -> i16 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i16> for i16 { }
impl WidenTarget<i16> for i16 {}
const _: () =
if !(core::mem::size_of::<i16>() <= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i16 to i32 because i16 is larger than i32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i32> for i16 {
#[inline]
fn extend(self) -> i32 { self as _ }
}
impl sealed::WidenTargetSealed<i32> for i16 {
#[inline]
fn widen(self) -> i32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i32> for i16 { }
impl WidenTarget<i32> for i16 {}
const _: () =
if !(core::mem::size_of::<i16>() <= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i16 to i64 because i16 is larger than i64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i64> for i16 {
#[inline]
fn extend(self) -> i64 { self as _ }
}
impl sealed::WidenTargetSealed<i64> for i16 {
#[inline]
fn widen(self) -> i64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i64> for i16 { }
impl WidenTarget<i64> for i16 {}
const _: () =
if !(core::mem::size_of::<i16>() <= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i16 to i128 because i16 is larger than i128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i128> for i16 {
#[inline]
fn extend(self) -> i128 { self as _ }
}
impl sealed::WidenTargetSealed<i128> for i16 {
#[inline]
fn widen(self) -> i128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i128> for i16 { }
impl WidenTarget<i128> for i16 {}
const _: () =
if !(core::mem::size_of::<i16>() <= core::mem::size_of::<isize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i16 to isize because i16 is larger than isize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<isize> for i16 {
#[inline]
fn extend(self) -> isize { self as _ }
}
impl sealed::WidenTargetSealed<isize> for i16 {
#[inline]
fn widen(self) -> isize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<isize> for i16 { }
impl WidenTarget<isize> for i16 {}
const _: () =
if !(core::mem::size_of::<i32>() <= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i32 to i32 because i32 is larger than i32"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i32> for i32 {
#[inline]
fn extend(self) -> i32 { self as _ }
}
impl sealed::WidenTargetSealed<i32> for i32 {
#[inline]
fn widen(self) -> i32 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i32> for i32 { }
impl WidenTarget<i32> for i32 {}
const _: () =
if !(core::mem::size_of::<i32>() <= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i32 to i64 because i32 is larger than i64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i64> for i32 {
#[inline]
fn extend(self) -> i64 { self as _ }
}
impl sealed::WidenTargetSealed<i64> for i32 {
#[inline]
fn widen(self) -> i64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i64> for i32 { }
impl WidenTarget<i64> for i32 {}
const _: () =
if !(core::mem::size_of::<i32>() <= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i32 to i128 because i32 is larger than i128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i128> for i32 {
#[inline]
fn extend(self) -> i128 { self as _ }
}
impl sealed::WidenTargetSealed<i128> for i32 {
#[inline]
fn widen(self) -> i128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i128> for i32 { }
impl WidenTarget<i128> for i32 {}
const _: () =
if !(core::mem::size_of::<i64>() <= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i64 to i64 because i64 is larger than i64"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i64> for i64 {
#[inline]
fn extend(self) -> i64 { self as _ }
}
impl sealed::WidenTargetSealed<i64> for i64 {
#[inline]
fn widen(self) -> i64 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i64> for i64 { }
impl WidenTarget<i64> for i64 {}
const _: () =
if !(core::mem::size_of::<i64>() <= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i64 to i128 because i64 is larger than i128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i128> for i64 {
#[inline]
fn extend(self) -> i128 { self as _ }
}
impl sealed::WidenTargetSealed<i128> for i64 {
#[inline]
fn widen(self) -> i128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i128> for i64 { }
impl WidenTarget<i128> for i64 {}
const _: () =
if !(core::mem::size_of::<i128>() <= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen i128 to i128 because i128 is larger than i128"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<i128> for i128 {
#[inline]
fn extend(self) -> i128 { self as _ }
}
impl sealed::WidenTargetSealed<i128> for i128 {
#[inline]
fn widen(self) -> i128 { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<i128> for i128 { }
impl WidenTarget<i128> for i128 {}
const _: () =
if !(core::mem::size_of::<isize>() <= core::mem::size_of::<isize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot widen isize to isize because isize is larger than isize"));
}
};
#[allow(deprecated)]
impl sealed::ExtendTargetSealed<isize> for isize {
#[inline]
fn extend(self) -> isize { self as _ }
}
impl sealed::WidenTargetSealed<isize> for isize {
#[inline]
fn widen(self) -> isize { self as _ }
}
#[allow(deprecated)]
impl ExtendTarget<isize> for isize { }
impl WidenTarget<isize> for isize {}impl_widen! {
325 u8 => u8, u16, u32, u64, u128, usize;
326 u16 => u16, u32, u64, u128, usize;
327 u32 => u32, u64, u128;
328 u64 => u64, u128;
329 u128 => u128;
330 usize => usize;
331
332 i8 => i8, i16, i32, i64, i128, isize;
333 i16 => i16, i32, i64, i128, isize;
334 i32 => i32, i64, i128;
335 i64 => i64, i128;
336 i128 => i128;
337 isize => isize;
338}
339
340const _: () =
if !(core::mem::size_of::<u8>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u8 to u8 because u8 is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for u8 {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for u8 {}
const _: () =
if !(core::mem::size_of::<u16>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u16 to u8 because u16 is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for u16 {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for u16 {}
const _: () =
if !(core::mem::size_of::<u32>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u32 to u8 because u32 is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for u32 {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for u32 {}
const _: () =
if !(core::mem::size_of::<u64>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u64 to u8 because u64 is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for u64 {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for u64 {}
const _: () =
if !(core::mem::size_of::<u128>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u128 to u8 because u128 is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for u128 {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for u128 {}
const _: () =
if !(core::mem::size_of::<usize>() >= core::mem::size_of::<u8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate usize to u8 because usize is smaller than u8"));
}
};
impl sealed::TruncateTargetSealed<u8> for usize {
#[inline]
fn truncate(self) -> u8 { self as _ }
#[inline]
fn saturating_truncate(self) -> u8 {
if self > <u8>::MAX as _ {
<u8>::MAX
} else if self < <u8>::MIN as _ { <u8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u8> {
if self > <u8>::MAX as _ || self < <u8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u8> for usize {}
const _: () =
if !(core::mem::size_of::<u16>() >= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u16 to u16 because u16 is smaller than u16"));
}
};
impl sealed::TruncateTargetSealed<u16> for u16 {
#[inline]
fn truncate(self) -> u16 { self as _ }
#[inline]
fn saturating_truncate(self) -> u16 {
if self > <u16>::MAX as _ {
<u16>::MAX
} else if self < <u16>::MIN as _ { <u16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u16> {
if self > <u16>::MAX as _ || self < <u16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u16> for u16 {}
const _: () =
if !(core::mem::size_of::<u32>() >= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u32 to u16 because u32 is smaller than u16"));
}
};
impl sealed::TruncateTargetSealed<u16> for u32 {
#[inline]
fn truncate(self) -> u16 { self as _ }
#[inline]
fn saturating_truncate(self) -> u16 {
if self > <u16>::MAX as _ {
<u16>::MAX
} else if self < <u16>::MIN as _ { <u16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u16> {
if self > <u16>::MAX as _ || self < <u16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u16> for u32 {}
const _: () =
if !(core::mem::size_of::<u64>() >= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u64 to u16 because u64 is smaller than u16"));
}
};
impl sealed::TruncateTargetSealed<u16> for u64 {
#[inline]
fn truncate(self) -> u16 { self as _ }
#[inline]
fn saturating_truncate(self) -> u16 {
if self > <u16>::MAX as _ {
<u16>::MAX
} else if self < <u16>::MIN as _ { <u16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u16> {
if self > <u16>::MAX as _ || self < <u16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u16> for u64 {}
const _: () =
if !(core::mem::size_of::<u128>() >= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u128 to u16 because u128 is smaller than u16"));
}
};
impl sealed::TruncateTargetSealed<u16> for u128 {
#[inline]
fn truncate(self) -> u16 { self as _ }
#[inline]
fn saturating_truncate(self) -> u16 {
if self > <u16>::MAX as _ {
<u16>::MAX
} else if self < <u16>::MIN as _ { <u16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u16> {
if self > <u16>::MAX as _ || self < <u16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u16> for u128 {}
const _: () =
if !(core::mem::size_of::<usize>() >= core::mem::size_of::<u16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate usize to u16 because usize is smaller than u16"));
}
};
impl sealed::TruncateTargetSealed<u16> for usize {
#[inline]
fn truncate(self) -> u16 { self as _ }
#[inline]
fn saturating_truncate(self) -> u16 {
if self > <u16>::MAX as _ {
<u16>::MAX
} else if self < <u16>::MIN as _ { <u16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u16> {
if self > <u16>::MAX as _ || self < <u16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u16> for usize {}
const _: () =
if !(core::mem::size_of::<u32>() >= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u32 to u32 because u32 is smaller than u32"));
}
};
impl sealed::TruncateTargetSealed<u32> for u32 {
#[inline]
fn truncate(self) -> u32 { self as _ }
#[inline]
fn saturating_truncate(self) -> u32 {
if self > <u32>::MAX as _ {
<u32>::MAX
} else if self < <u32>::MIN as _ { <u32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u32> {
if self > <u32>::MAX as _ || self < <u32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u32> for u32 {}
const _: () =
if !(core::mem::size_of::<u64>() >= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u64 to u32 because u64 is smaller than u32"));
}
};
impl sealed::TruncateTargetSealed<u32> for u64 {
#[inline]
fn truncate(self) -> u32 { self as _ }
#[inline]
fn saturating_truncate(self) -> u32 {
if self > <u32>::MAX as _ {
<u32>::MAX
} else if self < <u32>::MIN as _ { <u32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u32> {
if self > <u32>::MAX as _ || self < <u32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u32> for u64 {}
const _: () =
if !(core::mem::size_of::<u128>() >= core::mem::size_of::<u32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u128 to u32 because u128 is smaller than u32"));
}
};
impl sealed::TruncateTargetSealed<u32> for u128 {
#[inline]
fn truncate(self) -> u32 { self as _ }
#[inline]
fn saturating_truncate(self) -> u32 {
if self > <u32>::MAX as _ {
<u32>::MAX
} else if self < <u32>::MIN as _ { <u32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u32> {
if self > <u32>::MAX as _ || self < <u32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u32> for u128 {}
const _: () =
if !(core::mem::size_of::<u64>() >= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u64 to u64 because u64 is smaller than u64"));
}
};
impl sealed::TruncateTargetSealed<u64> for u64 {
#[inline]
fn truncate(self) -> u64 { self as _ }
#[inline]
fn saturating_truncate(self) -> u64 {
if self > <u64>::MAX as _ {
<u64>::MAX
} else if self < <u64>::MIN as _ { <u64>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u64> {
if self > <u64>::MAX as _ || self < <u64>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u64> for u64 {}
const _: () =
if !(core::mem::size_of::<u128>() >= core::mem::size_of::<u64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u128 to u64 because u128 is smaller than u64"));
}
};
impl sealed::TruncateTargetSealed<u64> for u128 {
#[inline]
fn truncate(self) -> u64 { self as _ }
#[inline]
fn saturating_truncate(self) -> u64 {
if self > <u64>::MAX as _ {
<u64>::MAX
} else if self < <u64>::MIN as _ { <u64>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u64> {
if self > <u64>::MAX as _ || self < <u64>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u64> for u128 {}
const _: () =
if !(core::mem::size_of::<u128>() >= core::mem::size_of::<u128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate u128 to u128 because u128 is smaller than u128"));
}
};
impl sealed::TruncateTargetSealed<u128> for u128 {
#[inline]
fn truncate(self) -> u128 { self as _ }
#[inline]
fn saturating_truncate(self) -> u128 {
if self > <u128>::MAX as _ {
<u128>::MAX
} else if self < <u128>::MIN as _ { <u128>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<u128> {
if self > <u128>::MAX as _ || self < <u128>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<u128> for u128 {}
const _: () =
if !(core::mem::size_of::<usize>() >= core::mem::size_of::<usize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate usize to usize because usize is smaller than usize"));
}
};
impl sealed::TruncateTargetSealed<usize> for usize {
#[inline]
fn truncate(self) -> usize { self as _ }
#[inline]
fn saturating_truncate(self) -> usize {
if self > <usize>::MAX as _ {
<usize>::MAX
} else if self < <usize>::MIN as _ { <usize>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<usize> {
if self > <usize>::MAX as _ || self < <usize>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<usize> for usize {}
const _: () =
if !(core::mem::size_of::<i8>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i8 to i8 because i8 is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for i8 {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for i8 {}
const _: () =
if !(core::mem::size_of::<i16>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i16 to i8 because i16 is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for i16 {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for i16 {}
const _: () =
if !(core::mem::size_of::<i32>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i32 to i8 because i32 is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for i32 {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for i32 {}
const _: () =
if !(core::mem::size_of::<i64>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i64 to i8 because i64 is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for i64 {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for i64 {}
const _: () =
if !(core::mem::size_of::<i128>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i128 to i8 because i128 is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for i128 {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for i128 {}
const _: () =
if !(core::mem::size_of::<isize>() >= core::mem::size_of::<i8>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate isize to i8 because isize is smaller than i8"));
}
};
impl sealed::TruncateTargetSealed<i8> for isize {
#[inline]
fn truncate(self) -> i8 { self as _ }
#[inline]
fn saturating_truncate(self) -> i8 {
if self > <i8>::MAX as _ {
<i8>::MAX
} else if self < <i8>::MIN as _ { <i8>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i8> {
if self > <i8>::MAX as _ || self < <i8>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i8> for isize {}
const _: () =
if !(core::mem::size_of::<i16>() >= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i16 to i16 because i16 is smaller than i16"));
}
};
impl sealed::TruncateTargetSealed<i16> for i16 {
#[inline]
fn truncate(self) -> i16 { self as _ }
#[inline]
fn saturating_truncate(self) -> i16 {
if self > <i16>::MAX as _ {
<i16>::MAX
} else if self < <i16>::MIN as _ { <i16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i16> {
if self > <i16>::MAX as _ || self < <i16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i16> for i16 {}
const _: () =
if !(core::mem::size_of::<i32>() >= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i32 to i16 because i32 is smaller than i16"));
}
};
impl sealed::TruncateTargetSealed<i16> for i32 {
#[inline]
fn truncate(self) -> i16 { self as _ }
#[inline]
fn saturating_truncate(self) -> i16 {
if self > <i16>::MAX as _ {
<i16>::MAX
} else if self < <i16>::MIN as _ { <i16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i16> {
if self > <i16>::MAX as _ || self < <i16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i16> for i32 {}
const _: () =
if !(core::mem::size_of::<i64>() >= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i64 to i16 because i64 is smaller than i16"));
}
};
impl sealed::TruncateTargetSealed<i16> for i64 {
#[inline]
fn truncate(self) -> i16 { self as _ }
#[inline]
fn saturating_truncate(self) -> i16 {
if self > <i16>::MAX as _ {
<i16>::MAX
} else if self < <i16>::MIN as _ { <i16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i16> {
if self > <i16>::MAX as _ || self < <i16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i16> for i64 {}
const _: () =
if !(core::mem::size_of::<i128>() >= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i128 to i16 because i128 is smaller than i16"));
}
};
impl sealed::TruncateTargetSealed<i16> for i128 {
#[inline]
fn truncate(self) -> i16 { self as _ }
#[inline]
fn saturating_truncate(self) -> i16 {
if self > <i16>::MAX as _ {
<i16>::MAX
} else if self < <i16>::MIN as _ { <i16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i16> {
if self > <i16>::MAX as _ || self < <i16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i16> for i128 {}
const _: () =
if !(core::mem::size_of::<isize>() >= core::mem::size_of::<i16>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate isize to i16 because isize is smaller than i16"));
}
};
impl sealed::TruncateTargetSealed<i16> for isize {
#[inline]
fn truncate(self) -> i16 { self as _ }
#[inline]
fn saturating_truncate(self) -> i16 {
if self > <i16>::MAX as _ {
<i16>::MAX
} else if self < <i16>::MIN as _ { <i16>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i16> {
if self > <i16>::MAX as _ || self < <i16>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i16> for isize {}
const _: () =
if !(core::mem::size_of::<i32>() >= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i32 to i32 because i32 is smaller than i32"));
}
};
impl sealed::TruncateTargetSealed<i32> for i32 {
#[inline]
fn truncate(self) -> i32 { self as _ }
#[inline]
fn saturating_truncate(self) -> i32 {
if self > <i32>::MAX as _ {
<i32>::MAX
} else if self < <i32>::MIN as _ { <i32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i32> {
if self > <i32>::MAX as _ || self < <i32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i32> for i32 {}
const _: () =
if !(core::mem::size_of::<i64>() >= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i64 to i32 because i64 is smaller than i32"));
}
};
impl sealed::TruncateTargetSealed<i32> for i64 {
#[inline]
fn truncate(self) -> i32 { self as _ }
#[inline]
fn saturating_truncate(self) -> i32 {
if self > <i32>::MAX as _ {
<i32>::MAX
} else if self < <i32>::MIN as _ { <i32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i32> {
if self > <i32>::MAX as _ || self < <i32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i32> for i64 {}
const _: () =
if !(core::mem::size_of::<i128>() >= core::mem::size_of::<i32>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i128 to i32 because i128 is smaller than i32"));
}
};
impl sealed::TruncateTargetSealed<i32> for i128 {
#[inline]
fn truncate(self) -> i32 { self as _ }
#[inline]
fn saturating_truncate(self) -> i32 {
if self > <i32>::MAX as _ {
<i32>::MAX
} else if self < <i32>::MIN as _ { <i32>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i32> {
if self > <i32>::MAX as _ || self < <i32>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i32> for i128 {}
const _: () =
if !(core::mem::size_of::<i64>() >= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i64 to i64 because i64 is smaller than i64"));
}
};
impl sealed::TruncateTargetSealed<i64> for i64 {
#[inline]
fn truncate(self) -> i64 { self as _ }
#[inline]
fn saturating_truncate(self) -> i64 {
if self > <i64>::MAX as _ {
<i64>::MAX
} else if self < <i64>::MIN as _ { <i64>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i64> {
if self > <i64>::MAX as _ || self < <i64>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i64> for i64 {}
const _: () =
if !(core::mem::size_of::<i128>() >= core::mem::size_of::<i64>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i128 to i64 because i128 is smaller than i64"));
}
};
impl sealed::TruncateTargetSealed<i64> for i128 {
#[inline]
fn truncate(self) -> i64 { self as _ }
#[inline]
fn saturating_truncate(self) -> i64 {
if self > <i64>::MAX as _ {
<i64>::MAX
} else if self < <i64>::MIN as _ { <i64>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i64> {
if self > <i64>::MAX as _ || self < <i64>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i64> for i128 {}
const _: () =
if !(core::mem::size_of::<i128>() >= core::mem::size_of::<i128>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate i128 to i128 because i128 is smaller than i128"));
}
};
impl sealed::TruncateTargetSealed<i128> for i128 {
#[inline]
fn truncate(self) -> i128 { self as _ }
#[inline]
fn saturating_truncate(self) -> i128 {
if self > <i128>::MAX as _ {
<i128>::MAX
} else if self < <i128>::MIN as _ { <i128>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<i128> {
if self > <i128>::MAX as _ || self < <i128>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<i128> for i128 {}
const _: () =
if !(core::mem::size_of::<isize>() >= core::mem::size_of::<isize>()) {
{
::core::panicking::panic_fmt(format_args!("cannot truncate isize to isize because isize is smaller than isize"));
}
};
impl sealed::TruncateTargetSealed<isize> for isize {
#[inline]
fn truncate(self) -> isize { self as _ }
#[inline]
fn saturating_truncate(self) -> isize {
if self > <isize>::MAX as _ {
<isize>::MAX
} else if self < <isize>::MIN as _ { <isize>::MIN } else { self as _ }
}
#[inline]
fn checked_truncate(self) -> Option<isize> {
if self > <isize>::MAX as _ || self < <isize>::MIN as _ {
None
} else { Some(self as _) }
}
}
impl TruncateTarget<isize> for isize {}impl_truncate! {
341 u8, u16, u32, u64, u128, usize => u8;
342 u16, u32, u64, u128, usize => u16;
343 u32, u64, u128 => u32;
344 u64, u128 => u64;
345 u128 => u128;
346 usize => usize;
347
348 i8, i16, i32, i64, i128, isize => i8;
349 i16, i32, i64, i128, isize => i16;
350 i32, i64, i128 => i32;
351 i64, i128 => i64;
352 i128 => i128;
353 isize => isize;
354}