Provides undo-redo functionality with static dispatch and manual command merging.
chrono
feature is enabled.serde
feature is enabled.Add this to Cargo.toml
:
toml
[dependencies]
redo = "0.31"
And this to main.rs
:
```rust use redo::{Command, Record};
struct Add(char);
impl Command
fn apply(&mut self, s: &mut String) -> Result<(), Self::Error> {
s.push(self.0);
Ok(())
}
fn undo(&mut self, s: &mut String) -> Result<(), Self::Error> {
self.0 = s.pop().ok_or("`s` is empty")?;
Ok(())
}
}
fn main() -> Result<(), &'static str> { let mut record = Record::default(); record.apply(Add('a'))?; record.apply(Add('b'))?; record.apply(Add('c'))?; asserteq!(record.asreceiver(), "abc"); record.undo().unwrap()?; record.undo().unwrap()?; record.undo().unwrap()?; asserteq!(record.asreceiver(), ""); record.redo().unwrap()?; record.redo().unwrap()?; record.redo().unwrap()?; asserteq!(record.asreceiver(), "abc"); Ok(()) } ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.