delta_base_sdk/
transactions.rs1use primitives::type_aliases::Shard;
8use proto_types::{
9 error::{
10 MissingDataSnafu,
11 ProtoError,
12 },
13 transactions::TxFailed,
14};
15use snafu::OptionExt;
16use std::fmt::Display;
17
18pub use primitives::{
20 constants::MIN_NEW_SHARD_FEE,
21 domain_agreement::DomainAgreement,
22 transaction::*,
23};
24pub use proto_types::transactions::TypeData;
25
26#[derive(Debug, Clone, PartialEq, Eq)]
28pub struct FailureInfo {
29 pub kind: FailureKind,
31 pub originator_shard: Option<Shard>,
33}
34
35#[derive(Debug, Clone, PartialEq, Eq)]
37pub enum FailureKind {
38 WrongEpoch,
40 Other {
42 reason: String,
44 },
45}
46
47#[derive(Debug, Clone, PartialEq, Eq)]
49pub enum TransactionStatus {
50 Pending,
52 Applied,
54 Failure(String),
57}
58
59impl Display for TransactionStatus {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 match self {
62 Self::Pending => write!(f, "PENDING"),
63 Self::Applied => write!(f, "APPLIED"),
64 Self::Failure(error) => write!(f, "FAILED ({error})"),
65 }
66 }
67}
68
69impl TryFrom<proto_types::transactions::TransactionStatus> for TransactionStatus {
70 type Error = ProtoError;
71
72 fn try_from(value: proto_types::transactions::TransactionStatus) -> Result<Self, Self::Error> {
73 use proto_types::transactions::Status;
74 let status = value.status.context(MissingDataSnafu { field: "status" })?;
75 Ok(match status {
76 Status::Pending(..) => Self::Pending,
77 Status::Applied(..) => Self::Applied,
78 Status::Failed(TxFailed { error }) => Self::Failure(error),
79 })
80 }
81}