7 releases (4 stable)

Uses old Rust 2015

1.1.0 Aug 26, 2017
1.0.2 Jun 3, 2017
1.0.1 Jan 20, 2017
1.0.0 Dec 27, 2016
0.1.2 Dec 19, 2016

#1987 in Rust patterns

Download history 1450/week @ 2024-07-22 1757/week @ 2024-07-29 2381/week @ 2024-08-05 2386/week @ 2024-08-12 1836/week @ 2024-08-19 2128/week @ 2024-08-26 2770/week @ 2024-09-02 1868/week @ 2024-09-09 1675/week @ 2024-09-16 2025/week @ 2024-09-23 1684/week @ 2024-09-30 1527/week @ 2024-10-07 1797/week @ 2024-10-14 1718/week @ 2024-10-21 1621/week @ 2024-10-28 1725/week @ 2024-11-04

7,029 downloads per month
Used in 24 crates (3 directly)

Unlicense

8KB
85 lines

init_with

Documentation

Have you wanted to be able to initialize a fixed array in Rust by calling a function to create each element? Now you can!

use init_with::InitWith;

let my_array = {
    let mut seed = Vec::new();
    let mut next_val = 0;

    <[Vec<u32>; 3]>::init_with(|| {
        seed.push(next_val);
        next_val += 1;
        seed.clone()
    })
};

assert_eq!(my_array, [vec![0], vec![0, 1], vec![0, 1, 2]]);

Alternatively, init_with_indices can be used to more easily create array entries based on their index:

use init_with::InitWith;

let squares = <[usize; 5]>::init_with_indices(|i| i*i);

assert_eq!(squares, [0,1,4,9,16]);

This crate lets you initialize the array elements in a functional manner while hiding the unsafe code that's needed to do so.

To import this crate, put the following into your Cargo.toml:

[dependencies]
init_with = "1.1.0"

...and the following in your crate root:

extern crate init_with;

No runtime deps