use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::core::{ArgMap, BytesEnvelope, EnvMap, TirEnvelope};
#[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 TxWitness {
#[serde(rename = "key")]
pub key: BytesEnvelope,
#[serde(rename = "signature")]
pub signature: BytesEnvelope,
#[serde(rename = "type")]
pub witness_type: WitnessType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum WitnessType {
VKey,
}
#[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)]
#[serde(rename_all = "snake_case")]
pub enum TxStage {
Pending,
Propagated,
Acknowledged,
Confirmed,
Finalized,
Dropped,
RolledBack,
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxStatus {
#[serde(rename = "stage")]
pub stage: TxStage,
#[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>,
}
pub type TxStatusMap = HashMap<String, TxStatus>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckStatusResponse {
#[serde(rename = "statuses")]
pub statuses: TxStatusMap,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxLog {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "stage")]
pub stage: TxStage,
#[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>,
#[serde(rename = "hasMore")]
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InflightTx {
#[serde(rename = "hash")]
pub hash: String,
#[serde(rename = "stage")]
pub stage: TxStage,
#[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>,
#[serde(rename = "hasMore")]
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolveParams {
#[serde(rename = "args")]
pub args: ArgMap,
#[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 SearchSpaceDiagnostic {
#[serde(rename = "byAddressCount", skip_serializing_if = "Option::is_none")]
pub by_address_count: Option<i64>,
#[serde(rename = "byAssetClassCount", skip_serializing_if = "Option::is_none")]
pub by_asset_class_count: Option<i64>,
#[serde(rename = "byRefCount", skip_serializing_if = "Option::is_none")]
pub by_ref_count: Option<i64>,
#[serde(rename = "matched")]
pub matched: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputQueryDiagnostic {
#[serde(rename = "address", skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
#[serde(rename = "collateral")]
pub collateral: bool,
#[serde(rename = "minAmount")]
pub min_amount: std::collections::HashMap<String, String>,
#[serde(rename = "refs")]
pub refs: Vec<String>,
#[serde(rename = "supportMany")]
pub support_many: bool,
}
#[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 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 arg_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxScriptFailureDiagnostic {
#[serde(rename = "logs")]
pub logs: Vec<String>,
}