1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
//! Converts a sequence of arbitrary literal values into a single byte array at the compile time.
//!
//! List of supported literals:
//!
//! * UTF-8 characters (`'?'`) as well as UTF-8 strings (`"こんにちは世界"`).
//! * Integers, also negative and size-suffixed (`-99u32`).
//! * Non-suffixed integers are written in a form as small as possible.
//! * The little endian is used as a default endianness but could be changed build-wise by
//! enabling `default-big-endian` feature.
//! * It is possible to set endianness for a single literal using the "ascription"
//! syntax, e.g. `9000: LE` or `0x8u32: be`.
//! * Floats, also negative and size-suffixed (`-3.1415926f64`).
//! * Non-suffixed floats are written in a form as small as possible.
//! * The little endian is used as a default endianness but could be changed build-wise by
//! enabling `default-big-endian` feature.
//! * It is possible to set endianness for a single literal using the "ascription"
//! syntax, e.g. `0.2: LE` or `-15.92f64: be`.
//!
//! # Examples
//!
//! ```
//! #[macro_use]
//! extern crate bytify;
//!
//! fn main() {
//! assert_eq!(&bytify!(
//! "The 🎂 is a lie!",
//! 2948509150, -559038801: BE,
//! 0.36658e+8, -2583.1f64: le,
//! )[..], &[
//! 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'!',
//! 0xDE, 0xAD, 0xBE, 0xAF, 0xDE, 0xAD, 0xBE, 0xAF,
//! 0xD4, 0xD6, 0x0B, 0x4C, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2e, 0xa4, 0xc0,
//! ][..]);
//! }
//! ```
extern crate proc_macro_hack;
use proc_macro_hack::proc_macro_hack;
extern crate bytify_impl;
/// Converts a sequence of arbitrary literal values into a single byte array at the compile time.
///
/// List of supported literals:
///
/// * UTF-8 characters (`'?'`) as well as UTF-8 strings (`"こんにちは世界"`).
/// * Integers, also negative and size-suffixed (`-99u32`).
/// * Non-suffixed integers are written in a form as small as possible.
/// * The little endian is used as a default endianness but could be changed build-wise by
/// enabling `default-big-endian` feature.
/// * It is possible to set endianness for a single literal using the "ascription"
/// syntax, e.g. `9000: LE` or `0x8u32: be`.
/// * Floats, also negative and size-suffixed (`-3.1415926f64`).
/// * Non-suffixed floats are written in a form as small as possible.
/// * The little endian is used as a default endianness but could be changed build-wise by
/// enabling `default-big-endian` feature.
/// * It is possible to set endianness for a single literal using the "ascription"
/// syntax, e.g. `0.2: LE` or `-15.92f64: be`.
///
/// # Examples
///
/// ```
/// #[macro_use]
/// extern crate bytify;
///
/// fn main() {
/// assert_eq!(&bytify!(
/// "The 🎂 is a lie!",
/// 2948509150, -559038801: BE,
/// 0.36658e+8, -2583.1f64: le,
/// )[..], &[
/// 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'!',
/// 0xDE, 0xAD, 0xBE, 0xAF, 0xDE, 0xAD, 0xBE, 0xAF,
/// 0xD4, 0xD6, 0x0B, 0x4C, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2e, 0xa4, 0xc0,
/// ][..]);
/// }
/// ```
#[proc_macro_hack]
pub use bytify_impl::bytify;
/// The same macro as [`bytify`] but returns a slice, instead of array.
///
/// [`bytify`]: macro.bytify.html
#[macro_export]
macro_rules! bytify_ref {
($($items:expr ),*) => (&bytify!($($items),*)[..]);
($($items:expr,) *) => (&bytify!($($items),*)[..]);
}