1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use crate::stack::Resumable;

use cfx_vm_types::{self as vm, ActionParams};

pub enum InternalTrapResult<T> {
    Return(vm::Result<T>),
    Invoke(ActionParams, Box<dyn Resumable>),
}
use InternalTrapResult::*;

impl<T> InternalTrapResult<T> {
    pub fn map_return<F, U>(self, f: F) -> InternalTrapResult<U>
    where F: FnOnce(T) -> vm::Result<U> {
        match self {
            Return(Ok(r)) => Return(f(r)),
            Return(Err(e)) => Return(Err(e)),
            Invoke(p, r) => Invoke(p, r),
        }
    }
}