Crates.io | hex_lit |
lib.rs | hex_lit |
version | 0.1.1 |
source | src |
created_at | 2022-08-13 18:02:30.078719 |
updated_at | 2022-08-13 18:29:44.810685 |
description | Hex macro literals without use of hex macros |
homepage | |
repository | https://github.com/Kixunil/hex_lit |
max_upload_size | |
id | 644967 |
size | 13,862 |
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.
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]);
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.
MITNFA