Crates.io | generic-array |
lib.rs | generic-array |
version | |
source | src |
created_at | 2015-09-27 14:13:44.174465 |
updated_at | 2024-11-25 05:08:51.888163 |
description | Generic types implementing functionality of arrays |
homepage | |
repository | https://github.com/fizyk20/generic-array.git |
max_upload_size | |
id | 3121 |
Cargo.toml error: | TOML parse error at line 27, column 1 | 27 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
This crate implements a structure that can be used as a generic array type.
**Requires minimum Rust version of 1.65.0
Documentation on GH Pages may be required to view certain types on foreign crates.
Before Rust 1.51, arrays [T; N]
were problematic in that they couldn't be generic with respect to the length N
, so this wouldn't work:
struct Foo<N> {
data: [i32; N],
}
Since 1.51, the below syntax is valid:
struct Foo<const N: usize> {
data: [i32; N],
}
However, the const-generics we have as of writing this are still the minimum-viable product (min_const_generics
), so many situations still result in errors, such as this example:
trait Bar {
const LEN: usize;
// Error: cannot perform const operation using `Self`
fn bar(&self) -> Foo<{ Self::LEN }>;
}
generic-array defines a new trait ArrayLength
and a struct GenericArray<T, N: ArrayLength>
, which lets the above be implemented as:
struct Foo<N: ArrayLength> {
data: GenericArray<i32, N>
}
trait Bar {
type LEN: ArrayLength;
fn bar(&self) -> Foo<Self::LEN>;
}
The ArrayLength
trait is implemented for unsigned integer types from typenum crate. For example, GenericArray<T, U5>
would work almost like [T; 5]
:
use generic_array::typenum::U5;
struct Foo<T, N: ArrayLength> {
data: GenericArray<T, N>
}
let foo = Foo::<i32, U5> { data: GenericArray::default() };
The arr!
macro is provided to allow easier creation of literal arrays, as shown below:
let array = arr![1, 2, 3];
// array: GenericArray<i32, typenum::U3>
assert_eq!(array[2], 3);
[dependencies.generic-array]
features = [
"more_lengths", # Expands From/Into implementation for more array lengths
"serde", # Serialize/Deserialize implementation
"zeroize", # Zeroize implementation for setting array elements to zero
"const-default", # Compile-time const default value support via trait
"alloc", # Enables From/TryFrom implementations between GenericArray and Vec<T>/Box<[T]>
"faster-hex" # Enables internal use of the `faster-hex` crate for faster hex encoding via SIMD
]