#const #concat #expressions #byte-slice #variables #build

无 std constcat

支持 const 变量和表达式的 concat!

8 个版本 (4 个破坏性更改)

0.5.0 2024 年 2 月 29 日
0.4.1 2024 年 1 月 24 日
0.4.0 2023 年 11 月 3 日
0.3.1 2023 年 10 月 10 日
0.1.1 2022 年 3 月 30 日

#102 in Rust 模式

Download history 45519/week @ 2024-04-22 36317/week @ 2024-04-29 36118/week @ 2024-05-06 41133/week @ 2024-05-13 39639/week @ 2024-05-20 47276/week @ 2024-05-27 42262/week @ 2024-06-03 36406/week @ 2024-06-10 38260/week @ 2024-06-17 45265/week @ 2024-06-24 39070/week @ 2024-07-01 36902/week @ 2024-07-08 49868/week @ 2024-07-15 50285/week @ 2024-07-22 41361/week @ 2024-07-29 48084/week @ 2024-08-05

190,922 每月下载量
366 个crate中使用 (10 个直接使用)

MIT/Apache

14KB
97

constcat

Crates.io Version Docs.rs Latest Build Status

std::concat! 支持使用 const 变量和表达式。

在稳定版 Rust 中运行 ✨。

🚀 开始使用

constcat 添加到您的 Cargo 清单中。

cargo add constcat

使用以下方式导入宏。

use constcat::concat;

🤸 使用

字符串切片

concat!std::concat! 完全相同,将 &str 文本字面量连接成一个静态字符串切片,但现在您可以传递变量和常量表达式。

const CRATE_NAME: &str = env!("CARGO_PKG_NAME");
const CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");
const fn tada() -> &'static str { "🎉" }
const VERSION: &str = concat!(CRATE_NAME, " ", CRATE_VERSION, tada());

字节切片

concat_bytes!concat! 类似,将 const &[u8] 表达式和字面量连接成一个静态字节切片。

const VERSION: u32 = 1;
const fn entries() -> &'static [u8] { b"example" }
const HEADER: &[u8] = concat_bytes!(&VERSION.to_le_bytes(), entries());

T 切片

concat_slices! 是上述两种的底层宏,可用于将 const &[T] 表达式连接成一个静态切片。

此宏需要在逗号分隔的表达式之前指定切片的类型,格式为 [T]:

const MAGIC: &[i32; 4] = &[1, 3, 3, 7];
const VERSION: i32 = 1;
const HEADER: &[i32] = concat_slices!([i32]: MAGIC, &[0, VERSION]);

如果类型不是标准整型,即不是 f32f64char 类型,那么您还必须提供一个带有类型的初始化表达式,其形式为 [init; T]: 。只要类型和初始化表达式可以指定为数组初始化表达式,这对于自定义类型也适用。

const PRIMARIES: &'static [(u8, u8, u8)] = &[(255, 0, 0), (0, 255, 0), (0, 0, 255)];
const SECONDARIES: &'static [(u8, u8, u8)] = &[(255, 255, 0), (255, 0, 255), (0, 255, 255)];
const COLORS: &[(u8, u8, u8)] = concat_slices!([(0, 0, 0); (u8, u8, u8)]: PRIMARIES, SECONDARIES);

许可协议

本项目根据MIT许可协议和Apache许可协议(版本2.0)进行分发。

有关详细信息,请参阅LICENSE-APACHELICENSE-MIT

无运行时依赖