PrimitiveNumberAs

Trait PrimitiveNumberAs 

Source
pub trait PrimitiveNumberAs<T> { }
Expand description

Trait for numeric conversions supported by the as keyword.

This is effectively the same as the type cast expression self as N, implemented for all combinations of PrimitiveNumber.

§Examples

PrimitiveNumberAs<{number}> is a supertrait of PrimitiveNumber for all primitive floats and integers, so you do not need to use this trait directly when converting concrete types.

use num_primitive::PrimitiveNumber;

// Clamp any number to the interval 0..=100, unless it is NaN.
fn clamp_percentage<Number: PrimitiveNumber>(x: Number) -> Number {
    let clamped = x.as_to::<f64>().clamp(0.0, 100.0);
    Number::as_from(clamped)
}

assert_eq!(clamp_percentage(-42_i8), 0_i8);
assert_eq!(clamp_percentage(42_u128), 42_u128);
assert_eq!(clamp_percentage(1e100_f64), 100_f64);
assert!(clamp_percentage(f32::NAN).is_nan());

However, if the other type is also generic, an explicit type constraint is needed.

use num_primitive::{PrimitiveNumber, PrimitiveNumberAs};

fn clamp_any<Number, Limit>(x: Number, min: Limit, max: Limit) -> Number
where
    Number: PrimitiveNumber + PrimitiveNumberAs<Limit>,
    Limit: PartialOrd,
{
    assert!(min <= max);
    let y = x.as_to::<Limit>();
    if y <= min {
        Number::as_from(min)
    } else if y >= max {
        Number::as_from(max)
    } else {
        x
    }
}

assert_eq!(clamp_any(1.23, 0_i8, 10_i8), 1.23);
assert_eq!(clamp_any(1.23, -1_i8, 1_i8), 1.0);
assert_eq!(clamp_any(i128::MAX, 0.0, 1e100), i128::MAX);

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.

Implementations on Foreign Types§

Source§

impl PrimitiveNumberAs<f32> for f32

Source§

impl PrimitiveNumberAs<f32> for f64

Source§

impl PrimitiveNumberAs<f32> for i8

Source§

impl PrimitiveNumberAs<f32> for i16

Source§

impl PrimitiveNumberAs<f32> for i32

Source§

impl PrimitiveNumberAs<f32> for i64

Source§

impl PrimitiveNumberAs<f32> for i128

Source§

impl PrimitiveNumberAs<f32> for isize

Source§

impl PrimitiveNumberAs<f32> for u8

Source§

impl PrimitiveNumberAs<f32> for u16

Source§

impl PrimitiveNumberAs<f32> for u32

Source§

impl PrimitiveNumberAs<f32> for u64

Source§

impl PrimitiveNumberAs<f32> for u128

Source§

impl PrimitiveNumberAs<f32> for usize

Source§

impl PrimitiveNumberAs<f64> for f32

Source§

impl PrimitiveNumberAs<f64> for f64

Source§

impl PrimitiveNumberAs<f64> for i8

Source§

impl PrimitiveNumberAs<f64> for i16

Source§

impl PrimitiveNumberAs<f64> for i32

Source§

impl PrimitiveNumberAs<f64> for i64

Source§

impl PrimitiveNumberAs<f64> for i128

Source§

impl PrimitiveNumberAs<f64> for isize

Source§

impl PrimitiveNumberAs<f64> for u8

Source§

impl PrimitiveNumberAs<f64> for u16

Source§

impl PrimitiveNumberAs<f64> for u32

Source§

impl PrimitiveNumberAs<f64> for u64

Source§

impl PrimitiveNumberAs<f64> for u128

Source§

impl PrimitiveNumberAs<f64> for usize

Source§

impl PrimitiveNumberAs<i8> for f32

Source§

impl PrimitiveNumberAs<i8> for f64

Source§

impl PrimitiveNumberAs<i8> for i8

Source§

impl PrimitiveNumberAs<i8> for i16

Source§

impl PrimitiveNumberAs<i8> for i32

Source§

impl PrimitiveNumberAs<i8> for i64

Source§

impl PrimitiveNumberAs<i8> for i128

Source§

impl PrimitiveNumberAs<i8> for isize

Source§

impl PrimitiveNumberAs<i8> for u8

Source§

impl PrimitiveNumberAs<i8> for u16

Source§

impl PrimitiveNumberAs<i8> for u32

Source§

impl PrimitiveNumberAs<i8> for u64

Source§

impl PrimitiveNumberAs<i8> for u128

Source§

impl PrimitiveNumberAs<i8> for usize

Source§

impl PrimitiveNumberAs<i16> for f32

Source§

impl PrimitiveNumberAs<i16> for f64

Source§

impl PrimitiveNumberAs<i16> for i8

