pub struct RestClient { /* private fields */ }Expand description
Main REST client with connection pooling via ureq Agent
The RestClient uses ureq’s Agent for automatic connection pooling and reuse. Cloning the client is cheap - it shares the same connection pool.
§Connection Pooling
The underlying ureq Agent maintains a connection pool that:
- Reuses TCP connections across multiple requests
- Reduces connection overhead for subsequent requests
- Automatically handles connection lifecycle
§Thread Safety
The RestClient is NOT Send/Sync due to ureq::Agent implementation. For multi-threaded usage, create a separate client per thread.
Implementations§
Source§impl RestClient
impl RestClient
Sourcepub fn new(auth: Auth) -> RestClient
pub fn new(auth: Auth) -> RestClient
Create a new REST client with authentication
§Example
use marketdata_core::{RestClient, Auth};
let client = RestClient::new(Auth::SdkToken("my-token".to_string()));Sourcepub fn with_tls(
auth: Auth,
tls: TlsConfig,
) -> Result<RestClient, MarketDataError>
pub fn with_tls( auth: Auth, tls: TlsConfig, ) -> Result<RestClient, MarketDataError>
Create a REST client with custom TLS configuration (custom root CA
or “accept invalid certs”). Prefer new() for production usage
against public Fugle endpoints.
Returns a ConfigError if the PEM in tls.root_cert_pem is malformed.
§Errors
Returns MarketDataError on transport, deserialization, validation,
or non-2xx API failures.
Sourcepub fn with_retry(self, policy: RetryPolicy) -> RestClient
pub fn with_retry(self, policy: RetryPolicy) -> RestClient
Enable transparent retry of failed requests.
By default the client does not retry — observability use cases
need real failures visible. With a RetryPolicy installed,
errors for which MarketDataError::is_retryable returns true
(HTTP 429, HTTP 5xx, transport timeouts and connection errors)
are retried with exponential backoff plus jitter, up to
max_attempts total attempts. Other errors propagate immediately.
§Example
use marketdata_core::{Auth, RestClient, RetryPolicy};
let client = RestClient::new(Auth::SdkToken("t".into()))
.with_retry(RetryPolicy::conservative());Sourcepub fn base_url(self, url: &str) -> RestClient
pub fn base_url(self, url: &str) -> RestClient
Override the base URL (useful for testing or custom endpoints)
§Example
use marketdata_core::{RestClient, Auth};
let client = RestClient::new(Auth::SdkToken("my-token".to_string()))
.base_url("https://custom.api.example.com");Sourcepub fn stock(&self) -> StockClient<'_>
pub fn stock(&self) -> StockClient<'_>
Access stock-related endpoints
§Example
use marketdata_core::{RestClient, Auth};
let client = RestClient::new(Auth::SdkToken("my-token".to_string()));
let stock_client = client.stock();Sourcepub fn futopt(&self) -> FutOptClient<'_>
pub fn futopt(&self) -> FutOptClient<'_>
Access FutOpt (futures and options) endpoints
§Example
use marketdata_core::{RestClient, Auth};
let client = RestClient::new(Auth::SdkToken("my-token".to_string()));
let futopt_client = client.futopt();Trait Implementations§
Source§impl Clone for RestClient
impl Clone for RestClient
Source§fn clone(&self) -> RestClient
fn clone(&self) -> RestClient
Clone the RestClient, sharing the same connection pool
Cloning is cheap because ureq::Agent internally uses Arc for connection pool sharing. Multiple cloned clients will share the same connection pool.
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more