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 #![allow(clippy::disallowed_methods)]
164 use super::*;
165 use crate::bitget::BitgetOptions;
166 use ccxt_core::ExchangeConfig;
167
168 fn create_test_bitget() -> Bitget {
169 Bitget::new(ExchangeConfig::default()).unwrap()
170 }
171
172 fn create_sandbox_bitget() -> Bitget {
173 let config = ExchangeConfig {
174 sandbox: true,
175 ..Default::default()
176 };
177 Bitget::new(config).unwrap()
178 }
179
180 #[test]
183 fn test_rest_endpoint_production() {
184 let bitget = create_test_bitget();
185 let url = bitget.rest_endpoint();
186 assert_eq!(url, "https://api.bitget.com");
187 assert!(!url.contains("testnet"));
188 }
189
190 #[test]
191 fn test_rest_endpoint_sandbox() {
192 let bitget = create_sandbox_bitget();
193 let url = bitget.rest_endpoint();
194 assert_eq!(url, "https://api-testnet.bitget.com");
195 }
196
197 #[test]
200 fn test_ws_endpoint_public_production() {
201 let bitget = create_test_bitget();
202 let url = bitget.ws_endpoint(EndpointType::Public);
203 assert_eq!(url, "wss://ws.bitget.com/v2/ws/public");
204 assert!(!url.contains("testnet"));
205 }
206
207 #[test]
208 fn test_ws_endpoint_public_sandbox() {
209 let bitget = create_sandbox_bitget();
210 let url = bitget.ws_endpoint(EndpointType::Public);
211 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
212 }
213
214 #[test]
217 fn test_ws_endpoint_private_production() {
218 let bitget = create_test_bitget();
219 let url = bitget.ws_endpoint(EndpointType::Private);
220 assert_eq!(url, "wss://ws.bitget.com/v2/ws/private");
221 assert!(!url.contains("testnet"));
222 }
223
224 #[test]
225 fn test_ws_endpoint_private_sandbox() {
226 let bitget = create_sandbox_bitget();
227 let url = bitget.ws_endpoint(EndpointType::Private);
228 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
229 }
230
231 #[test]
234 fn test_rest_endpoint_with_testnet_option() {
235 let config = ExchangeConfig::default();
236 let options = BitgetOptions {
237 testnet: true,
238 ..Default::default()
239 };
240 let bitget = Bitget::new_with_options(config, options).unwrap();
241
242 let url = bitget.rest_endpoint();
243 assert_eq!(url, "https://api-testnet.bitget.com");
244 }
245
246 #[test]
247 fn test_ws_endpoint_public_with_testnet_option() {
248 let config = ExchangeConfig::default();
249 let options = BitgetOptions {
250 testnet: true,
251 ..Default::default()
252 };
253 let bitget = Bitget::new_with_options(config, options).unwrap();
254
255 let url = bitget.ws_endpoint(EndpointType::Public);
256 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
257 }
258
259 #[test]
260 fn test_ws_endpoint_private_with_testnet_option() {
261 let config = ExchangeConfig::default();
262 let options = BitgetOptions {
263 testnet: true,
264 ..Default::default()
265 };
266 let bitget = Bitget::new_with_options(config, options).unwrap();
267
268 let url = bitget.ws_endpoint(EndpointType::Private);
269 assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
270 }
271
272 #[test]
275 fn test_rest_endpoint_consistency_with_urls() {
276 let bitget = create_test_bitget();
277 let router_url = bitget.rest_endpoint();
278 let urls_rest = bitget.urls().rest;
279 assert_eq!(router_url, urls_rest);
280 }
281
282 #[test]
283 fn test_ws_public_endpoint_consistency_with_urls() {
284 let bitget = create_test_bitget();
285 let router_url = bitget.ws_endpoint(EndpointType::Public);
286 let urls_ws_public = bitget.urls().ws_public;
287 assert_eq!(router_url, urls_ws_public);
288 }
289
290 #[test]
291 fn test_ws_private_endpoint_consistency_with_urls() {
292 let bitget = create_test_bitget();
293 let router_url = bitget.ws_endpoint(EndpointType::Private);
294 let urls_ws_private = bitget.urls().ws_private;
295 assert_eq!(router_url, urls_ws_private);
296 }
297
298 #[test]
299 fn test_sandbox_rest_endpoint_consistency_with_urls() {
300 let bitget = create_sandbox_bitget();
301 let router_url = bitget.rest_endpoint();
302 let urls_rest = bitget.urls().rest;
303 assert_eq!(router_url, urls_rest);
304 }
305
306 #[test]
307 fn test_sandbox_ws_public_endpoint_consistency_with_urls() {
308 let bitget = create_sandbox_bitget();
309 let router_url = bitget.ws_endpoint(EndpointType::Public);
310 let urls_ws_public = bitget.urls().ws_public;
311 assert_eq!(router_url, urls_ws_public);
312 }
313
314 #[test]
315 fn test_sandbox_ws_private_endpoint_consistency_with_urls() {
316 let bitget = create_sandbox_bitget();
317 let router_url = bitget.ws_endpoint(EndpointType::Private);
318 let urls_ws_private = bitget.urls().ws_private;
319 assert_eq!(router_url, urls_ws_private);
320 }
321
322 #[test]
325 fn test_endpoint_type_public_is_public() {
326 assert!(EndpointType::Public.is_public());
327 assert!(!EndpointType::Public.is_private());
328 }
329
330 #[test]
331 fn test_endpoint_type_private_is_private() {
332 assert!(EndpointType::Private.is_private());
333 assert!(!EndpointType::Private.is_public());
334 }
335
336 #[test]
339 fn test_rest_endpoint_uses_https() {
340 let bitget = create_test_bitget();
341 let url = bitget.rest_endpoint();
342 assert!(url.starts_with("https://"));
343 }
344
345 #[test]
346 fn test_ws_endpoint_uses_wss() {
347 let bitget = create_test_bitget();
348
349 let ws_public = bitget.ws_endpoint(EndpointType::Public);
350 assert!(ws_public.starts_with("wss://"));
351
352 let ws_private = bitget.ws_endpoint(EndpointType::Private);
353 assert!(ws_private.starts_with("wss://"));
354 }
355
356 #[test]
357 fn test_ws_endpoint_contains_v2_path() {
358 let bitget = create_test_bitget();
359
360 let ws_public = bitget.ws_endpoint(EndpointType::Public);
361 assert!(ws_public.contains("/v2/ws/"));
362
363 let ws_private = bitget.ws_endpoint(EndpointType::Private);
364 assert!(ws_private.contains("/v2/ws/"));
365 }
366}