1use serde::{Deserialize, Serialize};
3
4use crate::interop::{BytesEncoding, BytesEnvelope};
5
6pub type EnvMap = serde_json::Map<String, serde_json::Value>;
7pub type JsonArgMap = serde_json::Map<String, serde_json::Value>;
8
9#[derive(Debug, Deserialize, Serialize, Clone)]
10pub struct TirEnvelope {
11 #[serde(alias = "bytecode", alias = "payload")]
13 pub content: String,
14 pub encoding: BytesEncoding,
15 pub version: String,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct SubmitParams {
20 #[serde(rename = "tx")]
21 pub tx: BytesEnvelope,
22 #[serde(rename = "witnesses")]
23 pub witnesses: Vec<TxWitness>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct TxEnvelope {
28 #[serde(rename = "hash")]
29 pub hash: String,
30 #[serde(rename = "tx")]
31 pub tx: String,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct SubmitResponse {
36 #[serde(rename = "hash")]
37 pub hash: String,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct SearchSpaceDiagnostic {
42 #[serde(rename = "by_address_count")]
43 pub by_address_count: Option<usize>,
44 #[serde(rename = "by_asset_class_count")]
45 pub by_asset_class_count: Option<usize>,
46 #[serde(rename = "by_ref_count")]
47 pub by_ref_count: Option<usize>,
48 #[serde(rename = "matched")]
49 pub matched: Vec<String>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct InputQueryDiagnostic {
54 #[serde(rename = "address")]
55 pub address: Option<String>,
56 #[serde(rename = "collateral")]
57 pub collateral: bool,
58 #[serde(rename = "min_amount")]
59 pub min_amount: std::collections::HashMap<String, String>,
60 #[serde(rename = "refs")]
61 pub refs: Vec<String>,
62 #[serde(rename = "support_many")]
63 pub support_many: bool,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct ResolveParams {
68 #[serde(rename = "args")]
69 pub args: JsonArgMap,
70 #[serde(rename = "tir")]
71 pub tir: TirEnvelope,
72 #[serde(rename = "env", skip_serializing_if = "Option::is_none")]
73 pub env: Option<EnvMap>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct TxSignature {
78 #[serde(rename = "key")]
79 pub key: BytesEnvelope,
80 #[serde(rename = "signature")]
81 pub signature: BytesEnvelope,
82 #[serde(rename = "type")]
83 pub ty: String,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
87#[serde(untagged)]
88pub enum TxWitness {
89 Signature(TxSignature),
90 RawWitness(BytesEnvelope),
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct UnsupportedTirDiagnostic {
95 #[serde(rename = "expected")]
96 pub expected: String,
97 #[serde(rename = "provided")]
98 pub provided: String,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct InputNotResolvedDiagnostic {
103 #[serde(rename = "name")]
104 pub name: String,
105 #[serde(rename = "query")]
106 pub query: InputQueryDiagnostic,
107 #[serde(rename = "search_space")]
108 pub search_space: SearchSpaceDiagnostic,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct MissingTxArgDiagnostic {
113 #[serde(rename = "key")]
114 pub key: String,
115 #[serde(rename = "type")]
116 pub ty: String,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct TxScriptFailureDiagnostic {
121 #[serde(rename = "logs")]
122 pub logs: Vec<String>,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct ChainPoint {
129 #[serde(rename = "slot")]
130 pub slot: u64,
131 #[serde(rename = "blockHash")]
132 pub block_hash: String,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct TxStatus {
137 #[serde(rename = "stage")]
138 pub stage: String,
139 #[serde(rename = "confirmations")]
140 pub confirmations: u64,
141 #[serde(rename = "nonConfirmations")]
142 pub non_confirmations: u64,
143 #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
144 pub confirmed_at: Option<ChainPoint>,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize)]
148pub struct CheckStatusResponse {
149 #[serde(rename = "statuses")]
150 pub statuses: std::collections::HashMap<String, TxStatus>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct TxLog {
155 #[serde(rename = "hash")]
156 pub hash: String,
157 #[serde(rename = "stage")]
158 pub stage: String,
159 #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
160 pub payload: Option<String>,
161 #[serde(rename = "confirmations")]
162 pub confirmations: u64,
163 #[serde(rename = "nonConfirmations")]
164 pub non_confirmations: u64,
165 #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
166 pub confirmed_at: Option<ChainPoint>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize)]
170pub struct DumpLogsResponse {
171 #[serde(rename = "entries")]
172 pub entries: Vec<TxLog>,
173 #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
174 pub next_cursor: Option<u64>,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct PendingTx {
179 #[serde(rename = "hash")]
180 pub hash: String,
181 #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
182 pub payload: Option<String>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
186pub struct PeekPendingResponse {
187 #[serde(rename = "entries")]
188 pub entries: Vec<PendingTx>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct InflightTx {
193 #[serde(rename = "hash")]
194 pub hash: String,
195 #[serde(rename = "stage")]
196 pub stage: String,
197 #[serde(rename = "confirmations")]
198 pub confirmations: u64,
199 #[serde(rename = "nonConfirmations")]
200 pub non_confirmations: u64,
201 #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
202 pub confirmed_at: Option<ChainPoint>,
203 #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
204 pub payload: Option<String>,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct PeekInflightResponse {
209 #[serde(rename = "entries")]
210 pub entries: Vec<InflightTx>,
211}