[][src]Crate arraygen

This crate provides Arraygen derive macro for structs, which generates methods returning arrays filled with the selected struct fields.

Complete example:

use arraygen::Arraygen;

#[derive(Arraygen, Debug)]
#[gen_array(fn get_names: &mut String)]
struct Person {
    #[in_array(get_names)]
    first_name: String,
    #[in_array(get_names)]
    last_name: String,
}

let mut person = Person {
    first_name: "Ada".into(),
    last_name: "Lovelace".into()
};

for name in person.get_names().iter_mut() {
    **name = name.to_lowercase();
}

assert_eq!(
    format!("{:?}", person),
    "Person { first_name: \"ada\", last_name: \"lovelace\" }"
);

As you can see above, the attribute gen_array generates a new method returning an array of the given type. And the attribute in_array indicates the fields to be included by that method. In this case, the generated method 'get_names' will return an array including references to all the fields of the struct.

As you might have guessed, what Arraygen does under the hood is simply generating the following impl:

impl Person {
    #[inline(always)]
    fn get_names(&mut self) -> [&mut String; 2] {
        [&mut self.first_name, &mut self.last_name]
    }
}

Derive Macros

Arraygen