#generic #revert #commit #state #wrapper

reversible

A generic wrapper struct that provides reversible editing capabilities

3 releases

Uses new Rust 2024

0.1.2 Aug 27, 2025
0.1.1 Aug 25, 2025
0.1.0 Aug 18, 2025

#1459 in Data structures

Download history 2/week @ 2025-11-07 6/week @ 2025-11-14

112 downloads per month

MIT license

7KB
88 lines

Reversible<T>

Latest version

A generic wrapper struct that provides reversible editing capabilities for values of type T: Default + Debug + Clone.

Features

  • Tracks changes separately from the original data
  • Only clones the original data when modifications begin (lazy cloning)
  • Optional Serde support for serialization/deserialization (with serde feature)
  • Implements AsRef<T> and AsMut<T> for transparent access to the original and changed data.

Example

let mut rev = Reversible::from(4);
assert_eq!(rev.as_mut(), &mut 4);

*rev.as_mut() = 13;
assert_eq!(rev.as_ref(), &4);
assert_eq!(rev.as_mut(), &mut 13);

rev.save();
assert_eq!(rev.as_ref(), &13);

*rev.as_mut() = 4;
assert_eq!(rev.as_ref(), &13);
assert_eq!(rev.as_mut(), &mut 4);

rev.revert();
assert_eq!(rev.as_mut(), &mut 13);

Dependencies

~155KB