pub trait ApplyEdit<T> {
fn apply_edit(self, target: &mut T);
}
impl<T> ApplyEdit<T> for () {
fn apply_edit(self, _target: &mut T) {
}
}
pub trait RevertEdit<T> {
fn revert_edit(self, target: &mut T) -> Self;
}
impl<T> RevertEdit<T> for () {
fn revert_edit(self, _target: &mut T) -> Self {
}
}
pub trait ExtractEdit<T> {
fn extract_edit(target: &mut T) -> Self;
}
impl<T> ExtractEdit<T> for () {
fn extract_edit(_target: &mut T) -> Self {
()
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Default, PartialEq)]
pub struct CmdEdit<Cmd, E> {
pub cmd: Cmd,
pub edit: E,
}