use crate::undoredo::{Extract, Revert};
#[derive(Clone, Debug, Default, PartialEq)]
pub struct Snapshot<S> {
state: S,
}
impl<S> Snapshot<S> {
pub fn new(state: S) -> Self {
Self { state }
}
pub fn dissolve(self) -> S {
self.state
}
}
impl<T: Clone> Revert<T> for Snapshot<T> {
fn revert(self, target: &mut T) -> Self {
let reverse = Self::new(target.clone());
*target = self.state;
reverse
}
}
impl<T: Clone> Extract<T> for Snapshot<T> {
fn extract(target: &mut T) -> Self {
Self::new(target.clone())
}
}