numbat_wasm_debug/
tx_output.rs1use crate::{async_data::*, TxLog, TxManagedTypes};
2use alloc::vec::Vec;
3use numbat_wasm::types::{Address, BoxedBytes};
4use num_bigint::BigUint;
5use std::{collections::HashMap, fmt};
6
7pub struct TxPanic {
8 pub status: u64,
9 pub message: Vec<u8>,
10}
11
12#[derive(Clone, Debug)]
13pub struct TxResult {
14 pub result_status: u64,
15 pub result_message: Vec<u8>,
16 pub result_values: Vec<Vec<u8>>,
17 pub result_logs: Vec<TxLog>,
18}
19
20impl fmt::Display for TxResult {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 let results_hex: Vec<String> = self
23 .result_values
24 .iter()
25 .map(|r| format!("0x{}", hex::encode(r)))
26 .collect();
27 write!(
28 f,
29 "TxResult {{\n\tresult_status: {},\n\tresult_values:{:?}\n}}",
30 self.result_status, results_hex
31 )
32 }
33}
34
35impl TxResult {
36 pub fn empty() -> TxResult {
37 TxResult {
38 result_status: 0,
39 result_message: Vec::new(),
40 result_values: Vec::new(),
41 result_logs: Vec::new(),
42 }
43 }
44 pub fn print(&self) {
45 println!("{}", self);
46 }
47}
48
49#[derive(Debug)]
50pub struct SendBalance {
51 pub recipient: Address,
52 pub token_identifier: BoxedBytes,
53 pub amount: BigUint,
54}
55
56#[derive(Debug)]
57pub struct TxOutput {
58 pub contract_storage: HashMap<Vec<u8>, Vec<u8>>,
59 pub managed_types: TxManagedTypes, pub result: TxResult,
61 pub send_balance_list: Vec<SendBalance>,
62 pub async_call: Option<AsyncCallTxData>,
63}
64
65impl Default for TxOutput {
66 fn default() -> Self {
67 TxOutput {
68 contract_storage: HashMap::new(),
69 managed_types: TxManagedTypes::new(),
70 result: TxResult::empty(),
71 send_balance_list: Vec::new(),
72 async_call: None,
73 }
74 }
75}
76
77impl TxOutput {
78 pub fn from_panic_obj(panic_obj: &TxPanic) -> Self {
79 TxOutput {
80 contract_storage: HashMap::new(),
81 managed_types: TxManagedTypes::new(),
82 result: TxResult {
83 result_status: panic_obj.status,
84 result_message: panic_obj.message.clone(),
85 result_values: Vec::new(),
86 result_logs: Vec::new(),
87 },
88 send_balance_list: Vec::new(),
89 async_call: None,
90 }
91 }
92
93 pub fn from_panic_string(_: &str) -> Self {
94 TxOutput {
95 contract_storage: HashMap::new(),
96 managed_types: TxManagedTypes::new(),
97 result: TxResult {
98 result_status: 4,
99 result_message: b"panic occurred".to_vec(),
100 result_values: Vec::new(),
101 result_logs: Vec::new(),
102 },
103 send_balance_list: Vec::new(),
104 async_call: None,
105 }
106 }
107}