Crate simple_undo

Source
Expand description

§Simple undo

An easy to use undo-redo library:

use simple_undo::Undo;

let mut message = Undo::new(String::new());
message.update(|text| text.push_str("Simple "));
message.update(|text| text.push_str("undo !"));
assert_eq!(*message, "Simple undo !");

message.undo(); // "Simple "
message.undo(); // ""
message.redo(); // "Simple "

message.update(|text| text.push_str("redo !"));
assert_eq!(*message, "Simple redo !");

let result: String = message.unwrap();
assert_eq!(result, "Simple redo !");

§How it works

Undo wraps the given state and keeps one copy of it. When Undo::undo is called, the previous state is re-created by re-applying the n-1 updates to the initial state.

If you need better performance, please consider alternatives such as undo or rundo crates, which allow you to define or generate the actual undo operation.

Structs§

Undo
The Undo type wrapping a state that tracks updates and allows undoing or redoing them.