macro_rules! convert_2D_slices {
(
$slice:expr =>into_vec $dst_type:ty
) => { ... };
(
$slice:expr =>to_vec $dst_type:ty
) => { ... };
(
$slice:expr =>to_mut_vec $dst_type:ty
) => { ... };
(
$slice:expr =>into $dst_type:ty, $with_capacity:path
) => { ... };
(
$slice:expr =>to $dst_type:ty, $with_capacity:path
) => { ... };
(
$slice:expr =>to_mut $dst_type:ty, $with_capacity:path
) => { ... };
}
Expand description
Makes it easier to work with 2D slices, arrays, etc.
Examples
Byte arrays on stack to Vec<&[u8]>
let array: [[u8; 3]; 2] = [[1, 2, 3],
[4, 5, 6]];
let refs: Vec<&[u8]> =
convert_2D_slices!(array =>to_vec &[u8]);
Byte arrays on stack to Vec<&mut [u8]>
(borrow mutably)
let mut array: [[u8; 3]; 2] = [[1, 2, 3],
[4, 5, 6]];
let refs: Vec<&mut [u8]> =
convert_2D_slices!(array =>to_mut_vec &mut [u8]);
Byte arrays on stack to SmallVec<[&mut [u8]; 32]>
(borrow mutably)
let mut array: [[u8; 3]; 2] = [[1, 2, 3],
[4, 5, 6]];
let refs: SmallVec<[&mut [u8]; 32]> =
convert_2D_slices!(array =>to_mut SmallVec<[&mut [u8]; 32]>,
SmallVec::with_capacity);
Shard array to SmallVec<[&mut [u8]; 32]>
(borrow mutably)
let mut shards = shards!([1, 2, 3],
[4, 5, 6]);
let refs: SmallVec<[&mut [u8]; 32]> =
convert_2D_slices!(shards =>to_mut SmallVec<[&mut [u8]; 32]>,
SmallVec::with_capacity);
Shard array to Vec<&mut [u8]>
(borrow mutably) into SmallVec<[&mut [u8]; 32]>
(move)
let mut shards = shards!([1, 2, 3],
[4, 5, 6]);
let refs1 = convert_2D_slices!(shards =>to_mut_vec &mut [u8]);
let refs2: SmallVec<[&mut [u8]; 32]> =
convert_2D_slices!(refs1 =>into SmallVec<[&mut [u8]; 32]>,
SmallVec::with_capacity);