2个稳定版本
使用旧的Rust 2015
1.1.0 | 2016年5月2日 |
---|---|
1.0.0 | 2016年3月13日 |
#63 in #cast
366 每月下载量
用于 10 个crate (3 直接)
9KB
141 行
这是一个Rust crate,可以将具有运行时长度的切片转换为具有编译时长度的数组。
lib.rs
:
此crate提供宏,将具有在运行时存储和检查的长度的切片转换为具有在编译时已知的长度的数组。这可以使类型更具表达性(例如,&[u8; 32]
而不是&[u8]
),并帮助编译器省略边界检查。
slice_as_array!(xs, [u32; 4])
如果xs
是一个长度为4的切片,则返回Some(&[u32; 4])
,否则返回None
。
slice_as_array_mut!(ys, [String; 7])
如果ys
是一个长度为7的切片,则返回Some(&mut [String; 7])
,否则返回None
。
slice_to_array_clone!(zs, [String; 4]
如果zs的长度为4,则返回 Some([String; 4])
,否则返回 `None`。传入的切片保持不变,其元素被克隆。
对于大多数用户来说,声明对此的依赖很简单
[dependencies]
slice_as_array "1.1.0"
为了支持从#![no_std]
crate调用,这个crate有一个默认开启的名为with_std
的功能。一个#![no_std]
crate应该使用
[dependencies]
slice_as_array = { version = "1.1.0", default-features = false }
示例用法
#[macro_use] extern crate slice_as_array;
fn slice_as_hash(xs: &[u8]) -> &[u8; 32] {
slice_as_array!(xs, [u8; 32]).expect("bad hash length")
}
fn mutate_chunk(xs: &mut [u32; 10]) {
// ...
}
fn mutate_chunks(xs: &mut [u32; 100]) {
for chunk in xs.chunks_mut(10).map(|c| slice_as_array_mut!(c, [u32; 10]).unwrap() ) {
mutate_chunk(chunk)
}
}
依赖项
~66KB