2 releases
0.1.1 | Nov 22, 2021 |
---|---|
0.1.0 | Oct 22, 2021 |
#1299 in Data structures
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.