revm_handler/
item_or_result.rs1use crate::evm::FrameTr;
2
3#[derive(Clone, Debug)]
5pub enum ItemOrResult<ITEM, RES> {
6 Item(ITEM),
8 Result(RES),
10}
11
12impl<ITEM, RES> ItemOrResult<ITEM, RES> {
13 pub fn map_frame<OITEM>(self, f: impl FnOnce(ITEM) -> OITEM) -> ItemOrResult<OITEM, RES> {
15 match self {
16 ItemOrResult::Item(item) => ItemOrResult::Item(f(item)),
17 ItemOrResult::Result(result) => ItemOrResult::Result(result),
18 }
19 }
20
21 pub fn map_result<ORES>(self, f: impl FnOnce(RES) -> ORES) -> ItemOrResult<ITEM, ORES> {
23 match self {
24 ItemOrResult::Item(item) => ItemOrResult::Item(item),
25 ItemOrResult::Result(result) => ItemOrResult::Result(f(result)),
26 }
27 }
28}
29
30impl<ITEM, RES> ItemOrResult<ITEM, RES> {
31 pub fn is_result(&self) -> bool {
33 matches!(self, ItemOrResult::Result(_))
34 }
35
36 pub fn is_item(&self) -> bool {
38 matches!(self, ItemOrResult::Item(_))
39 }
40}
41
42pub type FrameInitOrResult<FRAME> =
44 ItemOrResult<<FRAME as FrameTr>::FrameInit, <FRAME as FrameTr>::FrameResult>;