Crates.io | const-array-init |
lib.rs | const-array-init |
version | 1.0.0 |
source | src |
created_at | 2024-04-24 00:34:51.950772 |
updated_at | 2024-04-24 00:34:51.950772 |
description | Macros used to initialize arrays in const context using closure syntax or const function |
homepage | https://github.com/IoaNNUwU/const-array-init-macro |
repository | https://github.com/IoaNNUwU/const-array-init-macro |
max_upload_size | |
id | 1218169 |
size | 19,681 |
const_array_init
Rust crateclosure
syntax or const fn
.All macros in this crate implemented using macro_rules!
which is very IDE-friendly way.
Using const_arr!
macro:
use const_array_init::const_arr;
const ARR1: [i32; 5] = const_arr!([i32; 5], |i| i as i32 + 1);
assert_eq!(ARR1, [1, 2, 3, 4, 5]);
const fn to_i32_plus_one(n: usize) -> i32 {
n as i32 + 1
}
const ARR2: [i32; 5] = const_arr!([i32; 5], to_i32_plus_one);
assert_eq!(ARR2, [1, 2, 3, 4, 5]);
Using make_const_arr!
macro:
use const_array_init::make_const_arr;
make_const_arr!(ARR1, [i32; 5], |i| i as i32 + 1);
assert_eq!(ARR1, [1, 2, 3, 4, 5]);
const fn to_i32_plus_one(n: usize) -> i32 {
n as i32 + 1
}
make_const_arr!(ARR2, [i32; 5], to_i32_plus_one);
assert_eq!(ARR2, [1, 2, 3, 4, 5]);
Advanced usage:
User
isn't Copy
, yet still you can use it in const
context with this macro.use const_array_init::const_arr;
#[derive(Debug, PartialEq, Eq)]
struct User { id: u32 }
const fn create_user_from_i(i: usize) -> User {
User { id: i as u32 }
}
const USERS: [User; 1024] = const_arr!([User; 1024], create_user_from_i);
const USERS2: [User; 1024] = const_arr!([User; 1024], |i| User { id: i as u32 });