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_item<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 #[deprecated(
23 note = "Use map_item() instead; this maps the Item variant (not necessarily a frame)"
24 )]
25 pub fn map_frame<OITEM>(self, f: impl FnOnce(ITEM) -> OITEM) -> ItemOrResult<OITEM, RES> {
26 self.map_item(f)
27 }
28
29 pub fn map_result<ORES>(self, f: impl FnOnce(RES) -> ORES) -> ItemOrResult<ITEM, ORES> {
31 match self {
32 ItemOrResult::Item(item) => ItemOrResult::Item(item),
33 ItemOrResult::Result(result) => ItemOrResult::Result(f(result)),
34 }
35 }
36}
37
38impl<ITEM, RES> ItemOrResult<ITEM, RES> {
39 pub fn is_result(&self) -> bool {
41 matches!(self, ItemOrResult::Result(_))
42 }
43
44 pub fn is_item(&self) -> bool {
46 matches!(self, ItemOrResult::Item(_))
47 }
48}
49
50pub type FrameInitOrResult<FRAME> =
52 ItemOrResult<<FRAME as FrameTr>::FrameInit, <FRAME as FrameTr>::FrameResult>;