HttpClient

Struct HttpClient 

Source
pub struct HttpClient { /* private fields */ }
Expand description

Internal HTTP client that handles requests with authentication and retries

Implementations§

Source§

impl HttpClient

Source

pub fn new(config: ClientConfig) -> Result<Self, ApiError>

Source

pub async fn execute_request<T>( &self, method: Method, path: &str, body: Option<Value>, query_params: Option<Vec<(String, String)>>, options: Option<RequestOptions>, ) -> Result<T, ApiError>

Execute a request with the given method, path, and options

Source

pub async fn execute_stream_request( &self, method: Method, path: &str, body: Option<Value>, query_params: Option<Vec<(String, String)>>, options: Option<RequestOptions>, ) -> Result<ByteStream, ApiError>

Execute a request and return a streaming response (for large file downloads)

This method returns a ByteStream that can be used to download large files efficiently without loading the entire content into memory. The stream can be consumed chunk by chunk, written directly to disk, or collected into bytes.

§Examples

Option 1: Collect all bytes into memory

let stream = client.execute_stream_request(
    Method::GET,
    "/file",
    None,
    None,
    None,
).await?;

let bytes = stream.collect().await?;

Option 2: Process chunks with try_next()

let mut stream = client.execute_stream_request(
    Method::GET,
    "/large-file",
    None,
    None,
    None,
).await?;

while let Some(chunk) = stream.try_next().await? {
    process_chunk(&chunk);
}

Option 3: Stream with futures::Stream trait

use futures::StreamExt;

let stream = client.execute_stream_request(
    Method::GET,
    "/large-file",
    None,
    None,
    None,
).await?;

let mut file = tokio::fs::File::create("output.mp4").await?;
let mut stream = std::pin::pin!(stream);
while let Some(chunk) = stream.next().await {
    let chunk = chunk?;
    tokio::io::AsyncWriteExt::write_all(&mut file, &chunk).await?;
}
Source

pub async fn execute_sse_request<T>( &self, method: Method, path: &str, body: Option<Value>, query_params: Option<Vec<(String, String)>>, options: Option<RequestOptions>, terminator: Option<String>, ) -> Result<SseStream<T>, ApiError>
where T: DeserializeOwned + Send + 'static,

Execute a request and return an SSE stream

This method returns an SseStream<T> that automatically parses Server-Sent Events and deserializes the JSON data in each event.

§SSE-Specific Headers

This method automatically sets the following headers after applying custom headers, which means these headers will override any user-supplied values:

  • Accept: text/event-stream - Required for SSE protocol
  • Cache-Control: no-store - Prevents caching of streaming responses

This ensures proper SSE behavior even if custom headers are provided.

§Example
use futures::StreamExt;

let stream = client.execute_sse_request::<CompletionChunk>(
    Method::POST,
    "/stream",
    Some(serde_json::json!({"query": "Hello"})),
    None,
    None,
    Some("[[DONE]]".to_string()),
).await?;

let mut stream = std::pin::pin!(stream);
while let Some(chunk) = stream.next().await {
    let chunk = chunk?;
    println!("Received: {:?}", chunk);
}

Trait Implementations§

Source§

impl Clone for HttpClient

Source§

fn clone(&self) -> HttpClient

Returns a duplicate of the value. Read more
1.0.0 · 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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,