use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Deserialize, Serialize)]
pub struct ServerTimeResponse {
pub unixtime: u64,
pub rfc1123: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct SystemStatusResponse {
pub status: String,
pub timestamp: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AssetInfoResponse {
#[serde(flatten)]
pub assets: HashMap<String, AssetInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AssetInfo {
pub aclass: String,
pub altname: String,
pub decimals: u32,
pub display_decimals: u32,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AssetPairsResponse {
#[serde(flatten)]
pub pairs: HashMap<String, AssetPairInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AssetPairInfo {
pub altname: Option<String>,
pub wsname: Option<String>,
pub aclass_base: String,
pub base: String,
pub aclass_quote: String,
pub quote: String,
pub lot: String,
pub pair_decimals: u32,
pub lot_decimals: u32,
pub lot_multiplier: u32,
pub leverage_buy: Option<Vec<u32>>,
pub leverage_sell: Option<Vec<u32>>,
pub fees: Vec<Vec<f64>>,
pub fees_maker: Option<Vec<Vec<f64>>>,
pub fee_volume_currency: Option<String>,
pub margin_call: Option<u32>,
pub margin_stop: Option<u32>,
pub ordermin: Option<String>,
pub costmin: Option<String>,
pub costprecision: Option<u32>,
pub lotmin: Option<String>,
pub tick_size: Option<String>,
pub status: Option<String>,
pub tradable: Option<bool>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TickerResponse {
#[serde(flatten)]
pub tickers: HashMap<String, TickerInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TickerInfo {
pub a: [String; 3],
pub b: [String; 3],
pub c: [String; 2],
pub v: [String; 2],
pub p: [String; 2],
pub t: [u64; 2],
pub l: [String; 2],
pub h: [String; 2],
pub o: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OhlcDataResponse {
#[serde(flatten)]
pub result: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OrderBookResponse {
#[serde(flatten)]
pub orderbook: HashMap<String, OrderBookData>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OrderBookData {
pub asks: Vec<[String; 3]>,
pub bids: Vec<[String; 3]>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TradesResponse {
#[serde(flatten)]
pub trades: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct SpreadsResponse {
#[serde(flatten)]
pub spreads: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AccountBalanceResponse {
#[serde(flatten)]
pub balances: HashMap<String, String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ExtendedBalanceResponse {
#[serde(flatten)]
pub balances: HashMap<String, String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TradeBalanceResponse {
pub eb: String,
pub tb: String,
pub m: String,
pub n: String,
pub c: String,
pub v: String,
pub e: String,
pub mf: String,
pub ml: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OpenOrdersResponse {
pub open: HashMap<String, OrderInfo>,
pub count: Option<u64>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ClosedOrdersResponse {
pub closed: HashMap<String, OrderInfo>,
pub count: Option<u64>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OrderInfo {
pub refid: Option<String>,
pub userref: Option<u64>,
pub status: String,
pub opentm: f64,
pub starttm: f64,
pub expiretm: f64,
pub descr: OrderDescription,
pub vol: String,
pub vol_exec: String,
pub cost: String,
pub fee: String,
pub price: String,
pub stopprice: String,
pub limitprice: String,
pub misc: String,
pub oflags: String,
pub trades: Option<Vec<String>>,
pub reason: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OrderDescription {
pub pair: String,
pub side: String,
pub ordertype: String,
pub price: String,
pub price2: String,
pub leverage: String,
pub order: Option<String>,
pub close: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct QueryOrdersResponse {
#[serde(flatten)]
pub orders: HashMap<String, OrderInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TradesHistoryResponse {
pub trades: HashMap<String, TradeInfo>,
pub count: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct QueryTradesResponse {
#[serde(flatten)]
pub trades: HashMap<String, TradeInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TradeInfo {
pub ordertxid: String,
pub postxid: String,
pub pair: String,
pub time: f64,
#[serde(rename = "type")]
pub trade_type: String,
pub ordertype: String,
pub price: String,
pub cost: String,
pub fee: String,
pub vol: String,
pub margin: String,
pub misc: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct OpenPositionsResponse {
#[serde(flatten)]
pub positions: HashMap<String, PositionInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct PositionInfo {
pub ordertxid: String,
pub posstatus: String,
pub pair: String,
#[serde(rename = "type")]
pub side: String,
pub ordertype: String,
pub cost: String,
pub fee: String,
pub vol: String,
pub vol_closed: String,
pub cost_closed: String,
pub fee_closed: String,
pub pl_closed: String,
pub margin: String,
pub terms: Option<String>,
pub rollover_time: Option<f64>,
pub misc: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct LedgersResponse {
pub ledger: HashMap<String, LedgerInfo>,
pub count: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct QueryLedgersResponse {
#[serde(flatten)]
pub ledgers: HashMap<String, LedgerInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct LedgerInfo {
pub refid: String,
pub time: f64,
#[serde(rename = "type")]
pub ledger_type: String,
pub subtype: Option<String>,
pub aclass: String,
pub asset: String,
pub amount: String,
pub fee: String,
pub balance: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct TradeVolumeResponse {
pub currency: String,
pub volume: String,
#[serde(default)]
pub fees: HashMap<String, FeeInfo>,
#[serde(default)]
pub fees_maker: HashMap<String, FeeInfo>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct FeeInfo {
pub fee: String,
pub minfee: Option<String>,
pub maxfee: Option<String>,
pub nextfee: Option<String>,
pub nextvolume: Option<String>,
pub tier_volume: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ExportTradesResponse {
pub id: String,
pub descr: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ExportStatusResponse {
pub reports: Vec<ExportReportStatus>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ExportReportStatus {
pub id: String,
pub report: String,
pub format: String,
pub description: String,
pub status: String,
pub createdtm: f64,
pub finishtm: Option<f64>,
pub starttm: Option<f64>,
pub totalrows: Option<u64>,
pub refid: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RetrieveExportResponse {
pub file: Option<String>,
pub error: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DeleteExportResponse {
pub id: String,
pub message: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AddOrderResponse {
pub descr: AddOrderDescr,
pub txid: Vec<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AddOrderDescr {
pub order: String,
pub close: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AddOrderBatchResponse {
pub results: Vec<AddOrderBatchItem>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AddOrderBatchItem {
pub descr: Option<String>,
pub txid: Option<Vec<String>>,
pub error: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AmendOrderResponse {
pub count: u32,
pub pending: bool,
pub descr: Option<AddOrderDescr>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct EditOrderResponse {
pub count: u32,
pub pending: bool,
pub descr: Option<AddOrderDescr>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CancelOrderResponse {
pub count: u32,
pub pending: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CancelAllOrdersResponse {
pub count: u32,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CancelAllOrdersAfterResponse {
pub current_time: Option<String>,
pub trigger_time: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CancelOrderBatchResponse {
pub results: Vec<CancelOrderResponse>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct GetWebSocketsTokenResponse {
pub token: String,
pub expires: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositMethodsResponse(pub Vec<DepositMethod>);
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositMethod {
pub method: String,
pub limit: bool,
pub fee: String,
pub gen_address: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositAddressesResponse(pub Vec<DepositAddressItem>);
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositAddressItem {
pub address: String,
pub expiretm: Option<String>,
pub new: Option<bool>,
pub qr_code: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositStatusResponse(pub Vec<DepositStatusItem>);
#[derive(Debug, Deserialize, Serialize)]
pub struct DepositStatusItem {
pub status: String,
pub txid: Option<String>,
pub address: Option<String>,
pub amount: String,
pub fee: Option<String>,
pub time: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalMethodsResponse(pub Vec<WithdrawalMethod>);
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalMethod {
pub method: String,
pub limit: bool,
pub fee: String,
pub gen_address: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalAddressesResponse(pub Vec<WithdrawalAddressItem>);
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalAddressItem {
pub address: String,
pub new: Option<bool>,
pub name: Option<String>,
pub fee: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalInformationResponse {
pub method: String,
pub limit: String,
pub amount: String,
pub fee: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawFundsResponse {
pub refid: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawStatusResponse(pub Vec<WithdrawalStatusItem>);
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawalStatusItem {
pub method: String,
pub aclass: Option<String>,
pub asset: String,
pub refid: Option<String>,
pub txid: String,
pub info: Option<String>,
pub amount: String,
pub status: String,
pub fee: String,
pub time: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WithdrawCancelResponse {
pub refid: Option<String>,
pub result: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WalletTransferResponse {
pub refid: Option<String>,
pub result: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CreateSubaccountResponse {
pub id: String,
pub name: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AccountTransferResponse {
pub refid: Option<String>,
pub status: Option<String>,
pub txid: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AllocateEarnFundsResponse {
pub txid: String,
pub asset: String,
pub amount: String,
pub method: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct DeallocateEarnFundsResponse {
pub txid: String,
pub asset: String,
pub amount: String,
pub method: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct GetAllocationStatusResponse {
pub status: Vec<StakeStatusItem>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct StakeStatusItem {
pub txid: String,
pub asset: String,
pub amount: String,
pub status: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct GetDeallocationStatusResponse {
pub status: Vec<UnstakeStatusItem>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct UnstakeStatusItem {
pub txid: String,
pub asset: String,
pub amount: String,
pub status: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ListEarnStrategiesResponse {
pub products: Vec<StakingProduct>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct StakingProduct {
pub asset: String,
pub title: String,
pub apy: String,
pub method: String,
pub min_amount: String,
pub max_amount: Option<String>,
pub lock_time: Option<u64>,
pub interval: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ListEarnAllocationsResponse {
pub transactions: Vec<StakingTransaction>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct StakingTransaction {
pub txid: String,
pub asset: String,
pub amount: String,
pub method: String,
pub status: String,
pub time: u64,
pub reward: Option<String>,
}