Macro redo::merge [−][src]
macro_rules! merge { ($cmd1:expr, $cmd2:expr) => { ... }; ($cmd1:expr, $cmd2:expr, $($tail:expr),+) => { ... }; }
Macro for merging commands.
Examples
#[derive(Debug)] struct Add(String); impl Command<String> for Add { type Error = (); fn apply(&mut self, s: &mut String) -> Result<(), ()> { s.push_str(&self.0); Ok(()) } fn undo(&mut self, s: &mut String) -> Result<(), ()> { let len = s.len() - self.0.len(); s.truncate(len); Ok(()) } fn merge(&mut self, Add(s): Self) -> Result<(), Self> { self.0.push_str(&s); Ok(()) } } fn main() -> Result<(), Error<String, Add>> { let mut record = Record::default(); let cmd = merge![Add("a".into()), Add("b".into()), Add("c".into())].unwrap(); record.apply(cmd)?; assert_eq!(record.as_receiver(), "abc"); record.undo().unwrap()?; assert_eq!(record.as_receiver(), ""); record.redo().unwrap()?; assert_eq!(record.as_receiver(), "abc"); Ok(()) }