recallable 0.2.0

Traits (`Recallable`, `Recall`, `TryRecall`) and macros for defining Memento pattern types and their state restoration behaviors.
Documentation
use core::marker::PhantomData;

use recallable::{Recall, Recallable, recallable_model};

#[recallable_model]
#[derive(Clone, Debug, PartialEq)]
struct InnerState {
    value: i32,
}

#[recallable_model]
#[derive(Clone, Debug, PartialEq)]
struct DerivedEnvelope<T> {
    #[recallable]
    inner: T,
    version: u32,
    #[recallable(skip)]
    marker: PhantomData<T>,
}

fn main() {
    let original = DerivedEnvelope {
        inner: InnerState { value: 42 },
        version: 7,
        marker: PhantomData::<InnerState>,
    };

    let memento: <DerivedEnvelope<InnerState> as Recallable>::Memento = original.clone().into();

    let mut target = DerivedEnvelope {
        inner: InnerState { value: 0 },
        version: 0,
        marker: PhantomData::<InnerState>,
    };

    target.recall(memento);

    assert_eq!(target, original);
}