use crate::core::types::AccountType;
#[derive(Debug, Clone)]
pub struct BingxUrls {
pub base_rest: &'static str,
}
impl BingxUrls {
pub const MAINNET: Self = Self {
base_rest: "https://open-api.bingx.com",
};
pub fn rest_url(&self, _account_type: AccountType) -> &str {
self.base_rest
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum BingxEndpoint {
SpotSymbols,
SpotTrades,
SpotDepth,
SpotKlines,
SpotTicker24hr,
SpotTickerPrice,
SpotTickerBookTicker,
SpotOrder,
SpotOpenOrders,
SpotHistoryOrders,
SpotCancelAllOrders,
SpotBalance,
SpotCommissionRate,
SwapContracts,
SwapDepth,
SwapTrades,
SwapKlines,
SwapTicker,
SwapOrder,
SwapOpenOrders,
SwapAllOrders,
SwapCancelAllOrders,
SwapBatchOrders,
SwapBatchCancelOrders,
SwapCloseAllPositions,
SwapAmend,
SwapFundingRate,
SwapBalance,
SwapCommissionRate,
SwapIncome,
SwapPositions,
SwapLeverage,
SwapMarginType,
InnerTransfer,
TransferHistory,
DepositAddress,
Withdraw,
DepositHistory,
WithdrawHistory,
SubAccountCreate,
SubAccountList,
SubAccountTransfer,
SubAccountAssets,
SpotMyTrades,
SwapAllFillOrders,
SwapFillHistory,
SwapOpenInterest,
SwapFundingRateHistory,
SwapPremiumIndex,
}
impl BingxEndpoint {
pub fn path(&self) -> &'static str {
match self {
Self::SpotSymbols => "/openApi/spot/v1/common/symbols",
Self::SpotTrades => "/openApi/spot/v1/market/trades",
Self::SpotDepth => "/openApi/spot/v1/market/depth",
Self::SpotKlines => "/openApi/spot/v1/market/kline",
Self::SpotTicker24hr => "/openApi/spot/v1/ticker/24hr",
Self::SpotTickerPrice => "/openApi/spot/v1/ticker/price",
Self::SpotTickerBookTicker => "/openApi/spot/v1/ticker/bookTicker",
Self::SpotOrder => "/openApi/spot/v1/trade/order",
Self::SpotOpenOrders => "/openApi/spot/v1/trade/openOrders",
Self::SpotHistoryOrders => "/openApi/spot/v1/trade/historyOrders",
Self::SpotCancelAllOrders => "/openApi/spot/v1/trade/cancelAllOrders",
Self::SpotBalance => "/openApi/spot/v1/account/balance",
Self::SpotCommissionRate => "/openApi/spot/v1/account/commissionRate",
Self::SwapContracts => "/openApi/swap/v2/quote/contracts",
Self::SwapDepth => "/openApi/swap/v2/quote/depth",
Self::SwapTrades => "/openApi/swap/v2/quote/trades",
Self::SwapKlines => "/openApi/swap/v2/quote/klines",
Self::SwapTicker => "/openApi/swap/v2/quote/ticker",
Self::SwapOrder => "/openApi/swap/v2/trade/order",
Self::SwapOpenOrders => "/openApi/swap/v2/trade/openOrders",
Self::SwapAllOrders => "/openApi/swap/v2/trade/allOrders",
Self::SwapCancelAllOrders => "/openApi/swap/v2/trade/allOpenOrders",
Self::SwapBatchOrders => "/openApi/swap/v2/trade/batchOrders",
Self::SwapBatchCancelOrders => "/openApi/swap/v2/trade/batchOrders",
Self::SwapCloseAllPositions => "/openApi/swap/v2/trade/closeAllPositions",
Self::SwapAmend => "/openApi/swap/v1/trade/amend",
Self::SwapFundingRate => "/openApi/swap/v2/quote/fundingRate",
Self::SwapBalance => "/openApi/swap/v2/user/balance",
Self::SwapCommissionRate => "/openApi/swap/v2/user/commissionRate",
Self::SwapIncome => "/openApi/swap/v2/user/income",
Self::SwapPositions => "/openApi/swap/v2/user/positions",
Self::SwapLeverage => "/openApi/swap/v2/trade/leverage",
Self::SwapMarginType => "/openApi/swap/v2/trade/marginType",
Self::InnerTransfer => "/openApi/api/v3/post/account/innerTransfer",
Self::TransferHistory => "/openApi/api/v3/get/asset/transfer",
Self::DepositAddress => "/openApi/wallets/v1/capital/deposit/address",
Self::Withdraw => "/openApi/wallets/v1/capital/withdraw/apply",
Self::DepositHistory => "/openApi/api/v3/capital/deposit/hisrec",
Self::WithdrawHistory => "/openApi/api/v3/capital/withdraw/history",
Self::SubAccountCreate => "/openApi/subAccount/v1/create",
Self::SubAccountList => "/openApi/subAccount/v1/list",
Self::SubAccountTransfer => "/openApi/subAccount/v1/transfer",
Self::SubAccountAssets => "/openApi/subAccount/v1/assets",
Self::SpotMyTrades => "/openApi/spot/v1/trade/myTrades",
Self::SwapAllFillOrders => "/openApi/swap/v2/trade/allFillOrders",
Self::SwapFillHistory => "/openApi/swap/v2/trade/fillHistory",
Self::SwapOpenInterest => "/openApi/swap/v2/quote/openInterest",
Self::SwapFundingRateHistory => "/openApi/swap/v2/quote/fundingRateHistory",
Self::SwapPremiumIndex => "/openApi/swap/v2/quote/premiumIndex",
}
}
pub fn requires_auth(&self) -> bool {
match self {
Self::SpotSymbols
| Self::SpotTrades
| Self::SpotDepth
| Self::SpotKlines
| Self::SpotTicker24hr
| Self::SpotTickerPrice
| Self::SpotTickerBookTicker
| Self::SwapContracts
| Self::SwapDepth
| Self::SwapTrades
| Self::SwapKlines
| Self::SwapTicker
| Self::SwapOpenInterest
| Self::SwapFundingRateHistory
| Self::SwapPremiumIndex => false,
_ => true,
}
}
pub fn method(&self) -> &'static str {
match self {
Self::SpotOrder
| Self::SwapOrder
| Self::SwapBatchOrders
| Self::SwapCloseAllPositions
| Self::SwapLeverage
| Self::SwapMarginType
| Self::SwapAmend
| Self::InnerTransfer
| Self::Withdraw
| Self::SubAccountCreate
| Self::SubAccountTransfer => "POST",
Self::SpotCancelAllOrders
| Self::SwapCancelAllOrders
| Self::SwapBatchCancelOrders => "DELETE",
_ => "GET",
}
}
}
pub fn format_symbol(base: &str, quote: &str, _account_type: AccountType) -> String {
format!("{}-{}", base.to_uppercase(), quote.to_uppercase())
}
pub fn map_kline_interval(interval: &str) -> &'static str {
match interval {
"1m" => "1m",
"3m" => "3m",
"5m" => "5m",
"15m" => "15m",
"30m" => "30m",
"1h" => "1h",
"2h" => "2h",
"4h" => "4h",
"6h" => "6h",
"8h" => "8h",
"12h" => "12h",
"1d" => "1d",
"3d" => "3d",
"1w" => "1w",
"1M" => "1M",
_ => "1h", }
}