Source§

impl PrimitiveNumberAs<i16> for i16

Source§

impl PrimitiveNumberAs<i16> for i32

Source§

impl PrimitiveNumberAs<i16> for i64

Source§

impl PrimitiveNumberAs<i16> for i128

Source§

impl PrimitiveNumberAs<i16> for isize

Source§

impl PrimitiveNumberAs<i16> for u8

Source§

impl PrimitiveNumberAs<i16> for u16

Source§

impl PrimitiveNumberAs<i16> for u32

Source§

impl PrimitiveNumberAs<i16> for u64

Source§

impl PrimitiveNumberAs<i16> for u128

Source§

impl PrimitiveNumberAs<i16> for usize

Source§

impl PrimitiveNumberAs<i32> for f32

Source§

impl PrimitiveNumberAs<i32> for f64

Source§

impl PrimitiveNumberAs<i32> for i8

Source§

impl PrimitiveNumberAs<i32> for i16

Source§

impl PrimitiveNumberAs<i32> for i32

Source§

impl PrimitiveNumberAs<i32> for i64

Source§

impl PrimitiveNumberAs<i32> for i128

Source§

impl PrimitiveNumberAs<i32> for isize

Source§

impl PrimitiveNumberAs<i32> for u8

Source§

impl PrimitiveNumberAs<i32> for u16

Source§

impl PrimitiveNumberAs<i32> for u32

Source§

impl PrimitiveNumberAs<i32> for u64

Source§

impl PrimitiveNumberAs<i32> for u128

Source§

impl PrimitiveNumberAs<i32> for usize

Source§

impl PrimitiveNumberAs<i64> for f32

Source§

impl PrimitiveNumberAs<i64> for f64

Source§

impl PrimitiveNumberAs<i64> for i8

Source§

impl PrimitiveNumberAs<i64> for i16

Source§

impl PrimitiveNumberAs<i64> for i32

Source§

impl PrimitiveNumberAs<i64> for i64

Source§

impl PrimitiveNumberAs<i64> for i128

Source§

impl PrimitiveNumberAs<i64> for isize

Source§

impl PrimitiveNumberAs<i64> for u8

Source§

impl PrimitiveNumberAs<i64> for u16

Source§

impl PrimitiveNumberAs<i64> for u32

Source§

impl PrimitiveNumberAs<i64> for u64

Source§

impl PrimitiveNumberAs<i64> for u128

Source§

impl PrimitiveNumberAs<i64> for usize

Source§

impl PrimitiveNumberAs<i128> for f32

Source§

impl PrimitiveNumberAs<i128> for f64

Source§

impl PrimitiveNumberAs<i128> for i8

Source§

impl PrimitiveNumberAs<i128> for i16

Source§

impl PrimitiveNumberAs<i128> for i32

Source§

impl PrimitiveNumberAs<i128> for i64

Source§

impl PrimitiveNumberAs<i128> for i128

Source§

impl PrimitiveNumberAs<i128> for isize

Source§

impl PrimitiveNumberAs<i128> for u8

Source§

impl PrimitiveNumberAs<i128> for u16

Source§

impl PrimitiveNumberAs<i128> for u32

Source§

impl PrimitiveNumberAs<i128> for u64

Source§

impl PrimitiveNumberAs<i128> for u128

Source§

impl PrimitiveNumberAs<i128> for usize

Source§

impl PrimitiveNumberAs<isize> for f32

Source§

impl PrimitiveNumberAs<isize> for f64

Source§

impl PrimitiveNumberAs<isize> for i8

Source§

impl PrimitiveNumberAs<isize> for i16

Source§

impl PrimitiveNumberAs<isize> for i32

Source§

impl PrimitiveNumberAs<isize> for i64

Source§

impl PrimitiveNumberAs<isize> for i128

Source§

impl PrimitiveNumberAs<isize> for isize

Source§

impl PrimitiveNumberAs<isize> for u8

Source§

impl PrimitiveNumberAs<isize> for u16

Source§

impl PrimitiveNumberAs<isize> for u32

Source§

impl PrimitiveNumberAs<isize> for u64

Source§

impl PrimitiveNumberAs<isize> for u128

Source§

impl PrimitiveNumberAs<isize> for usize

Source§

impl PrimitiveNumberAs<u8> for f32

Source§

impl PrimitiveNumberAs<u8> for f64

Source§

impl PrimitiveNumberAs<u8> for i8

Source§

impl PrimitiveNumberAs<u8> for i16

Source§

impl PrimitiveNumberAs<u8> for i32

Source§

impl PrimitiveNumberAs<u8> for i64

Source§

impl PrimitiveNumberAs<u8> for i128

Source§

impl PrimitiveNumberAs<u8> for isize

Source§

impl PrimitiveNumberAs<u8> for u8

