# [−] [src] Crate generic_array

This crate implements a structure that can be used as a generic array type. Core Rust array types `[T; N]` can't be used generically with respect to `N`, so for example this:

ⓘ

    struct Foo<T, N> {
        data: [T; N]
    }

won't work.

generic-array exports a `GenericArray<T,N>` type, which lets the above be implemented as:

    use generic_array::{ArrayLength, GenericArray};

    struct Foo<T, N: ArrayLength<T>> {
        data: GenericArray<T,N>
    }

The `ArrayLength<T>` trait is implemented by default for unsigned integer types from typenum:

    use generic_array::typenum::U5;

    struct Foo<N: ArrayLength<i32>> {
        data: GenericArray<i32, N>
    }

    let foo = Foo::<U5>{data: GenericArray::default()};

For example, `GenericArray<T, U5>` would work almost like `[T; 5]`:

    use generic_array::typenum::U5;

    struct Foo<T, N: ArrayLength<T>> {
        data: GenericArray<T, N>
    }

    let foo = Foo::<i32, U5>{data: GenericArray::default()};

For ease of use, an `arr!` macro is provided - example below:

    let array = arr![u32; 1, 2, 3];
    assert_eq!(array[2], 3);

## Re-exports

`pub extern crate typenum;`
`pub use self::iter::GenericArrayIter;`

## Modules

arr | Implementation for `arr!` macro.
functional | Functional programming with generic sequences
iter | `GenericArray` iterator implementation.
sequence | Useful traits for manipulating sequences of data stored in `GenericArray`s

## Macros

arr | Macro allowing for easy generation of Generic Arrays. Example: `let test = arr![u32; 1, 2, 3];`

## Structs

GenericArray | Struct representing a generic array - `GenericArray<T, N>` works like [T; N]

## Traits

ArrayLength | Trait making `GenericArray` work, marking types to be used as length of an array