casper_types/transaction/
error.rs

1use crate::InvalidDeploy;
2use core::fmt::{Display, Formatter};
3#[cfg(feature = "datasize")]
4use datasize::DataSize;
5
6#[cfg(feature = "std")]
7use serde::Serialize;
8#[cfg(feature = "std")]
9use std::error::Error as StdError;
10
11pub use crate::transaction::transaction_v1::InvalidTransactionV1;
12
13/// A representation of the way in which a transaction failed validation checks.
14#[derive(Clone, Eq, PartialEq, Debug)]
15#[cfg_attr(feature = "std", derive(Serialize))]
16#[cfg_attr(feature = "datasize", derive(DataSize))]
17#[non_exhaustive]
18pub enum InvalidTransaction {
19    /// Deploys.
20    Deploy(InvalidDeploy),
21    /// V1 transactions.
22    V1(InvalidTransactionV1),
23}
24
25impl From<InvalidDeploy> for InvalidTransaction {
26    fn from(value: InvalidDeploy) -> Self {
27        Self::Deploy(value)
28    }
29}
30
31impl From<InvalidTransactionV1> for InvalidTransaction {
32    fn from(value: InvalidTransactionV1) -> Self {
33        Self::V1(value)
34    }
35}
36
37#[cfg(feature = "std")]
38impl StdError for InvalidTransaction {
39    fn source(&self) -> Option<&(dyn StdError + 'static)> {
40        match self {
41            InvalidTransaction::Deploy(deploy) => deploy.source(),
42            InvalidTransaction::V1(v1) => v1.source(),
43        }
44    }
45}
46
47impl Display for InvalidTransaction {
48    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
49        match self {
50            InvalidTransaction::Deploy(inner) => Display::fmt(inner, f),
51            InvalidTransaction::V1(inner) => Display::fmt(inner, f),
52        }
53    }
54}