#uint #macro

macro ruint2-macro

The uint! macro for Uint literals

2 stable releases

1.0.3 Jun 13, 2023

#32 in #uint

Download history 71/week @ 2023-10-29 86/week @ 2023-11-05 64/week @ 2023-11-12 83/week @ 2023-11-19 113/week @ 2023-11-26 95/week @ 2023-12-03 127/week @ 2023-12-10 168/week @ 2023-12-17 76/week @ 2023-12-24 85/week @ 2023-12-31 106/week @ 2024-01-07 124/week @ 2024-01-14 68/week @ 2024-01-21 45/week @ 2024-01-28 61/week @ 2024-02-04 103/week @ 2024-02-11

283 downloads per month
Used in 2 crates (via ruint2)

Custom license

13KB
210 lines

The uint! macro for Uint and Bits literals

Within the uint! macro arguments, you can write Uint and Bits literals using the same syntax as Rust integer literals, but using a capital U or B suffix respectively. Note that there is ambiguity for hexadecimals with a B suffix, to lessen the impact an underscore is required in this case.

To use it simply import it in scope:

use ruint2::uint;

Now constants can be created in decimal, hex, binary and even octal:

# use ruint2::uint;
let avogadro = uint!(602_214_076_000_000_000_000_000_U256);
let cow_key = uint!(0xee79b5f6e221356af78cf4c36f4f7885a11b67dfcc81c34d80249947330c0f82_U256);
let bender = uint!(0b1010011010_U10);

The uint! macro recurses through the parse tree, so the above can equivalently be written

# use ruint2::uint;
uint!{
let avogadro = 602_214_076_000_000_000_000_000_U256;
let cow_key = 0xee79b5f6e221356af78cf4c36f4f7885a11b67dfcc81c34d80249947330c0f82_U256;
let bender = 0b1010011010_U10;
}

This latter form is particularly useful for lookup tables:

# use ruint2::{Uint, uint};
const PRIMES: [Uint<128, 2>; 3] = uint!([
    170141183460469231731687303715884105757_U128,
    170141183460469231731687303715884105773_U128,
    170141183460469231731687303715884105793_U128,
]);

The macro will throw a compile time error if you try to create a constant that does not fit the type:

# use ruint2::uint;
# uint!{
let sparta = 300_U8;
# }
error: Value too large for Uint<8>: 300
 --> src/example.rs:1:14
  |
1 | let sparta = 300_U8;
  |              ^^^^^^

References

No runtime deps