ccxt_exchanges/bitget/
endpoint_router.rs1use ccxt_core::types::EndpointType;
43
44pub trait BitgetEndpointRouter {
61 fn rest_endpoint(&self) -> &'static str;
87
88 fn ws_endpoint(&self, endpoint_type: EndpointType) -> &str;
130}
131
132use super::Bitget;
133
134impl BitgetEndpointRouter for Bitget {
135 fn rest_endpoint(&self) -> &'static str {
136 if self.is_sandbox() {
139 "https://api-testnet.bitget.com"
140 } else {
141 "https://api.bitget.com"
142 }
143 }
144
145 fn ws_endpoint(&self, endpoint_type: EndpointType) -> &str {
146 if self.is_sandbox() {
148 match endpoint_type {
149 EndpointType::Public => "wss://ws-testnet.bitget.com/v2/ws/public",
150 EndpointType::Private => "wss://ws-testnet.bitget.com/v2/ws/private",
151 }
152 } else {
153 match endpoint_type {
154 EndpointType::Public => "wss://ws.bitget.com/v2/ws/public",
155 EndpointType::Private => "wss://ws.bitget.com/v2/ws/private",
156 }
157 }
158 }
159}
160
161#[cfg(test)]
162mod tests {
163 use super::*;
164 use crate::bitget::BitgetOptions;
165 use ccxt_core::ExchangeConfig;
166
167 fn create_test_bitget() -> Bitget {
168 Bitget::new(ExchangeConfig::default()).unwrap()
169 }
170
171 fn create_sandbox_bitget() -> Bitget {
172 let config = ExchangeConfig {
173 sandbox: true,
174 ..Default::default()
175 };
176 Bitget::new(config).unwrap()
177 }
178
179 #[test]
182 fn test_rest_endpoint_production() {
183 let bitget = create_test_bitget();
184 let url = bitget.rest_endpoint();
185 assert_eq!(url, "https://api.bitget.com");
186 assert!(!url.contains("testnet"));
187 }
188
189 #[test]
190 fn test_rest_endpoint_sandbox() {
191 let bitget = create_sandbox_bitget();
192 let url = bitget.rest_endpoint();
193 assert_eq!(url, "https://api-testnet.bitget.com");
194 }
195
196 #[test]
199 fn test_ws_endpoint_public_production() {
200 let bitget = create_test_bitget();
201 let url = bitget.ws_endpoint(EndpointType::Public);
202 assert_eq!(url, "wss://ws.bitget.com/v2/ws/public");
203 assert!(!url.contains("testnet"));
204 }
205
206 #[test]
207 fn test_ws_endpoint_public_sandbox() {
208 let bitget = create_sandbox_bitget();
209 let url = bitget.ws_endpoint(EndpointType::Public);
210 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
211 }
212
213 #[test]
216 fn test_ws_endpoint_private_production() {
217 let bitget = create_test_bitget();
218 let url = bitget.ws_endpoint(EndpointType::Private);
219 assert_eq!(url, "wss://ws.bitget.com/v2/ws/private");
220 assert!(!url.contains("testnet"));
221 }
222
223 #[test]
224 fn test_ws_endpoint_private_sandbox() {
225 let bitget = create_sandbox_bitget();
226 let url = bitget.ws_endpoint(EndpointType::Private);
227 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
228 }
229
230 #[test]
233 fn test_rest_endpoint_with_testnet_option() {
234 let config = ExchangeConfig::default();
235 let options = BitgetOptions {
236 testnet: true,
237 ..Default::default()
238 };
239 let bitget = Bitget::new_with_options(config, options).unwrap();
240
241 let url = bitget.rest_endpoint();
242 assert_eq!(url, "https://api-testnet.bitget.com");
243 }
244
245 #[test]
246 fn test_ws_endpoint_public_with_testnet_option() {
247 let config = ExchangeConfig::default();
248 let options = BitgetOptions {
249 testnet: true,
250 ..Default::default()
251 };
252 let bitget = Bitget::new_with_options(config, options).unwrap();
253
254 let url = bitget.ws_endpoint(EndpointType::Public);
255 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
256 }
257
258 #[test]
259 fn test_ws_endpoint_private_with_testnet_option() {
260 let config = ExchangeConfig::default();
261 let options = BitgetOptions {
262 testnet: true,
263 ..Default::default()
264 };
265 let bitget = Bitget::new_with_options(config, options).unwrap();
266
267 let url = bitget.ws_endpoint(EndpointType::Private);
268 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
269 }
270
271 #[test]
274 fn test_rest_endpoint_consistency_with_urls() {
275 let bitget = create_test_bitget();
276 let router_url = bitget.rest_endpoint();
277 let urls_rest = bitget.urls().rest;
278 assert_eq!(router_url, urls_rest);
279 }
280
281 #[test]
282 fn test_ws_public_endpoint_consistency_with_urls() {
283 let bitget = create_test_bitget();
284 let router_url = bitget.ws_endpoint(EndpointType::Public);
285 let urls_ws_public = bitget.urls().ws_public;
286 assert_eq!(router_url, urls_ws_public);
287 }
288
289 #[test]
290 fn test_ws_private_endpoint_consistency_with_urls() {
291 let bitget = create_test_bitget();
292 let router_url = bitget.ws_endpoint(EndpointType::Private);
293 let urls_ws_private = bitget.urls().ws_private;
294 assert_eq!(router_url, urls_ws_private);
295 }
296
297 #[test]
298 fn test_sandbox_rest_endpoint_consistency_with_urls() {
299 let bitget = create_sandbox_bitget();
300 let router_url = bitget.rest_endpoint();
301 let urls_rest = bitget.urls().rest;
302 assert_eq!(router_url, urls_rest);
303 }
304
305 #[test]
306 fn test_sandbox_ws_public_endpoint_consistency_with_urls() {
307 let bitget = create_sandbox_bitget();
308 let router_url = bitget.ws_endpoint(EndpointType::Public);
309 let urls_ws_public = bitget.urls().ws_public;
310 assert_eq!(router_url, urls_ws_public);
311 }
312
313 #[test]
314 fn test_sandbox_ws_private_endpoint_consistency_with_urls() {
315 let bitget = create_sandbox_bitget();
316 let router_url = bitget.ws_endpoint(EndpointType::Private);
317 let urls_ws_private = bitget.urls().ws_private;
318 assert_eq!(router_url, urls_ws_private);
319 }
320
321 #[test]
324 fn test_endpoint_type_public_is_public() {
325 assert!(EndpointType::Public.is_public());
326 assert!(!EndpointType::Public.is_private());
327 }
328
329 #[test]
330 fn test_endpoint_type_private_is_private() {
331 assert!(EndpointType::Private.is_private());
332 assert!(!EndpointType::Private.is_public());
333 }
334
335 #[test]
338 fn test_rest_endpoint_uses_https() {
339 let bitget = create_test_bitget();
340 let url = bitget.rest_endpoint();
341 assert!(url.starts_with("https://"));
342 }
343
344 #[test]
345 fn test_ws_endpoint_uses_wss() {
346 let bitget = create_test_bitget();
347
348 let ws_public = bitget.ws_endpoint(EndpointType::Public);
349 assert!(ws_public.starts_with("wss://"));
350
351 let ws_private = bitget.ws_endpoint(EndpointType::Private);
352 assert!(ws_private.starts_with("wss://"));
353 }
354
355 #[test]
356 fn test_ws_endpoint_contains_v2_path() {
357 let bitget = create_test_bitget();
358
359 let ws_public = bitget.ws_endpoint(EndpointType::Public);
360 assert!(ws_public.contains("/v2/ws/"));
361
362 let ws_private = bitget.ws_endpoint(EndpointType::Private);
363 assert!(ws_private.contains("/v2/ws/"));
364 }
365}