use super::{Runner, State};
use crate::error::Result;
impl<S: crate::value::VariableStorage> Runner<S> {
#[must_use]
pub fn snapshot(&self) -> crate::runtime::RunnerSnapshot {
crate::runtime::RunnerSnapshot {
current_node: self.stack.last().map(|f| f.node.as_ref().to_owned()),
visits: self.visits.clone(),
once_seen: self.once_seen.clone(),
}
}
pub fn restore(&mut self, snapshot: crate::runtime::RunnerSnapshot) -> Result<()> {
self.visits = snapshot.visits;
self.once_seen = snapshot.once_seen;
self.stack.clear();
self.clear_event_queues();
self.state = State::Idle;
if let Some(node) = snapshot.current_node {
self.start(&node)?;
}
Ok(())
}
}