macro_rules! merge {
($cmd1:expr, $cmd2:expr) => { ... };
($cmd1:expr, $cmd2:expr, $($tail:expr),+) => { ... };
}
Expand description
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(())
}