Skip to content

sunsided/uniform-array-derive

Repository files navigation

uniform-array-derive

Derive array-like behavior for your structs of uniform types.

Crates.io Docs Build Status Safety Dance MSRV EUPL 1.2 licensed

This will derive AsRef<[T]>, AsMut<[T]>, Deref<Target = [T]>, DerefMut, Index<Target = T> and IndexMut for your homogeneous structs field type T. Since the generated code is unsafe, it is feature gated behind a #[cfg(feature = "unsafe")] by default.

#[derive(UniformArray)]
pub struct Vector3 {
    pub x: f32,
    pub y: f32,
    pub z: f32,
}

#[derive(UniformArray)]
pub struct Coordinate(u32, u32);

If you need to rename the feature gate, you can do that as well:

/// Use a custom feature gate instead of "unsafe".
#[derive(UniformArray)]
#[uniform_array(safety_gate = "super_unsafe")]
pub struct Quaternion<T>
where
    T: Sized,
{
    pub a: T,
    pub b: T,
    pub c: T,
    pub d: T,
}

If you only need to ensure that all your fields have the same type, consider the ensure-uniform-type crate instead.