#byte-string #compiler-plugin #constant #compile-time #concat-bytes #literals #byte-size-of

已删除 bytestool

编译器插件:编译时 byte_size_of!(..) 和 concat_bytes!(..)

使用旧的 Rust 2015

0.3.0 2017年3月16日
0.2.0 2016年9月1日
0.1.0 2016年9月1日

#45 in #compiler-plugin


sizedbytes 中使用

Apache-2.0

11KB
221

rust-bytestool

用于处理常量字节表达式的编译器插件:连接字节字符串并计算字节字符串字面量的字节大小。

该编译器插件允许您处理字节(u8)数组并将它们组合,例如形成要发送到网络的常量消息。数组可能是不可变的,并在编译时形成。

示例:Cargo.toml 依赖关系

[dependencies]
bytestool = "0.3.0"

示例 src/main.rs:形成要发送到网络的常量消息

#![feature(asm)]
#![feature(plugin)]
#![plugin(bytestool)] // import macros byte_size_of and concat_bytes
#![feature(type_ascription)]

macro_rules! build_const_mesg {
    ($bstr1:expr, $bstr2:expr) => {{
            const LEN1 : usize = byte_size_of!($bstr1);
            const LEN2 : usize = byte_size_of!($bstr2);
            let result : &[u8; LEN1 + LEN2] = concat_bytes!($bstr1, $bstr2);
            result
    }};
}

fn send_hello()
{
   let mesg_hello = build_const_mesg!(b"HELLO", [23u8, 10u8, 10u8, 0u8] );

   // send out the byte message via network
}

fn send_bye()
{
   let mesg_bye   = build_const_mesg!(b"BYE",   [23u8, 10u8, 10u8, 0u8] );

   // send out the byte message via network
}

注意:字节字符串不以空字符终止。b"0123" 的字节大小将为 4(在 C 中,字符串 "0123" 的大小将为 5)。

这些宏可以在宏内部使用。

无运行时依赖