solscan_api/structs/
transaction_last.rs

1extern crate serde;
2extern crate serde_json;
3
4use serde::{Deserialize, Deserializer, Serialize};
5
6fn deserialize_optional_field<'de, T, D>(deserializer: D)
7                                         -> Result<Option<Option<T>>, D::Error>
8    where D: Deserializer<'de>,
9          T: Deserialize<'de>
10{
11    Ok(Some(Option::deserialize(deserializer)?))
12}
13
14#[derive(Debug, Serialize, Deserialize)]
15pub struct TransactionLast {
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub meta: Option<Meta>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub transaction: Option<Transaction>,
20}
21
22#[derive(Debug, Serialize, Deserialize)]
23pub struct Meta {
24    pub err: Option<Err>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub fee: Option<i64>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    #[serde(rename = "innerInstructions")]
29    pub inner_instructions: Option<Vec<Option<serde_json::Value>>>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    #[serde(rename = "loadedAddresses")]
32    pub loaded_addresses: Option<LoadedAddresses>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    #[serde(rename = "logMessages")]
35    pub log_messages: Option<Vec<String>>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    #[serde(rename = "postBalances")]
38    pub post_balances: Option<Vec<i64>>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    #[serde(rename = "postTokenBalances")]
41    pub post_token_balances: Option<Vec<TokenBalance>>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    #[serde(rename = "preBalances")]
44    pub pre_balances: Option<Vec<i64>>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    #[serde(rename = "preTokenBalances")]
47    pub pre_token_balances: Option<Vec<TokenBalance>>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub rewards: Option<Vec<Option<serde_json::Value>>>,
50    pub status: Option<Status>,
51}
52
53
54#[derive(Debug, Serialize, Deserialize)]
55pub struct Err {
56    #[serde(rename = "InstructionError")]
57    pub instruction_error: Option<Vec<InstructionErrorElement>>,
58}
59
60#[derive(Debug, Serialize, Deserialize)]
61pub struct InstructionErrorClass {
62    #[serde(skip_serializing_if = "Option::is_none")]
63    #[serde(rename = "Custom")]
64    pub custom: Option<i64>,
65}
66
67#[derive(Debug, Serialize, Deserialize)]
68pub struct LoadedAddresses {
69    pub readonly: Option<Vec<Option<serde_json::Value>>>,
70    pub writable: Option<Vec<Option<serde_json::Value>>>,
71}
72
73#[derive(Debug, Serialize, Deserialize)]
74pub struct TokenBalance {
75    #[serde(rename = "accountIndex")]
76    pub account_index: Option<i64>,
77    pub mint: Option<String>,
78    pub owner: Option<String>,
79    #[serde(rename = "uiTokenAmount")]
80    pub ui_token_amount: Option<UiTokenAmount>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    #[serde(rename = "programId")]
83    pub program_id: Option<String>,
84}
85
86#[derive(Debug, Serialize, Deserialize)]
87pub struct UiTokenAmount {
88    pub amount: Option<String>,
89    pub decimals: Option<i64>,
90    #[serde(rename = "uiAmount")]
91    pub ui_amount: Option<f64>,
92    #[serde(rename = "uiAmountString")]
93    pub ui_amount_string: Option<String>,
94
95}
96
97#[derive(Debug, Serialize, Deserialize, Default)]
98#[serde(default)]
99pub struct Status {
100    #[serde(deserialize_with = "deserialize_optional_field")]
101    #[serde(skip_serializing_if = "Option::is_none")]
102    #[serde(rename = "Ok")]
103    pub ok: Option<Option<String>>,
104    #[serde(skip_serializing_if = "Option::is_none")]
105    #[serde(rename = "Err")]
106    pub err: Option<Err>,
107}
108
109#[derive(Debug, Serialize, Deserialize)]
110pub struct Transaction {
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub message: Option<Message>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub signatures: Option<Vec<String>>,
115}
116
117#[derive(Debug, Serialize, Deserialize)]
118pub struct Message {
119    #[serde(rename = "accountKeys")]
120    pub account_keys: Option<Vec<AccountKey>>,
121    #[serde(rename = "addressTableLookups")]
122    pub address_table_lookups: Option<serde_json::Value>,
123    pub instructions: Option<Vec<Instruction>>,
124    #[serde(rename = "recentBlockhash")]
125    pub recent_blockhash: Option<String>,
126}
127
128#[derive(Debug, Serialize, Deserialize)]
129pub struct AccountKey {
130    pub pubkey: Option<String>,
131    pub signer: Option<bool>,
132    pub writable: Option<bool>,
133}
134
135#[derive(Debug, Serialize, Deserialize)]
136pub struct Instruction {
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub accounts: Option<Vec<String>>,
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub data: Option<String>,
141    #[serde(rename = "programId")]
142    pub program_id: Option<String>,
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub parsed: Option<Parsed>,
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub program: Option<String>,
147}
148
149#[derive(Debug, Serialize, Deserialize)]
150pub struct Parsed {
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub info: Option<Info>,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    #[serde(rename = "type")]
155    pub parsed_type: Option<String>,
156}
157
158#[derive(Debug, Serialize, Deserialize)]
159pub struct Info {
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub destination: Option<String>,
162    #[serde(skip_serializing_if = "Option::is_none")]
163    pub lamports: Option<i64>,
164    #[serde(skip_serializing_if = "Option::is_none")]
165    pub source: Option<String>,
166    #[serde(skip_serializing_if = "Option::is_none")]
167    #[serde(rename = "clockSysvar")]
168    pub clock_sysvar: Option<String>,
169    #[serde(skip_serializing_if = "Option::is_none")]
170    #[serde(rename = "slotHashesSysvar")]
171    pub slot_hashes_sysvar: Option<String>,
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub vote: Option<Vote>,
174    #[serde(skip_serializing_if = "Option::is_none")]
175    #[serde(rename = "voteAccount")]
176    pub vote_account: Option<String>,
177    #[serde(skip_serializing_if = "Option::is_none")]
178    #[serde(rename = "voteAuthority")]
179    pub vote_authority: Option<String>,
180    #[serde(skip_serializing_if = "Option::is_none")]
181    pub hash: Option<String>,
182    #[serde(skip_serializing_if = "Option::is_none")]
183    pub amount: Option<String>,
184    #[serde(skip_serializing_if = "Option::is_none")]
185    pub authority: Option<String>,
186}
187
188#[derive(Debug, Serialize, Deserialize)]
189pub struct Vote {
190    pub hash: Option<String>,
191    pub slots: Option<Vec<i64>>,
192    pub timestamp: Option<i64>,
193}
194
195#[derive(Debug, Serialize, Deserialize)]
196#[serde(untagged)]
197pub enum InstructionErrorElement {
198    InstructionErrorClass(InstructionErrorClass),
199    Integer(i64),
200    String(String),
201}