use crate::Config;
#[derive(Debug, Clone)]
pub enum API {
Auth(Auth),
Market(Market),
Trade(Trade),
PortfolioEndpoint(PortfolioEndpoint),
Nav(Nav),
ApiToken(ApiToken),
Partner(Partner),
PublicPortfolio(PublicPortfolio),
}
#[derive(Debug, Clone)]
pub enum Auth {
CreateApiKey,
GetApiKey,
RevokeApiKey,
}
#[derive(Debug, Clone)]
pub enum Market {
Active,
ActiveCategory,
CategoryCount,
ActiveSlugs,
GetMarket,
OracleCandles,
FeedEvents,
Search,
}
#[derive(Debug, Clone)]
pub enum Trade {
CreateOrder,
OrderStatusBatch,
CancelCombined,
CancelBatch,
CancelOrder,
CancelAll,
Orderbook,
HistoricalPrice,
LockedBalance,
UserOrders,
MarketEvents,
}
#[derive(Debug, Clone)]
pub enum PortfolioEndpoint {
GetProfile,
Trades,
Positions,
PnlChart,
Points,
History,
Allowance,
}
#[derive(Debug, Clone)]
pub enum Nav {
GetNavigation,
GetPageByPath,
ListPageMarkets,
ListPropertyKeys,
GetPropertyKey,
ListPropertyOptions,
}
#[derive(Debug, Clone)]
pub enum ApiToken {
GetCapabilities,
Derive,
ListActive,
Revoke,
}
#[derive(Debug, Clone)]
pub enum Partner {
CreateSubAccount,
CheckAllowances,
RetryAllowances,
}
#[derive(Debug, Clone)]
pub enum PublicPortfolio {
TradedVolume,
Positions,
PnlChart,
}
#[derive(Debug, Clone)]
pub enum WebsocketAPI {
Markets,
}
impl AsRef<str> for API {
fn as_ref(&self) -> &str {
match self {
API::Auth(Auth::CreateApiKey) => "auth/api-keys",
API::Auth(Auth::GetApiKey) => "auth/api-keys",
API::Auth(Auth::RevokeApiKey) => "auth/api-keys",
API::Market(Market::Active) => "markets/active",
API::Market(Market::ActiveCategory) => "markets/active",
API::Market(Market::CategoryCount) => "markets/categories/count",
API::Market(Market::ActiveSlugs) => "markets/active/slugs",
API::Market(Market::GetMarket) => "markets",
API::Market(Market::OracleCandles) => "markets",
API::Market(Market::FeedEvents) => "markets",
API::Market(Market::Search) => "markets/search",
API::Trade(Trade::CreateOrder) => "orders",
API::Trade(Trade::OrderStatusBatch) => "orders/status/batch",
API::Trade(Trade::CancelCombined) => "orders/cancel",
API::Trade(Trade::CancelBatch) => "orders/cancel-batch",
API::Trade(Trade::CancelOrder) => "orders",
API::Trade(Trade::CancelAll) => "orders/all",
API::Trade(Trade::Orderbook) => "markets",
API::Trade(Trade::HistoricalPrice) => "markets",
API::Trade(Trade::LockedBalance) => "markets",
API::Trade(Trade::UserOrders) => "markets",
API::Trade(Trade::MarketEvents) => "markets",
API::PortfolioEndpoint(PortfolioEndpoint::GetProfile) => "profiles",
API::PortfolioEndpoint(PortfolioEndpoint::Trades) => "portfolio/trades",
API::PortfolioEndpoint(PortfolioEndpoint::Positions) => "portfolio/positions",
API::PortfolioEndpoint(PortfolioEndpoint::PnlChart) => "portfolio/pnl-chart",
API::PortfolioEndpoint(PortfolioEndpoint::Points) => "portfolio/points",
API::PortfolioEndpoint(PortfolioEndpoint::History) => "portfolio/history",
API::PortfolioEndpoint(PortfolioEndpoint::Allowance) => "portfolio/trading/allowance",
API::Nav(Nav::GetNavigation) => "navigation",
API::Nav(Nav::GetPageByPath) => "market-pages/by-path",
API::Nav(Nav::ListPageMarkets) => "market-pages",
API::Nav(Nav::ListPropertyKeys) => "property-keys",
API::Nav(Nav::GetPropertyKey) => "property-keys",
API::Nav(Nav::ListPropertyOptions) => "property-keys",
API::ApiToken(ApiToken::GetCapabilities) => "api-tokens/capabilities",
API::ApiToken(ApiToken::Derive) => "api-tokens/derive",
API::ApiToken(ApiToken::ListActive) => "api-tokens",
API::ApiToken(ApiToken::Revoke) => "api-tokens",
API::Partner(Partner::CreateSubAccount) => "profiles/partner-accounts",
API::Partner(Partner::CheckAllowances) => "profiles/partner-accounts", API::Partner(Partner::RetryAllowances) => "profiles/partner-accounts",
API::PublicPortfolio(PublicPortfolio::TradedVolume) => "public/portfolio", API::PublicPortfolio(PublicPortfolio::Positions) => "public/portfolio", API::PublicPortfolio(PublicPortfolio::PnlChart) => "public/portfolio", }
}
}
impl AsRef<str> for WebsocketAPI {
fn as_ref(&self) -> &str {
match self {
WebsocketAPI::Markets => "/markets",
}
}
}
pub trait Limitless {
fn new(api_key: Option<String>, secret: Option<String>) -> Self;
fn new_with_config(config: &Config, api_key: Option<String>, secret: Option<String>) -> Self;
}