#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

#1243 in Data structures

Download history 121/week @ 2025-08-28 41/week @ 2025-09-04 126/week @ 2025-09-11 78/week @ 2025-09-18 75/week @ 2025-09-25 18/week @ 2025-10-02 8/week @ 2025-10-09 66/week @ 2025-10-16 2/week @ 2025-11-06 6/week @ 2025-11-13

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

~170KB