#literals

macro bytify-impl

Internal implementation of the bytify crate

5 unstable releases

0.3.1 Feb 10, 2019
0.3.0 Feb 10, 2019
0.2.0 Dec 19, 2018
0.0.2 Mar 25, 2018
0.0.1 Mar 19, 2018

#147 in #literals

MIT license

16KB
328 lines

Bytification utilities

Build Status

This crate provides a simple macro that can take multiple const-expr values as an input and merge them all together into a continuous byte array at compile-time. Supports all primitive types and is #[no_std] compatible.

use bytify::bytify;

const CAKE: char = '🎂';

assert_eq!(bytify!("The ", CAKE, " is a lie!"), [
    b'T', b'h', b'e',
    b' ',
    0xF0, 0x9F, 0x8E, 0x82,
    b' ',
    b'i', b's',
    b' ',
    b'a',
    b' ',
    b'l', b'i', b'e',
    b'!',
]);

Supported types

All primitive types (as literals or any other const-expr values) as well as [u8; N] and &[u8] values.

  • Unsuffixed numbers are inferred to be i32 for integers and f64 for floats.
  • bool values are cast to u8.
  • UTF-8 encoding is used to write str and char values.

Endianness

bytify! always writes data using current target's native endianness. To switch to little/big endianness use bytify_le! or bytify_be! respectively.

use bytify::{bytify_be, bytify_le};

assert_eq!(bytify_le!(1), [0x01, 0x00, 0x00, 0x00]);
assert_eq!(bytify_be!(1), [0x00, 0x00, 0x00, 0x01]);

Constants and statics

use bytify::bytify;

bytify!(const NO_EVIL: '🙈', '🙉', '🙊');
assert_eq!(NO_EVIL, [0xF0, 0x9F, 0x99, 0x88, 0xF0, 0x9F, 0x99, 0x89, 0xF0, 0x9F, 0x99, 0x8A]);

Dependencies

~2MB
~51K SLoC