pub struct TinkoffEndpoints {
pub rest_base: &'static str,
pub ws_base: Option<&'static str>,
}
impl Default for TinkoffEndpoints {
fn default() -> Self {
Self {
rest_base: "https://invest-public-api.tbank.ru/rest",
ws_base: Some("wss://invest-public-api.tinkoff.ru/ws/"),
}
}
}
impl TinkoffEndpoints {
pub fn sandbox() -> Self {
Self {
rest_base: "https://sandbox-invest-public-api.tinkoff.ru/rest",
ws_base: Some("wss://sandbox-invest-public-api.tinkoff.ru/ws/"),
}
}
}
#[derive(Debug, Clone)]
pub enum TinkoffEndpoint {
GetCandles,
GetLastPrices,
GetOrderBook,
GetTradingStatus,
GetTradingStatuses,
GetLastTrades,
GetClosePrices,
TradingSchedules,
BondBy,
Bonds,
GetBondCoupons,
CurrencyBy,
Currencies,
EtfBy,
Etfs,
FutureBy,
Futures,
OptionBy,
OptionsBy,
ShareBy,
Shares,
GetAccruedInterests,
GetFuturesMargin,
GetInstrumentBy,
GetDividends,
GetAssetBy,
GetAssets,
GetFavorites,
EditFavorites,
GetCountries,
FindInstrument,
GetBrands,
GetBrandBy,
PostOrder,
CancelOrder,
GetOrderState,
GetOrders,
ReplaceOrder,
PostStopOrder,
GetStopOrders,
CancelStopOrder,
GetOperations,
GetPortfolio,
GetPositions,
GetWithdrawLimits,
GetBrokerReport,
GetDividendsForeignIssuer,
GetOperationsByCursor,
GetAccounts,
GetMarginAttributes,
GetUserTariff,
GetInfo,
OpenSandboxAccount,
GetSandboxAccounts,
CloseSandboxAccount,
PostSandboxOrder,
GetSandboxOrders,
CancelSandboxOrder,
GetSandboxOrderState,
GetSandboxPositions,
GetSandboxOperations,
GetSandboxPortfolio,
SandboxPayIn,
}
impl TinkoffEndpoint {
pub fn path(&self) -> &'static str {
match self {
Self::GetCandles => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetCandles",
Self::GetLastPrices => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastPrices",
Self::GetOrderBook => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetOrderBook",
Self::GetTradingStatus => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatus",
Self::GetTradingStatuses => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetTradingStatuses",
Self::GetLastTrades => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetLastTrades",
Self::GetClosePrices => "/tinkoff.public.invest.api.contract.v1.MarketDataService/GetClosePrices",
Self::TradingSchedules => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/TradingSchedules",
Self::BondBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/BondBy",
Self::Bonds => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Bonds",
Self::GetBondCoupons => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBondCoupons",
Self::CurrencyBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/CurrencyBy",
Self::Currencies => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Currencies",
Self::EtfBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/EtfBy",
Self::Etfs => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Etfs",
Self::FutureBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/FutureBy",
Self::Futures => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Futures",
Self::OptionBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionBy",
Self::OptionsBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/OptionsBy",
Self::ShareBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/ShareBy",
Self::Shares => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/Shares",
Self::GetAccruedInterests => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAccruedInterests",
Self::GetFuturesMargin => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFuturesMargin",
Self::GetInstrumentBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy",
Self::GetDividends => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetDividends",
Self::GetAssetBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssetBy",
Self::GetAssets => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetAssets",
Self::GetFavorites => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetFavorites",
Self::EditFavorites => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/EditFavorites",
Self::GetCountries => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetCountries",
Self::FindInstrument => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/FindInstrument",
Self::GetBrands => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrands",
Self::GetBrandBy => "/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetBrandBy",
Self::PostOrder => "/tinkoff.public.invest.api.contract.v1.OrdersService/PostOrder",
Self::CancelOrder => "/tinkoff.public.invest.api.contract.v1.OrdersService/CancelOrder",
Self::GetOrderState => "/tinkoff.public.invest.api.contract.v1.OrdersService/GetOrderState",
Self::GetOrders => "/tinkoff.public.invest.api.contract.v1.OrdersService/GetOrders",
Self::ReplaceOrder => "/tinkoff.public.invest.api.contract.v1.OrdersService/ReplaceOrder",
Self::PostStopOrder => "/tinkoff.public.invest.api.contract.v1.StopOrdersService/PostStopOrder",
Self::GetStopOrders => "/tinkoff.public.invest.api.contract.v1.StopOrdersService/GetStopOrders",
Self::CancelStopOrder => "/tinkoff.public.invest.api.contract.v1.StopOrdersService/CancelStopOrder",
Self::GetOperations => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetOperations",
Self::GetPortfolio => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio",
Self::GetPositions => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetPositions",
Self::GetWithdrawLimits => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetWithdrawLimits",
Self::GetBrokerReport => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetBrokerReport",
Self::GetDividendsForeignIssuer => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetDividendsForeignIssuer",
Self::GetOperationsByCursor => "/tinkoff.public.invest.api.contract.v1.OperationsService/GetOperationsByCursor",
Self::GetAccounts => "/tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts",
Self::GetMarginAttributes => "/tinkoff.public.invest.api.contract.v1.UsersService/GetMarginAttributes",
Self::GetUserTariff => "/tinkoff.public.invest.api.contract.v1.UsersService/GetUserTariff",
Self::GetInfo => "/tinkoff.public.invest.api.contract.v1.UsersService/GetInfo",
Self::OpenSandboxAccount => "/tinkoff.public.invest.api.contract.v1.SandboxService/OpenSandboxAccount",
Self::GetSandboxAccounts => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxAccounts",
Self::CloseSandboxAccount => "/tinkoff.public.invest.api.contract.v1.SandboxService/CloseSandboxAccount",
Self::PostSandboxOrder => "/tinkoff.public.invest.api.contract.v1.SandboxService/PostSandboxOrder",
Self::GetSandboxOrders => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrders",
Self::CancelSandboxOrder => "/tinkoff.public.invest.api.contract.v1.SandboxService/CancelSandboxOrder",
Self::GetSandboxOrderState => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOrderState",
Self::GetSandboxPositions => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPositions",
Self::GetSandboxOperations => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxOperations",
Self::GetSandboxPortfolio => "/tinkoff.public.invest.api.contract.v1.SandboxService/GetSandboxPortfolio",
Self::SandboxPayIn => "/tinkoff.public.invest.api.contract.v1.SandboxService/SandboxPayIn",
}
}
}
pub fn format_ticker(symbol: &crate::core::types::Symbol) -> String {
symbol.base.to_uppercase()
}
pub fn _parse_ticker(api_ticker: &str) -> crate::core::types::Symbol {
crate::core::types::Symbol::new(api_ticker, "RUB")
}