[−][src]Crate undo
Provides undo-redo functionality with dynamic dispatch and automatic command merging.
Contents
- Record provides a stack based undo-redo functionality.
- History provides a tree based undo-redo functionality that allows you to jump between different branches.
- Queue wraps a Record or History and extends them with queue functionality.
- Checkpoint wraps a Record or History and extends them with checkpoint functionality.
- Commands can be merged using the merge! macro or the merge method. When two commands are merged, undoing and redoing them are done in a single step.
- Configurable display formatting is provided when the
display
feature is enabled. - Time stamps and time travel is provided when the
chrono
feature is enabled.
Examples
Add this to Cargo.toml
:
[dependencies]
undo = "0.30"
And this to main.rs
:
use undo::{Command, Record}; #[derive(Debug)] struct Add(char); impl Command<String> for Add { fn apply(&mut self, s: &mut String) -> undo::Result { s.push(self.0); Ok(()) } fn undo(&mut self, s: &mut String) -> undo::Result { self.0 = s.pop().ok_or("`s` is empty")?; Ok(()) } } fn main() -> undo::Result { let mut record = Record::default(); record.apply(Add('a'))?; record.apply(Add('b'))?; record.apply(Add('c'))?; assert_eq!(record.as_receiver(), "abc"); record.undo().unwrap()?; record.undo().unwrap()?; record.undo().unwrap()?; assert_eq!(record.as_receiver(), ""); record.redo().unwrap()?; record.redo().unwrap()?; record.redo().unwrap()?; assert_eq!(record.as_receiver(), "abc"); Ok(()) }
Macros
merge | Macro for merging commands. |
Structs
Checkpoint | A checkpoint wrapper. |
History | A history of commands. |
HistoryBuilder | Builder for a History. |
Merged | The result of merging commands. |
Queue | A command queue wrapper. |
Record | A record of commands. |
RecordBuilder | Builder for a record. |
Enums
Merge | Says if the command should merge with another command. |
Signal | The signal sent when the record, the history, or the receiver changes. |
Traits
Command | Base functionality for all commands. |
Type Definitions
Result | A specialized Result type for undo-redo operations. |