use serde::{Deserialize, Serialize};
use crate::interop::{BytesEnvelope, TirEnvelope};
pub type EnvMap = serde_json::Map<String, serde_json::Value>;
pub type JsonArgMap = serde_json::Map<String, serde_json::Value>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubmitParams {
#[serde(rename = "tx")]
pub tx: BytesEnvelope,
#[serde(rename = "witnesses")]
pub witnesses: Vec<TxWitness>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxEnvelope {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "tx")]
pub tx: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubmitResponse {
#[serde(rename = "hash")]
pub hash: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputQueryDiagnostic {
#[serde(rename = "address")]
pub address: Option<String>,
#[serde(rename = "collateral")]
pub collateral: bool,
#[serde(rename = "min_amount")]
pub min_amount: std::collections::HashMap<String, String>,
#[serde(rename = "refs")]
pub refs: Vec<String>,
#[serde(rename = "support_many")]
pub support_many: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolveParams {
#[serde(rename = "args")]
pub args: JsonArgMap,
#[serde(rename = "tir")]
pub tir: TirEnvelope,
#[serde(rename = "env", skip_serializing_if = "Option::is_none")]
pub env: Option<EnvMap>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxSignature {
#[serde(rename = "key")]
pub key: BytesEnvelope,
#[serde(rename = "signature")]
pub signature: BytesEnvelope,
#[serde(rename = "type")]
pub ty: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum TxWitness {
Signature(TxSignature),
RawWitness(BytesEnvelope),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnsupportedTirDiagnostic {
#[serde(rename = "expected")]
pub expected: String,
#[serde(rename = "provided")]
pub provided: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchSpaceDiagnostic {
#[serde(rename = "by_address_count")]
pub by_address_count: Option<usize>,
#[serde(rename = "by_asset_class_count")]
pub by_asset_class_count: Option<usize>,
#[serde(rename = "by_ref_count")]
pub by_ref_count: Option<usize>,
#[serde(rename = "matched")]
pub matched: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputNotResolvedDiagnostic {
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "query")]
pub query: InputQueryDiagnostic,
#[serde(rename = "search_space")]
pub search_space: SearchSpaceDiagnostic,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MissingTxArgDiagnostic {
#[serde(rename = "key")]
pub key: String,
#[serde(rename = "type")]
pub ty: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxScriptFailureDiagnostic {
#[serde(rename = "logs")]
pub logs: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChainPoint {
#[serde(rename = "slot")]
pub slot: u64,
#[serde(rename = "blockHash")]
pub block_hash: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxStatus {
#[serde(rename = "stage")]
pub stage: String,
#[serde(rename = "confirmations")]
pub confirmations: u64,
#[serde(rename = "nonConfirmations")]
pub non_confirmations: u64,
#[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
pub confirmed_at: Option<ChainPoint>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckStatusResponse {
#[serde(rename = "statuses")]
pub statuses: std::collections::HashMap<String, TxStatus>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxLog {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "stage")]
pub stage: String,
#[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
pub payload: Option<String>,
#[serde(rename = "confirmations")]
pub confirmations: u64,
#[serde(rename = "nonConfirmations")]
pub non_confirmations: u64,
#[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
pub confirmed_at: Option<ChainPoint>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DumpLogsResponse {
#[serde(rename = "entries")]
pub entries: Vec<TxLog>,
#[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PendingTx {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
pub payload: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PeekPendingResponse {
#[serde(rename = "entries")]
pub entries: Vec<PendingTx>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InflightTx {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "stage")]
pub stage: String,
#[serde(rename = "confirmations")]
pub confirmations: u64,
#[serde(rename = "nonConfirmations")]
pub non_confirmations: u64,
#[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
pub confirmed_at: Option<ChainPoint>,
#[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
pub payload: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PeekInflightResponse {
#[serde(rename = "entries")]
pub entries: Vec<InflightTx>,
}