1 unstable release

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

#2798 in Rust patterns


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