transitionable 0.1.1

A no_std compatible type to transition `T -> T` where you have an `&mut T`.
Documentation
  • Coverage
  • 100%
    6 out of 6 items documented1 out of 5 items with examples
  • Size
  • Source code size: 11.2 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 567.85 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 7s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • mickvangelderen/transitionable
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • mickvangelderen

Build Status MIT License Crates.io Version

Documentation

Transitionable

Allows transitioning a T from one state to the next by value, even when you only have access to a mutable reference &mut T.

use transitionable::Transitionable;

// Imagine this is your `T` type.
enum State { A, B }

impl State {
    // Imagine you would like to call this function which requires `Self` by value.
    fn swap(self) -> Self {
        match self {
            Self::A => Self::B,
            Self::B => Self::A,
        }
    }
}

// Imagine some other code forces you to work with `&mut`.
let t = &mut Transitionable::new(State::A);

// Despite our `Transitionable` being behind an `&mut`, we can consume the contained `State` by value and produce a new `State`.
Transitionable::transition(t, State::swap);

// Transitionable acts like a smart pointer; we can dereference it and verify that the value has indeed transitioned to a new state.
assert!(matches!(**t, State::B));

These crates offer similar functionality:

  • takeable is similar but does not optimize when panic = "abort".
  • replace_with can be used when you can not wrap your T in another type but has different performance characteristics and the optimized version is behind an unsafe function.

View the documentation for more details.