Skip to content

Kixunil/hex_lit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 easier auditing. However, because of the use of const fn the crate has some limitations depending on the Rust version.

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 runtime allocations.

The crate is no_std and does not require an allocator.

Usage

Just pass a &str constant (usually a literal) into the hex macro.

Example

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)

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.

License

MITNFA

About

Rust hex literal without proc macros

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages