revm_handler_interface/
util.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crate::Frame;

pub enum FrameOrResultGen<Frame, Result> {
    Frame(Frame),
    Result(Result),
}

impl<F, R> FrameOrResultGen<F, R> {
    pub fn map_frame<F2>(self, f: impl FnOnce(F) -> F2) -> FrameOrResultGen<F2, R> {
        match self {
            FrameOrResultGen::Frame(frame) => FrameOrResultGen::Frame(f(frame)),
            FrameOrResultGen::Result(result) => FrameOrResultGen::Result(result),
        }
    }

    pub fn map_result<R2>(self, f: impl FnOnce(R) -> R2) -> FrameOrResultGen<F, R2> {
        match self {
            FrameOrResultGen::Frame(frame) => FrameOrResultGen::Frame(frame),
            FrameOrResultGen::Result(result) => FrameOrResultGen::Result(f(result)),
        }
    }
}

pub type FrameOrFrameResult<FRAME> = FrameOrResultGen<FRAME, <FRAME as Frame>::FrameResult>;