pub trait HyperLiquidEndpointRouter {
fn rest_endpoint(&self) -> &'static str;
fn ws_endpoint(&self) -> &str;
}
use super::HyperLiquid;
impl HyperLiquidEndpointRouter for HyperLiquid {
fn rest_endpoint(&self) -> &'static str {
if self.is_sandbox() {
"https://api.hyperliquid-testnet.xyz"
} else {
"https://api.hyperliquid.xyz"
}
}
fn ws_endpoint(&self) -> &str {
if self.is_sandbox() {
"wss://api.hyperliquid-testnet.xyz/ws"
} else {
"wss://api.hyperliquid.xyz/ws"
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::hyperliquid::HyperLiquidOptions;
use ccxt_core::ExchangeConfig;
fn create_test_hyperliquid() -> HyperLiquid {
HyperLiquid::builder().build().unwrap()
}
fn create_testnet_hyperliquid() -> HyperLiquid {
HyperLiquid::builder().testnet(true).build().unwrap()
}
fn create_sandbox_hyperliquid() -> HyperLiquid {
let config = ExchangeConfig {
sandbox: true,
..Default::default()
};
let options = HyperLiquidOptions::default();
HyperLiquid::new_with_options(config, options, None).unwrap()
}
#[test]
fn test_rest_endpoint_production() {
let exchange = create_test_hyperliquid();
let url = exchange.rest_endpoint();
assert_eq!(url, "https://api.hyperliquid.xyz");
assert!(!url.contains("testnet"));
}
#[test]
fn test_rest_endpoint_testnet() {
let exchange = create_testnet_hyperliquid();
let url = exchange.rest_endpoint();
assert_eq!(url, "https://api.hyperliquid-testnet.xyz");
}
#[test]
fn test_rest_endpoint_sandbox() {
let exchange = create_sandbox_hyperliquid();
let url = exchange.rest_endpoint();
assert_eq!(url, "https://api.hyperliquid-testnet.xyz");
}
#[test]
fn test_ws_endpoint_production() {
let exchange = create_test_hyperliquid();
let url = exchange.ws_endpoint();
assert_eq!(url, "wss://api.hyperliquid.xyz/ws");
assert!(!url.contains("testnet"));
}
#[test]
fn test_ws_endpoint_testnet() {
let exchange = create_testnet_hyperliquid();
let url = exchange.ws_endpoint();
assert_eq!(url, "wss://api.hyperliquid-testnet.xyz/ws");
}
#[test]
fn test_ws_endpoint_sandbox() {
let exchange = create_sandbox_hyperliquid();
let url = exchange.ws_endpoint();
assert_eq!(url, "wss://api.hyperliquid-testnet.xyz/ws");
}
#[test]
fn test_rest_endpoint_consistency_with_urls() {
let exchange = create_test_hyperliquid();
let router_url = exchange.rest_endpoint();
let urls_rest = &exchange.urls().rest;
assert_eq!(router_url, urls_rest);
}
#[test]
fn test_ws_endpoint_consistency_with_urls() {
let exchange = create_test_hyperliquid();
let router_url = exchange.ws_endpoint();
let urls_ws = &exchange.urls().ws;
assert_eq!(router_url, urls_ws);
}
#[test]
fn test_testnet_rest_endpoint_consistency_with_urls() {
let exchange = create_testnet_hyperliquid();
let router_url = exchange.rest_endpoint();
let urls_rest = &exchange.urls().rest;
assert_eq!(router_url, urls_rest);
}
#[test]
fn test_testnet_ws_endpoint_consistency_with_urls() {
let exchange = create_testnet_hyperliquid();
let router_url = exchange.ws_endpoint();
let urls_ws = &exchange.urls().ws;
assert_eq!(router_url, urls_ws);
}
#[test]
fn test_rest_endpoint_uses_https() {
let exchange = create_test_hyperliquid();
let url = exchange.rest_endpoint();
assert!(url.starts_with("https://"));
}
#[test]
fn test_ws_endpoint_uses_wss() {
let exchange = create_test_hyperliquid();
let url = exchange.ws_endpoint();
assert!(url.starts_with("wss://"));
}
#[test]
fn test_ws_endpoint_contains_ws_path() {
let exchange = create_test_hyperliquid();
let url = exchange.ws_endpoint();
assert!(url.ends_with("/ws"));
}
#[test]
fn test_is_sandbox_with_testnet_option() {
let exchange = create_testnet_hyperliquid();
assert!(exchange.is_sandbox());
}
#[test]
fn test_is_sandbox_with_config_sandbox() {
let exchange = create_sandbox_hyperliquid();
assert!(exchange.is_sandbox());
}
#[test]
fn test_is_not_sandbox_by_default() {
let exchange = create_test_hyperliquid();
assert!(!exchange.is_sandbox());
}
}