#numbers #primitive #from #into #as

no-std number-as

Extend primitive number types to make them have a number_as method

10 stable releases

1.0.10 Mar 18, 2022
1.0.9 Apr 21, 2021
1.0.7 Jul 29, 2020
1.0.5 Sep 17, 2019
1.0.2 Nov 14, 2018

#199 in No standard library

39 downloads per month
Used in sophon

MIT license

6KB
80 lines

Number As

CI

Use the trait NumberAs in the current scope to let all primitive number types have a number_as method.

use number_as::NumberAs;

let a: i32 = 2u16.number_as();

assert_eq!(2i32, a);

assert_eq!(2i32, 2u16.number_as());

assert_eq!(20i32, 20.6.number_as());

All implements for the NumberAs trait can be considered as a whole Primitive Number. If you want to design an add function, which accepts all kinds of primitive numbers, you can use the Number trait as a trait bound.

use number_as::{Number, NumberAs};

fn add<T, J, K>(a: T, b: J) -> K where T: Number, J: Number, K: Number, i128: NumberAs<K> {
    let a: i128 = a.number_as();
    let b: i128 = b.number_as();

    let c = a + b;

    c.number_as()
}

assert_eq!(40i32, add(5u8, 35i16));

Crates.io

https://crates.io/crates/number-as

Documentation

https://docs.rs/number-as

License

MIT

No runtime deps