Source§

impl PrimitiveNumberAs<u8> for u16

Source§

impl PrimitiveNumberAs<u8> for u32

Source§

impl PrimitiveNumberAs<u8> for u64

Source§

impl PrimitiveNumberAs<u8> for u128

Source§

impl PrimitiveNumberAs<u8> for usize

Source§

impl PrimitiveNumberAs<u16> for f32

Source§

impl PrimitiveNumberAs<u16> for f64

Source§

impl PrimitiveNumberAs<u16> for i8

Source§

impl PrimitiveNumberAs<u16> for i16

Source§

impl PrimitiveNumberAs<u16> for i32

Source§

impl PrimitiveNumberAs<u16> for i64

Source§

impl PrimitiveNumberAs<u16> for i128

Source§

impl PrimitiveNumberAs<u16> for isize

Source§

impl PrimitiveNumberAs<u16> for u8

Source§

impl PrimitiveNumberAs<u16> for u16

Source§

impl PrimitiveNumberAs<u16> for u32

Source§

impl PrimitiveNumberAs<u16> for u64

Source§

impl PrimitiveNumberAs<u16> for u128

Source§

impl PrimitiveNumberAs<u16> for usize

Source§

impl PrimitiveNumberAs<u32> for f32

Source§

impl PrimitiveNumberAs<u32> for f64

Source§

impl PrimitiveNumberAs<u32> for i8

Source§

impl PrimitiveNumberAs<u32> for i16

Source§

impl PrimitiveNumberAs<u32> for i32

Source§

impl PrimitiveNumberAs<u32> for i64

Source§

impl PrimitiveNumberAs<u32> for i128

Source§

impl PrimitiveNumberAs<u32> for isize

Source§

impl PrimitiveNumberAs<u32> for u8

Source§

impl PrimitiveNumberAs<u32> for u16

Source§

impl PrimitiveNumberAs<u32> for u32

Source§

impl PrimitiveNumberAs<u32> for u64

Source§

impl PrimitiveNumberAs<u32> for u128

Source§

impl PrimitiveNumberAs<u32> for usize

Source§

impl PrimitiveNumberAs<u64> for f32

Source§

impl PrimitiveNumberAs<u64> for f64

Source§

impl PrimitiveNumberAs<u64> for i8

Source§

impl PrimitiveNumberAs<u64> for i16

Source§

impl PrimitiveNumberAs<u64> for i32

Source§

impl PrimitiveNumberAs<u64> for i64

Source§

impl PrimitiveNumberAs<u64> for i128

Source§

impl PrimitiveNumberAs<u64> for isize

Source§

impl PrimitiveNumberAs<u64> for u8

Source§

impl PrimitiveNumberAs<u64> for u16

Source§

impl PrimitiveNumberAs<u64> for u32

Source§

impl PrimitiveNumberAs<u64> for u64

Source§

impl PrimitiveNumberAs<u64> for u128

Source§

impl PrimitiveNumberAs<u64> for usize

Source§

impl PrimitiveNumberAs<u128> for f32

Source§

impl PrimitiveNumberAs<u128> for f64

Source§

impl PrimitiveNumberAs<u128> for i8

Source§

impl PrimitiveNumberAs<u128> for i16

Source§

impl PrimitiveNumberAs<u128> for i32

Source§

impl PrimitiveNumberAs<u128> for i64

Source§

impl PrimitiveNumberAs<u128> for i128

Source§

impl PrimitiveNumberAs<u128> for isize

Source§

impl PrimitiveNumberAs<u128> for u8

Source§

impl PrimitiveNumberAs<u128> for u16

Source§

impl PrimitiveNumberAs<u128> for u32

Source§

impl PrimitiveNumberAs<u128> for u64

Source§

impl PrimitiveNumberAs<u128> for u128

Source§

impl PrimitiveNumberAs<u128> for usize

Source§

impl PrimitiveNumberAs<usize> for f32

Source§

impl PrimitiveNumberAs<usize> for f64

Source§

impl PrimitiveNumberAs<usize> for i8

Source§

impl PrimitiveNumberAs<usize> for i16

Source§

impl PrimitiveNumberAs<usize> for i32

Source§

impl PrimitiveNumberAs<usize> for i64

Source§

impl PrimitiveNumberAs<usize> for i128

Source§

impl PrimitiveNumberAs<usize> for isize

Source§

impl PrimitiveNumberAs<usize> for u8

Source§

impl PrimitiveNumberAs<usize> for u16

Source§

impl PrimitiveNumberAs<usize> for u32

Source§

impl PrimitiveNumberAs<usize> for u64

Source§

impl PrimitiveNumberAs<usize> for u128

Source§

impl PrimitiveNumberAs<usize> for usize

Implementors§