|0.1.1||Aug 13, 2022|
|0.1.0||Aug 13, 2022|
#631 in Encoding
61,160 downloads per month
Used in 87 crates (5 directly)
Hex literals without proc macros.
This crate implements minimalistic hex literal macros without use of proc macros.
The advantages are much faster compile times, ability to work with non-literal const values and
However, because of the use of
const fn the crate has some limitations depending on the Rust
Either way, the resulting type is a byte array (
[u8; N]) that doesn't force you to write down
its length. This is already very useful since the compiler can prove the length and you avoid
The crate is
no_std and does not require an allocator.
Just pass a
&str constant (usually a literal) into the hex macro.
use hex_lit::hex; let array = hex!("2a15ff"); assert_eq!(&array, &[42, 21, 255]);
The input MUST NOT contain any spaces or other separators and it MUST have even length. Note that you can still separate long strings into chunks using the concat macro:
use hex_lit::hex; let array = hex!(concat!( "0000002a000000", "ffffffffffffff", )); assert_eq!(&array, &[0, 0, 0, 42, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255]);
Features depending on Rust version
- 1.41.1+ - the MSRV, use in const contexts is impossible, only the hex! macro is available.
- 1.46.0+ - usage in const contexts is available and (regardless of cargo features) correctness of input is checked at compile time.
- 1.57+ - nicer error messages for bad inputs (regardless of cargo features)
rust_v_1_46- acknowledges bumping MSRV to 1.46+ and enables usage in const context.
Bumping MSRV is intentionally explicit.
Because of improved input checking it is recommended to use Rust 1.46+, prefereably 1.57+ in CI even if your targeted MSRV is lower.