mina_p2p_messages/v2/manual/
conv.rs

1use crate::v2::{
2    MinaBaseTransactionStatusStableV2, MinaBaseUserCommandStableV2,
3    MinaTransactionLogicTransactionAppliedCommandAppliedStableV2,
4    MinaTransactionLogicTransactionAppliedVaryingStableV2, MinaTransactionTransactionStableV2,
5};
6
7#[derive(Debug, thiserror::Error)]
8pub enum Error {
9    #[error("Binprot error: {0}")]
10    BinProt(#[from] binprot::Error),
11    #[error("Base64 error: {0}")]
12    Base64(#[from] base64::DecodeError),
13    #[error("IO error: {0}")]
14    Io(#[from] std::io::Error),
15}
16
17/// Extract transaction data and status required by proof generation
18impl From<MinaTransactionLogicTransactionAppliedVaryingStableV2>
19    for (
20        MinaTransactionTransactionStableV2,
21        MinaBaseTransactionStatusStableV2,
22    )
23{
24    fn from(value: MinaTransactionLogicTransactionAppliedVaryingStableV2) -> Self {
25        match value {
26            MinaTransactionLogicTransactionAppliedVaryingStableV2::Command(v) => match v {
27                MinaTransactionLogicTransactionAppliedCommandAppliedStableV2::SignedCommand(v) => (
28                    MinaTransactionTransactionStableV2::Command(Box::new(
29                        MinaBaseUserCommandStableV2::SignedCommand(v.common.user_command.data),
30                    )),
31                    v.common.user_command.status,
32                ),
33                MinaTransactionLogicTransactionAppliedCommandAppliedStableV2::ZkappCommand(v) => (
34                    MinaTransactionTransactionStableV2::Command(Box::new(
35                        MinaBaseUserCommandStableV2::ZkappCommand(v.command.data),
36                    )),
37                    v.command.status,
38                ),
39            },
40            MinaTransactionLogicTransactionAppliedVaryingStableV2::FeeTransfer(v) => (
41                MinaTransactionTransactionStableV2::FeeTransfer(v.fee_transfer.data),
42                v.fee_transfer.status,
43            ),
44            MinaTransactionLogicTransactionAppliedVaryingStableV2::Coinbase(v) => (
45                MinaTransactionTransactionStableV2::Coinbase(v.coinbase.data),
46                v.coinbase.status,
47            ),
48        }
49    }
50}