Skip to main content

Truncate

Trait Truncate 

Source
pub trait Truncate: Integer {
    // Required methods
    fn truncate<T>(self) -> T
       where Self: TruncateTarget<T>;
    fn saturating_truncate<T>(self) -> T
       where Self: TruncateTarget<T>;
    fn checked_truncate<T>(self) -> Option<T>
       where Self: TruncateTarget<T>;
}
Expand description

Truncate to an integer of the same size or smaller.

Preserve the least significant bits with .truncate():

assert_eq!(u16::MAX.truncate::<u8>(), u8::MAX);
assert_eq!(u32::MAX.truncate::<u16>(), u16::MAX);
assert_eq!(u64::MAX.truncate::<u32>(), u32::MAX);
assert_eq!(u128::MAX.truncate::<u64>(), u64::MAX);
assert_eq!((-1_i16).truncate::<i8>(), -1_i8);
assert_eq!((-1_i32).truncate::<i16>(), -1_i16);
assert_eq!((-1_i64).truncate::<i32>(), -1_i32);
assert_eq!((-1_i128).truncate::<i64>(), -1_i64);

Saturate to the numeric bounds with .saturating_truncate():

assert_eq!(500_u16.saturating_truncate::<u8>(), u8::MAX);
assert_eq!(u32::MAX.saturating_truncate::<u16>(), u16::MAX);
assert_eq!(u64::MAX.saturating_truncate::<u32>(), u32::MAX);
assert_eq!(u128::MAX.saturating_truncate::<u64>(), u64::MAX);
assert_eq!((-500_i16).saturating_truncate::<i8>(), i8::MIN);
assert_eq!(i32::MIN.saturating_truncate::<i16>(), i16::MIN);
assert_eq!(i64::MIN.saturating_truncate::<i32>(), i32::MIN);
assert_eq!(i128::MIN.saturating_truncate::<i64>(), i64::MIN);

Checked with .checked_truncate(), returning None if the value is out of range:

assert_eq!(u16::MAX.checked_truncate::<u8>(), None);
assert_eq!(u32::MAX.checked_truncate::<u16>(), None);
assert_eq!(u64::MAX.checked_truncate::<u32>(), None);
assert_eq!(u128::MAX.checked_truncate::<u64>(), None);
assert_eq!(i16::MIN.checked_truncate::<i8>(), None);
assert_eq!(i32::MIN.checked_truncate::<i16>(), None);
assert_eq!(i64::MIN.checked_truncate::<i32>(), None);
assert_eq!(i128::MIN.checked_truncate::<i64>(), None);

Required Methods§

Source

fn truncate<T>(self) -> T
where Self: TruncateTarget<T>,

Truncate an integer to an integer of the same size or smaller, preserving the least significant bits.

Source

fn saturating_truncate<T>(self) -> T
where Self: TruncateTarget<T>,

Truncate an integer to an integer of the same size or smaller, saturating to the numeric bounds instead of wrapping.

Source

fn checked_truncate<T>(self) -> Option<T>
where Self: TruncateTarget<T>,

Truncate an integer to an integer of the same size or smaller, returning None if the value is out of range.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T: Integer> Truncate for T