2 releases

0.1.1 Nov 22, 2021
0.1.0 Oct 22, 2021

#1299 in Data structures

MIT license

11KB
159 lines

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.

No runtime deps