1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
use crate::{Runtime, Handler, ExitError}; pub enum Resolve<'a, H: Handler> { Create(H::CreateInterrupt, ResolveCreate<'a>), Call(H::CallInterrupt, ResolveCall<'a>), } pub struct ResolveCreate<'a> { runtime: &'a mut Runtime, } impl<'a> ResolveCreate<'a> { pub(crate) fn new(runtime: &'a mut Runtime) -> Self { Self { runtime } } } impl<'a> Drop for ResolveCreate<'a> { fn drop(&mut self) { self.runtime.status = Err(ExitError::Other("create interrupt dropped").into()); self.runtime.machine.exit(ExitError::Other("create interrupt dropped").into()); } } pub struct ResolveCall<'a> { runtime: &'a mut Runtime, } impl<'a> ResolveCall<'a> { pub(crate) fn new(runtime: &'a mut Runtime) -> Self { Self { runtime } } } impl<'a> Drop for ResolveCall<'a> { fn drop(&mut self) { self.runtime.status = Err(ExitError::Other("call interrupt dropped").into()); self.runtime.machine.exit(ExitError::Other("call interrupt dropped").into()); } }