use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub enum Symbol {
#[serde(rename = "ADAUSDM")]
ADAUSDM,
#[serde(rename = "HOSKYUSDM")]
HOSKYUSDM,
#[serde(rename = "NIGHTUSDM")]
NIGHTUSDM,
#[serde(rename = "IAGUSDM")]
IAGUSDM,
#[serde(rename = "SNEKUSDM")]
SNEKUSDM,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum Interval {
#[serde(rename = "5m")]
Interval5m,
#[serde(rename = "15m")]
Interval15m,
#[serde(rename = "30m")]
Interval30m,
#[serde(rename = "1h")]
Interval1h,
#[serde(rename = "1d")]
Interval1d,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum OrderStatus {
Building,
Processing,
Open,
Cancelled,
Failed,
Closed,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum OrderSide {
Buy,
Sell,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum OrderType {
Market,
Limit,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum TransactionStatus {
Building,
HeldForOrder,
Submitted,
SubmissionFailed,
Confirmed,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum TransferStatus {
Pending,
Confirmed,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum TransferDirection {
Incoming,
Outgoing,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum TransferalType {
Normal,
Deposit,
Withdrawal,
Rebate,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum OrderExecutionRole {
Maker,
Taker,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum OrderRecordStatus {
OpenOrder,
OrderHistory,
TradingHistory,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct OrderExecutionRecord {
pub id: String,
pub order_id: String,
pub account_id: String,
pub execution_price: String,
pub filled_base_qty: String,
pub filled_quote_qty: String,
pub commission_unit: String,
pub commission: String,
pub role: OrderExecutionRole,
pub counter_party_order_id: String,
pub created_at: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Order {
pub id: String,
pub account_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_order_utxo_id: Option<String>,
pub status: OrderStatus,
pub symbol: String,
pub base_qty: String,
pub quote_qty: String,
pub side: OrderSide,
pub price: String,
#[serde(rename = "type")]
pub order_type: OrderType,
#[serde(skip_serializing_if = "Option::is_none")]
pub slippage_bp: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub market_order_limit_price: Option<String>,
pub locked_base_qty: String,
pub locked_quote_qty: String,
pub executed_base_qty: String,
pub executed_quote_qty: String,
pub ob_open_order_base_qty: String,
pub commission_unit: String,
pub commission: String,
pub commission_rate_bp: u64,
pub executed_price: String,
pub created_at: String,
pub updated_at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_execution_records: Option<Vec<OrderExecutionRecord>>,
}
pub type OrderResponse = Order;
pub type OrderExecutionRecordResponse = OrderExecutionRecord;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct DepositRecord {
pub created_at: String,
pub status: TransactionStatus,
pub assets: Vec<Asset>,
pub tx_hash: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WithdrawalRecord {
pub created_at: String,
pub status: TransactionStatus,
pub assets: Vec<Asset>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TransferalRecord {
pub created_at: String,
pub status: TransferStatus,
pub assets: Vec<Asset>,
pub transferal_type: TransferalType,
pub tx_hash: String,
pub direction: TransferDirection,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct AssetBalance {
pub asset: String,
pub asset_unit: String,
pub free: String,
pub locked: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Asset {
pub asset: String,
pub asset_unit: String,
pub qty: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PaginatedResponse<T> {
pub data: Vec<T>,
pub total_count: i64,
pub total_page: i64,
}