use std::fmt::Debug;
use std::panic;
use tracing::{instrument, Span};
use super::transition::TransitionMetadata;
use crate::Result;
pub trait Sandbox: Sized + Debug {
#[instrument(skip_all, parent = Span::current(), level= "Trace")]
fn check_stack_guard(&self) -> Result<bool> {
panic!("check_stack_guard not implemented for this type");
}
}
pub trait UninitializedSandbox: Sandbox {
fn get_uninitialized_sandbox(&self) -> &crate::sandbox::UninitializedSandbox;
fn get_uninitialized_sandbox_mut(&mut self) -> &mut crate::sandbox::UninitializedSandbox;
#[instrument(skip_all, parent = Span::current(), level= "Trace")]
fn is_running_in_process(&self) -> bool {
self.get_uninitialized_sandbox().run_inprocess
}
}
pub trait EvolvableSandbox<Cur: Sandbox, Next: Sandbox, T: TransitionMetadata<Cur, Next>>:
Sandbox
{
fn evolve(self, tsn: T) -> Result<Next>;
}
pub trait DevolvableSandbox<Cur: Sandbox, Prev: Sandbox, T: TransitionMetadata<Cur, Prev>>:
Sandbox
{
fn devolve(self, tsn: T) -> Result<Prev>;
}