casper_client/cli/transaction_v1_builder/
error.rs

1use core::fmt::{self, Display, Formatter};
2use std::error::Error as StdError;
3
4#[cfg(doc)]
5use super::{TransactionV1, TransactionV1Builder};
6
7/// Errors returned while building a [`TransactionV1`] using a [`TransactionV1Builder`].
8#[derive(Clone, Eq, PartialEq, Debug)]
9#[non_exhaustive]
10pub enum TransactionV1BuilderError {
11    /// Failed to build transaction due to missing initiator_addr.
12    ///
13    /// Call [`TransactionV1Builder::with_initiator_addr`] or
14    /// [`TransactionV1Builder::with_secret_key`] before calling [`TransactionV1Builder::build`].
15    MissingInitiatorAddr,
16    /// Failed to build transaction due to missing chain name.
17    ///
18    /// Call [`TransactionV1Builder::with_chain_name`] before calling
19    /// [`TransactionV1Builder::build`].
20    MissingChainName,
21    /// Failed to build transaction due to an error when calling `to_bytes` on one of the payload
22    /// `field`.
23    CouldNotSerializeField {
24        /// The field index that failed to serialize.
25        field_index: u16,
26    },
27}
28
29impl Display for TransactionV1BuilderError {
30    fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
31        match self {
32            TransactionV1BuilderError::MissingInitiatorAddr => {
33                write!(
34                    formatter,
35                    "transaction requires account - use `with_account` or `with_secret_key`"
36                )
37            }
38            TransactionV1BuilderError::MissingChainName => {
39                write!(
40                    formatter,
41                    "transaction requires chain name - use `with_chain_name`"
42                )
43            }
44            TransactionV1BuilderError::CouldNotSerializeField { field_index } => {
45                write!(formatter, "Cannot serialize field at index {}", field_index)
46            }
47        }
48    }
49}
50
51impl StdError for TransactionV1BuilderError {}