Skip to main content

RestClient

Struct RestClient 

Source
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

Source

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()));
Source

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.

Source

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());
Source

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");
Source

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();
Source

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

Source§

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)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V