Macro undo::merge [−][src]
macro_rules! merge { ($cmd1:expr, $cmd2:expr) => { ... }; ($cmd1:expr, $cmd2:expr, $($tail:expr),+) => { ... }; }
Macro for merging commands.
Examples
#[derive(Debug)] struct Add(char); impl Command<String> for Add { fn apply(&mut self, s: &mut String) -> Result<(), Box<dyn Error + Send + Sync>> { s.push(self.0); Ok(()) } fn undo(&mut self, s: &mut String) -> Result<(), Box<dyn Error + Send + Sync>> { self.0 = s.pop().ok_or("`s` is empty")?; Ok(()) } } fn main() -> Result<(), Box<dyn Error>> { let mut record = Record::default(); let cmd = merge![Add('a'), Add('b'), Add('c')]; 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(()) }