flense 0.4.1

Purpose-oriented lensing
Documentation
//! Concrete lens definitions.

#[expect(
    clippy::module_inception,
    reason = "hidden module used for organization"
)]
mod lens;
mod lens_mut;
mod raw;

pub use lens::{
    LensBase,
    join_lens,
    try_join_lens,
    zip_lens,
};
pub use lens_mut::{
    LensBaseMut,
    join_lens_mut,
    try_join_lens_mut,
    zip_lens_mut,
};

/// Zero-dimensional lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&` reference is to references.
pub type Lens<'a, T> = LensBase<'a, T, 0>;
/// Zero-dimensional mutable lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&mut` reference is to references.
pub type LensMut<'a, T> = LensBaseMut<'a, T, 0>;

/// One-dimensional lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&[_]` reference is to references.
pub type LensSlice<'a, T> = LensBase<'a, T, 1>;
/// One-dimensional mutable lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&mut [_]` reference is to references.
pub type LensSliceMut<'a, T> = LensBaseMut<'a, T, 1>;

/// Two-dimensional lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&[&[_]]` reference is to references.
pub type LensRect<'a, T> = LensBase<'a, T, 2>;
/// Two-dimensional mutable lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&mut [&mut [_]]` reference is to references.
pub type LensRectMut<'a, T> = LensBaseMut<'a, T, 2>;

/// Three-dimensional lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&[&[&[_]]]` reference is to references.
pub type LensCube<'a, T> = LensBase<'a, T, 3>;
/// Three-dimensional mutable lens to a set of [`Field`](crate::Field).
///
/// This is to lensing what a `&mut [&mut [&mut [_]]]` reference is to
/// references.
pub type LensCubeMut<'a, T> = LensBaseMut<'a, T, 3>;