1use crate::client::BybitClient;
4use crate::error::Result;
5use crate::models::*;
6
7impl BybitClient {
8 pub async fn get_server_time(&self) -> Result<ServerTime> {
21 self.get_public("/v5/market/time", &[]).await
22 }
23
24 pub async fn get_instruments_info(
40 &self,
41 category: Category,
42 symbol: Option<&str>,
43 ) -> Result<InstrumentsInfo> {
44 let mut params = vec![("category", category.to_string())];
45
46 let symbol_str;
47 if let Some(s) = symbol {
48 symbol_str = s.to_string();
49 params.push(("symbol", symbol_str.clone()));
50 }
51
52 let params_ref: Vec<(&str, &str)> = params.iter().map(|(k, v)| (*k, v.as_str())).collect();
53
54 self.get_public("/v5/market/instruments-info", ¶ms_ref)
55 .await
56 }
57
58 pub async fn get_orderbook(
65 &self,
66 category: Category,
67 symbol: &str,
68 limit: Option<u32>,
69 ) -> Result<Orderbook> {
70 let cat_str = category.to_string();
71 let limit_str = limit.unwrap_or(25).to_string();
72
73 let params = vec![
74 ("category", cat_str.as_str()),
75 ("symbol", symbol),
76 ("limit", limit_str.as_str()),
77 ];
78
79 self.get_public("/v5/market/orderbook", ¶ms).await
80 }
81
82 pub async fn get_tickers(&self, category: Category, symbol: Option<&str>) -> Result<Tickers> {
88 let cat_str = category.to_string();
89 let mut params = vec![("category", cat_str.as_str())];
90
91 if let Some(s) = symbol {
92 params.push(("symbol", s));
93 }
94
95 self.get_public("/v5/market/tickers", ¶ms).await
96 }
97
98 pub async fn get_klines(
106 &self,
107 category: Category,
108 symbol: &str,
109 interval: Interval,
110 limit: Option<u32>,
111 ) -> Result<Klines> {
112 let cat_str = category.to_string();
113 let interval_str = interval.to_string();
114 let limit_str = limit.unwrap_or(200).to_string();
115
116 let params = vec![
117 ("category", cat_str.as_str()),
118 ("symbol", symbol),
119 ("interval", interval_str.as_str()),
120 ("limit", limit_str.as_str()),
121 ];
122
123 self.get_public("/v5/market/kline", ¶ms).await
124 }
125
126 pub async fn get_funding_history(
133 &self,
134 category: Category,
135 symbol: &str,
136 limit: Option<u32>,
137 ) -> Result<FundingHistory> {
138 let cat_str = category.to_string();
139 let limit_str = limit.unwrap_or(200).to_string();
140
141 let params = vec![
142 ("category", cat_str.as_str()),
143 ("symbol", symbol),
144 ("limit", limit_str.as_str()),
145 ];
146
147 self.get_public("/v5/market/funding/history", ¶ms).await
148 }
149
150 pub async fn get_recent_trades(
157 &self,
158 category: Category,
159 symbol: &str,
160 limit: Option<u32>,
161 ) -> Result<RecentTrades> {
162 let cat_str = category.to_string();
163 let limit_str = limit.unwrap_or(500).to_string();
164
165 let params = vec![
166 ("category", cat_str.as_str()),
167 ("symbol", symbol),
168 ("limit", limit_str.as_str()),
169 ];
170
171 self.get_public("/v5/market/recent-trade", ¶ms).await
172 }
173
174 pub async fn get_open_interest(
182 &self,
183 category: Category,
184 symbol: &str,
185 interval_time: &str,
186 limit: Option<u32>,
187 ) -> Result<OpenInterest> {
188 let cat_str = category.to_string();
189 let limit_str = limit.unwrap_or(50).to_string();
190
191 let params = vec![
192 ("category", cat_str.as_str()),
193 ("symbol", symbol),
194 ("intervalTime", interval_time),
195 ("limit", limit_str.as_str()),
196 ];
197
198 self.get_public("/v5/market/open-interest", ¶ms).await
199 }
200
201 pub async fn get_risk_limit(
207 &self,
208 category: Category,
209 symbol: Option<&str>,
210 ) -> Result<RiskLimits> {
211 let cat_str = category.to_string();
212 let mut params = vec![("category", cat_str.as_str())];
213
214 if let Some(s) = symbol {
215 params.push(("symbol", s));
216 }
217
218 self.get_public("/v5/market/risk-limit", ¶ms).await
219 }
220
221 pub async fn get_mark_price_kline(
223 &self,
224 category: Category,
225 symbol: &str,
226 interval: Interval,
227 limit: Option<u32>,
228 ) -> Result<Klines> {
229 let cat_str = category.to_string();
230 let interval_str = interval.to_string();
231 let limit_str = limit.unwrap_or(200).to_string();
232
233 let params = vec![
234 ("category", cat_str.as_str()),
235 ("symbol", symbol),
236 ("interval", interval_str.as_str()),
237 ("limit", limit_str.as_str()),
238 ];
239
240 self.get_public("/v5/market/mark-price-kline", ¶ms)
241 .await
242 }
243
244 pub async fn get_index_price_kline(
246 &self,
247 category: Category,
248 symbol: &str,
249 interval: Interval,
250 limit: Option<u32>,
251 ) -> Result<Klines> {
252 let cat_str = category.to_string();
253 let interval_str = interval.to_string();
254 let limit_str = limit.unwrap_or(200).to_string();
255
256 let params = vec![
257 ("category", cat_str.as_str()),
258 ("symbol", symbol),
259 ("interval", interval_str.as_str()),
260 ("limit", limit_str.as_str()),
261 ];
262
263 self.get_public("/v5/market/index-price-kline", ¶ms)
264 .await
265 }
266
267 pub async fn get_premium_index_price_kline(
269 &self,
270 category: Category,
271 symbol: &str,
272 interval: Interval,
273 limit: Option<u32>,
274 ) -> Result<Klines> {
275 let cat_str = category.to_string();
276 let interval_str = interval.to_string();
277 let limit_str = limit.unwrap_or(200).to_string();
278
279 let params = vec![
280 ("category", cat_str.as_str()),
281 ("symbol", symbol),
282 ("interval", interval_str.as_str()),
283 ("limit", limit_str.as_str()),
284 ];
285
286 self.get_public("/v5/market/premium-index-price-kline", ¶ms)
287 .await
288 }
289}