bn_rs/bignumber/
into.rs

1use primitive_types::{H128, H160, H256, H512, U128, U256, U512};
2
3use super::BigNumber;
4
5macro_rules! from {
6    ($type:ty) => {
7        impl From<$type> for BigNumber {
8            fn from(value: $type) -> Self {
9                BigNumber::new(format!("{:#x}", value))
10            }
11        }
12    };
13}
14
15from!(U128);
16from!(U256);
17from!(U512);
18from!(H128);
19from!(H160);
20from!(H256);
21from!(H512);
22from!(isize);
23from!(i8);
24from!(i16);
25from!(i32);
26from!(i64);
27from!(i128);
28from!(usize);
29from!(u8);
30from!(u16);
31from!(u32);
32from!(u64);
33from!(u128);
34
35#[cfg(test)]
36mod tests {
37    use primitive_types::{H256, U128, U256};
38    use wasm_bindgen_test::*;
39
40    use super::BigNumber;
41
42    #[wasm_bindgen_test]
43    fn primitive_uint() {
44        let value = U256::MAX - U256::from(U128::MAX);
45        let bignumber = BigNumber::from(value.clone());
46
47        assert_eq!(U256::try_from(bignumber).unwrap(), value);
48    }
49
50    #[wasm_bindgen_test]
51    fn primitive_hash() {
52        let value = H256::from(
53            <[u8; 32]>::try_from([[u8::MAX; 8], [0; 8], [0; 8], [u8::MAX; 8]].concat()).unwrap(),
54        );
55        let bignumber = BigNumber::from(value.clone());
56
57        assert_eq!(H256::try_from(bignumber).unwrap(), value);
58    }
59
60    #[wasm_bindgen_test]
61    fn std_uint() {
62        let value = u128::MAX - u64::MAX as u128;
63        let bignumber = BigNumber::from(value.clone());
64
65        assert_eq!(u128::try_from(bignumber).unwrap(), value);
66    }
67
68    #[wasm_bindgen_test]
69    fn std_int() {
70        let value = i128::MAX - i64::MAX as i128;
71        let bignumber = BigNumber::from(value.clone());
72
73        assert_eq!(i128::try_from(bignumber).unwrap(), value);
74    }
75}