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, ExitFatal}; pub enum Resolve<'a, 'config, H: Handler> { Create(H::CreateInterrupt, ResolveCreate<'a, 'config>), Call(H::CallInterrupt, ResolveCall<'a, 'config>), } pub struct ResolveCreate<'a, 'config> { runtime: &'a mut Runtime<'config>, } impl<'a, 'config> ResolveCreate<'a, 'config> { pub(crate) fn new(runtime: &'a mut Runtime<'config>) -> Self { Self { runtime } } } impl<'a, 'config> Drop for ResolveCreate<'a, 'config> { fn drop(&mut self) { self.runtime.status = Err(ExitFatal::UnhandledInterrupt.into()); self.runtime.machine.exit(ExitFatal::UnhandledInterrupt.into()); } } pub struct ResolveCall<'a, 'config> { runtime: &'a mut Runtime<'config>, } impl<'a, 'config> ResolveCall<'a, 'config> { pub(crate) fn new(runtime: &'a mut Runtime<'config>) -> Self { Self { runtime } } } impl<'a, 'config> Drop for ResolveCall<'a, 'config> { fn drop(&mut self) { self.runtime.status = Err(ExitFatal::UnhandledInterrupt.into()); self.runtime.machine.exit(ExitFatal::UnhandledInterrupt.into()); } }