stratus/eth/primitives/
transaction_stage.rs

1use crate::alias::AlloyReceipt;
2use crate::alias::AlloyTransaction;
3use crate::alias::JsonValue;
4use crate::eth::executor::EvmExecutionResult;
5use crate::eth::primitives::TransactionExecution;
6use crate::eth::primitives::TransactionMined;
7use crate::eth::primitives::transaction_mined::MinedData;
8use crate::ext::to_json_value;
9
10pub enum TransactionStage {
11    Pending(TransactionExecution),
12    Mined(TransactionMined),
13}
14
15impl TransactionStage {
16    pub fn to_json_rpc_receipt(self) -> JsonValue {
17        match self {
18            TransactionStage::Mined(tx) => to_json_value(AlloyReceipt::from(tx)),
19            TransactionStage::Pending(_) => JsonValue::Null,
20        }
21    }
22
23    pub fn to_json_rpc_transaction(self) -> JsonValue {
24        to_json_value(AlloyTransaction::from(self))
25    }
26
27    pub fn to_result(self) -> EvmExecutionResult {
28        match self {
29            TransactionStage::Mined(tx) => tx.execution.result,
30            TransactionStage::Pending(tx) => tx.result,
31        }
32    }
33}
34
35impl From<TransactionStage> for (TransactionExecution, Option<MinedData>) {
36    fn from(value: TransactionStage) -> Self {
37        match value {
38            TransactionStage::Mined(tx) => (tx.execution, Some(tx.mined_data)),
39            TransactionStage::Pending(tx) => (tx, None),
40        }
41    }
42}
43
44impl From<TransactionStage> for AlloyReceipt {
45    fn from(value: TransactionStage) -> Self {
46        match value {
47            TransactionStage::Mined(tx) => tx.into(),
48            TransactionStage::Pending(tx) => tx.into(),
49        }
50    }
51}
52
53impl From<TransactionStage> for AlloyTransaction {
54    fn from(value: TransactionStage) -> Self {
55        match value {
56            TransactionStage::Mined(tx) => tx.into(),
57            TransactionStage::Pending(tx) => tx.into(),
58        }
59    }
60}