[go: up one dir, main page]

hex_lit 0.1.0

Hex macro literals without use of hex macros
docs.rs failed to build hex_lit-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: hex_lit-0.1.1

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