diff --git a/src/exchange/exchange_client.rs b/src/exchange/exchange_client.rs
index fd1fb703..2dfb0763 100644
--- a/src/exchange/exchange_client.rs
+++ b/src/exchange/exchange_client.rs
@@ -106,10 +106,24 @@ impl ExchangeClient {
meta: Option,
vault_address: Option
,
) -> Result {
- let client = client.unwrap_or_default();
let base_url = base_url.unwrap_or(BaseUrl::Mainnet);
+ let is_mainnet = base_url.is_mainnet();
+ let base_url = base_url.get_url();
+ Self::with_custom_url(client, wallet, base_url, is_mainnet, meta, vault_address).await
+ }
+
+ pub async fn with_custom_url(
+ client: Option,
+ wallet: PrivateKeySigner,
+ base_url: String,
+ is_mainnet: bool,
+ meta: Option,
+ vault_address: Option,
+ ) -> Result {
+ let client = client.unwrap_or_default();
+
+ let info = InfoClient::with_custom_url(None, base_url.clone(), is_mainnet, false).await?;
- let info = InfoClient::new(None, Some(base_url)).await?;
let meta = if let Some(meta) = meta {
meta
} else {
@@ -132,7 +146,8 @@ impl ExchangeClient {
vault_address,
http_client: HttpClient {
client,
- base_url: base_url.get_url(),
+ base_url,
+ is_mainnet,
},
coin_to_asset,
})
diff --git a/src/helpers.rs b/src/helpers.rs
index c642af7e..e49a66f2 100644
--- a/src/helpers.rs
+++ b/src/helpers.rs
@@ -85,6 +85,14 @@ impl BaseUrl {
BaseUrl::Testnet => TESTNET_API_URL.to_string(),
}
}
+
+ pub(crate) fn is_mainnet(&self) -> bool {
+ match self {
+ BaseUrl::Mainnet => true,
+ BaseUrl::Testnet => false,
+ BaseUrl::Localhost => false,
+ }
+ }
}
lazy_static! {
diff --git a/src/info/info_client.rs b/src/info/info_client.rs
index 4b109f97..e3ed273b 100644
--- a/src/info/info_client.rs
+++ b/src/info/info_client.rs
@@ -7,8 +7,9 @@ use tokio::sync::mpsc::UnboundedSender;
use crate::{
info::{
- CandlesSnapshotResponse, FundingHistoryResponse, L2SnapshotResponse, OpenOrdersResponse,
- OrderInfo, RecentTradesResponse, UserFillsResponse, UserStateResponse, ActiveAssetDataResponse,
+ ActiveAssetDataResponse, CandlesSnapshotResponse, FundingHistoryResponse,
+ L2SnapshotResponse, OpenOrdersResponse, OrderInfo, RecentTradesResponse, UserFillsResponse,
+ UserStateResponse,
},
meta::{AssetContext, Meta, SpotMeta, SpotMetaAndAssetCtxs},
prelude::*,
@@ -104,26 +105,41 @@ pub struct InfoClient {
impl InfoClient {
pub async fn new(client: Option, base_url: Option) -> Result {
- Self::new_internal(client, base_url, false).await
+ Self::with_base_url(client, base_url, false).await
}
pub async fn with_reconnect(
client: Option,
base_url: Option,
) -> Result {
- Self::new_internal(client, base_url, true).await
+ Self::with_base_url(client, base_url, true).await
}
- async fn new_internal(
+ async fn with_base_url(
client: Option,
base_url: Option,
reconnect: bool,
+ ) -> Result {
+ let base_url = base_url.unwrap_or(BaseUrl::Mainnet);
+ let is_mainnet = base_url.is_mainnet();
+ let base_url = base_url.get_url();
+ Self::with_custom_url(client, base_url, is_mainnet, reconnect).await
+ }
+
+ pub async fn with_custom_url(
+ client: Option,
+ base_url: String,
+ is_mainnet: bool,
+ reconnect: bool,
) -> Result {
let client = client.unwrap_or_default();
- let base_url = base_url.unwrap_or(BaseUrl::Mainnet).get_url();
Ok(InfoClient {
- http_client: HttpClient { client, base_url },
+ http_client: HttpClient {
+ client,
+ base_url,
+ is_mainnet,
+ },
ws_manager: None,
reconnect,
})
@@ -311,7 +327,11 @@ impl InfoClient {
self.send_info_request(input).await
}
- pub async fn active_asset_data(&self, user: Address, coin: String) -> Result {
+ pub async fn active_asset_data(
+ &self,
+ user: Address,
+ coin: String,
+ ) -> Result {
let input = InfoRequest::ActiveAssetData { user, coin };
self.send_info_request(input).await
}
diff --git a/src/req.rs b/src/req.rs
index f7d5e430..2ced7917 100644
--- a/src/req.rs
+++ b/src/req.rs
@@ -1,7 +1,7 @@
use reqwest::{Client, Response};
use serde::Deserialize;
-use crate::{prelude::*, BaseUrl, Error};
+use crate::{prelude::*, Error};
#[derive(Deserialize, Debug)]
struct ErrorData {
@@ -14,6 +14,7 @@ struct ErrorData {
pub struct HttpClient {
pub client: Client,
pub base_url: String,
+ pub is_mainnet: bool,
}
async fn parse_response(response: Response) -> Result {
@@ -70,6 +71,6 @@ impl HttpClient {
}
pub fn is_mainnet(&self) -> bool {
- self.base_url == BaseUrl::Mainnet.get_url()
+ self.is_mainnet
}
}