include_slice

Macro include_slice 

Source
macro_rules! include_slice {
    ($target_ty:ty, $file:expr $(,)?) => { ... };
}
Expand description

Include data from a file as static data, consisting of a slice of bytemuck::AnyBitPattern types.

For any type T: bytemuck::AnyBitPattern, include_slice!(T, path) will return a &'static [T] slice containing the contents of the file at path.

A compiler error will be thrown source file cannot fit evenly into a &[T] slice. That is, if the file size is not divisible by size_of::<T>(). The path is interpreted by core::include_bytes and is host-platform-specific. The interpretation of multi-byte sequences (e.g., a u32 which occupies 4 bytes) is according to the endianness of the target platform.

While include_slice!(u8, path) is supported, core::include_bytes should be preferred in almost every case as it is a compiler built-in.

§Why do I have to specify the type twice?

In order to ensure alignment, these macros internally create a static value with the same alignment as the target type, which the compiler copies the data into at compile-time. Since this is a static value, the type used for alignment must be explicitly specified and cannot be inferred.

§Example

static DATA_U32: &[u32] = include_slice!(u32, "../tests/test_data/binary_32");

§Safety

This macro is safe. However, if used on a custom type, that type must implement bytemuck::AnyBitPattern. Implementing that trait has very struct safety requirements which must be observed.