1 unstable release

0.1.2 Oct 27, 2020
0.1.1 Jul 12, 2020
0.1.0 Jul 7, 2020

#2268 in Rust patterns

Download history 15/week @ 2024-12-10 3/week @ 2025-02-04 13/week @ 2025-02-11 3/week @ 2025-02-18 65/week @ 2025-03-04 477/week @ 2025-03-11 266/week @ 2025-03-18 241/week @ 2025-03-25

1,049 downloads per month
Used in smart_access

MIT license

17KB
94 lines

crate docs

Multireferences for Rust

Allowing to pass from [&T] to (an analogue of) &[T] safely without copying anything.

More precisely

This crate provides two helper types Slice and Pair that allow the following conversions:

The inverse distributive law

  • &'a [&'x T] -> &'a Slice<T> (and a mutable equivalent)
  • &'a (&'x A, &'x B) -> &'a Pair<A, B> (and a mutable equivalent)

The forward distributive law

  • &'a Slice<T> -> &'a [&'a T] (and a mutable equivalent)
  • &'a Pair<A, B> -> &'a (&'a A, &'a B) (and a mutable equivalent)

What for?

To move lifetimes from the depths of a type expression closer to its head.

Such a manipulation can be useful in a cps-heavy code.

Details

HERE

Usage

Simply include

multiref = "0.1"

in your Cargo.toml.

The crate doesn't use any of the std library and has the #![no_std] attribute.

Similiar crates

There is a similiarly named crate multi_mut. It allows to extract multiple nonintersecting mutable references from the std::collections maps.

However it has nothing to do with the distributive laws.

Versions

  • 0.1.2: fixed a soundness issue with pairs
  • 0.1.1: modify methods for pairs and “slices”.
  • 0.1.0: Initial version.

No runtime deps