stratus/eth/primitives/
transaction_stage.rs1use 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}