1use revm::context_interface::result::HaltReason;
3
4#[derive(Clone, Debug, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub enum OpHaltReason {
8 Base(HaltReason),
10 FailedDeposit,
12}
13
14impl From<HaltReason> for OpHaltReason {
15 fn from(value: HaltReason) -> Self {
16 Self::Base(value)
17 }
18}
19
20impl TryFrom<OpHaltReason> for HaltReason {
21 type Error = OpHaltReason;
22
23 fn try_from(value: OpHaltReason) -> Result<HaltReason, OpHaltReason> {
24 match value {
25 OpHaltReason::Base(reason) => Ok(reason),
26 OpHaltReason::FailedDeposit => Err(value),
27 }
28 }
29}
30
31#[cfg(all(test, feature = "serde"))]
32mod tests {
33 use super::*;
34 use revm::context_interface::result::OutOfGasError;
35
36 #[test]
37 fn test_serialize_json_op_halt_reason() {
38 let response = r#"{"Base":{"OutOfGas":"Basic"}}"#;
39
40 let op_halt_reason: OpHaltReason = serde_json::from_str(response).unwrap();
41 assert_eq!(
42 op_halt_reason,
43 HaltReason::OutOfGas(OutOfGasError::Basic).into()
44 );
45 }
46}