reversible

Crates.ioreversible
lib.rsreversible
version0.1.2
created_at2025-08-18 17:14:18.528126+00
updated_at2025-08-27 08:57:07.969232+00
descriptionA generic wrapper struct that provides reversible editing capabilities..
homepage
repositoryhttps://github.com/p4ymak/reversible
max_upload_size
id1800794
size7,883
Roman Chumak (p4ymak)

documentation

README

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);
Commit count: 9

cargo fmt