#compile-time #file #macro #input #include-bytes #array #improved

macro include-bytes-plus

Improved include_bytes! allowing to reinterpret input differently

4 stable releases

1.1.0 Sep 22, 2023
1.0.3 Feb 10, 2022
1.0.1 Feb 9, 2022
1.0.0 Feb 3, 2022

#1979 in Procedural macros

Download history 6/week @ 2024-02-09 9/week @ 2024-02-16 16/week @ 2024-02-23 19/week @ 2024-03-01 30/week @ 2024-03-08 33/week @ 2024-03-15 13/week @ 2024-03-22 36/week @ 2024-03-29

115 downloads per month
Used in bunk

BSL-1.0 license

23KB
386 lines

include-bytes-plus

Crates.io Documentation Build

Improved version of Rust's include_bytes macro that allows to reinterpret input as differently typed array.

Due to inability to capture current file path in the stable Rust, this macro only accepts paths relative to crate's root.

Supported types:

  • Primitive fixed sized unsigned integers with optional endianness suffix;

  • Arrays with unsigned integers;

Usage:

use include_bytes_plus::include_bytes;

let bytes = include_bytes!("tests/include.in");
let bytes_u16 = include_bytes!("tests/include.in" as u16);
let bytes_u16_2 = include_bytes!("tests/include with whitespaces.in" as u16);
let bytes_u16_3 = include_bytes!("tests/include with whitespaces.in" as [u8; 48]);
let bytes_u16_4 = include_bytes!("tests/include with whitespaces.in" as [u16; 12]);
let bytes_u16be = include_bytes!("tests/include.in" as u16be);

assert_eq!(bytes.len(), bytes_u16.len() * 2);
assert_eq!(bytes.len(), bytes_u16.len() * 2);
assert_eq!(bytes.len(), bytes_u16_2.len() * 2);
assert_eq!(bytes_u16_3.len(), 1);
assert_eq!(bytes_u16_3[0].len(), 48);
assert_eq!(bytes_u16_4.len(), 2);
assert_eq!(bytes_u16_4[0].len(), 12);
assert_eq!(bytes_u16_4[1].len(), 12);
assert_eq!(bytes_u16be.len(), bytes_u16.len());

Debugging timings:

Set env variable RUST_INCLUDE_BYTES_LOG=1 to enable logging of each parsed file statistics

No runtime deps