Skip to main content

HttpClient

Struct HttpClient 

Source
pub struct HttpClient {
Show 13 fields pub http_client: Client, pub address: String, pub authorization: Option<Arc<String>>, pub user_agent: Option<String>, pub x_title: Option<String>, pub http_referer: Option<String>, pub x_github_authorization: Option<Arc<String>>, pub x_openrouter_authorization: Option<Arc<String>>, pub x_mcp_authorization: Option<Arc<HashMap<String, String>>>, pub x_viewer_signature: Option<Arc<String>>, pub x_viewer_address: Option<Arc<String>>, pub agent_instance_hierarchy: Option<Arc<String>>, pub mcp_session_id: Option<Arc<String>>,
}
Expand description

HTTP client for making requests to the ObjectiveAI API.

Handles authentication, request building, and response parsing for both unary and streaming endpoints.

§Example

let client = HttpClient::new(
    reqwest::Client::new(),
    None, // Use default address
    Some("your-api-key"),
    None, // user_agent
    None, // x_title
    None, // http_referer
    None, // x_github_authorization
    None, // x_openrouter_authorization
    None, // x_mcp_authorization
    None, // x_viewer_signature
    None, // x_viewer_address
);

Fields§

§http_client: Client

The underlying reqwest HTTP client.

§address: String

Base URL for API requests. Defaults to https://api.objectiveai.dev.

§authorization: Option<Arc<String>>

API key for authentication. Sent as Bearer token in Authorization header.

§user_agent: Option<String>

Value for the User-Agent header.

§x_title: Option<String>

Value for the X-Title header.

§http_referer: Option<String>

Value for both Referer and HTTP-Referer headers.

§x_github_authorization: Option<Arc<String>>

Value for the X-GITHUB-AUTHORIZATION header.

§x_openrouter_authorization: Option<Arc<String>>

Value for the X-OPENROUTER-AUTHORIZATION header.

§x_mcp_authorization: Option<Arc<HashMap<String, String>>>

Values for the X-MCP-AUTHORIZATION header (JSON-encoded).

§x_viewer_signature: Option<Arc<String>>

Value for the X-VIEWER-SIGNATURE header.

§x_viewer_address: Option<Arc<String>>

Value for the X-VIEWER-ADDRESS header.

§agent_instance_hierarchy: Option<Arc<String>>

Value for the X-OBJECTIVEAI-AGENT-INSTANCE-HIERARCHY header.

§mcp_session_id: Option<Arc<String>>

Value for the Mcp-Session-Id header — propagated through to objectiveai-mcp so server-side tool invocations see a stable per-session id. See objectiveai_sdk::mcp::MCP_SESSION_ID_HEADER.

Implementations§

Source§

impl HttpClient

Source

pub fn new( http_client: Client, address: Option<impl Into<String>>, authorization: Option<impl Into<String>>, user_agent: Option<impl Into<String>>, x_title: Option<impl Into<String>>, http_referer: Option<impl Into<String>>, x_github_authorization: Option<impl Into<String>>, x_openrouter_authorization: Option<impl Into<String>>, x_mcp_authorization: Option<HashMap<String, String>>, x_viewer_signature: Option<impl Into<String>>, x_viewer_address: Option<impl Into<String>>, agent_instance_hierarchy: Option<impl Into<String>>, mcp_session_id: Option<impl Into<String>>, ) -> Self

Creates a new HTTP client.

§Arguments
  • http_client - The reqwest client to use for requests
  • address - Base URL for API requests (defaults to https://api.objectiveai.dev)
  • authorization - API key for authentication
  • user_agent - Optional User-Agent header value
  • x_title - Optional X-Title header value
  • http_referer - Optional Referer header value
  • x_github_authorization - Optional X-GITHUB-AUTHORIZATION header value
  • x_openrouter_authorization - Optional X-OPENROUTER-AUTHORIZATION header value
  • x_mcp_authorization - Optional X-MCP-AUTHORIZATION header value (HashMap)
  • x_viewer_signature - Optional X-VIEWER-SIGNATURE header value
  • x_viewer_address - Optional X-VIEWER-ADDRESS header value
  • agent_instance_hierarchy - Optional X-OBJECTIVEAI-AGENT-INSTANCE-HIERARCHY header value
  • mcp_session_id - Optional Mcp-Session-Id header value
Source

pub async fn send_unary<T: DeserializeOwned + Send + 'static>( &self, method: Method, path: impl AsRef<str>, body: Option<impl Serialize>, ) -> Result<T, HttpError>

Sends a unary (request-response) API call and deserializes the response.

§Type Parameters
  • T - The expected response type to deserialize into
§Errors

Returns super::HttpError if the request fails, returns a non-success status, or the response cannot be deserialized.

Source

pub async fn send_unary_no_response( &self, method: Method, path: impl AsRef<str>, body: Option<impl Serialize>, ) -> Result<(), HttpError>

Sends a unary API call that expects no response body.

Useful for DELETE or other operations that only return a status code.

§Errors

Returns super::HttpError if the request fails or returns a non-success status.

Source

pub async fn send_streaming<T: DeserializeOwned + Send + 'static, P: AsRef<str> + Send, B: Serialize + Send>( &self, method: Method, path: P, body: Option<B>, ) -> Result<impl Stream<Item = Result<T, HttpError>> + Send + 'static + use<T, P, B>, HttpError>

Sends a streaming API call using Server-Sent Events (SSE).

Returns a stream of deserialized chunks. The stream automatically handles:

  • SSE [DONE] messages (filtered out)
  • Comment lines starting with : (filtered out)
  • Empty data lines (filtered out)
  • API errors embedded in stream data
§Type Parameters
  • T - The expected chunk type to deserialize each SSE message into
§Errors

Returns super::HttpError if the stream cannot be established.

Source

pub async fn send_streaming_ws<Chunk, B, H, P>( &self, method: Method, path: P, body: B, handler: H, ) -> Result<(impl Stream<Item = Result<Chunk, HttpError>> + Send + Unpin + 'static + use<Chunk, B, H, P>, Notifier), HttpError>
where Chunk: DeserializeOwned + Send + 'static, B: Serialize + Send + 'static, H: McpHandler, P: AsRef<str>,

WebSocket variant of Self::send_streaming. Opens a WS to the configured address, sends body as the first text frame, then demultiplexes inbound frames into:

Both the returned Stream and the returned super::Notifier share the underlying WebSocket: dropping both stops the demux task and closes the connection cleanly. Dropping only one keeps the WS alive — useful when a caller wants to send notifies after the chunk stream has finished, or vice-versa.

Source§

impl HttpClient

Source

pub async fn github_resolve_commit( &self, owner: &str, repository: &str, ) -> Result<Option<String>, HttpError>

Resolves the latest commit SHA for a repository.

Returns Ok(None) if the repository (or its commit list) cannot be found.

Source

pub async fn github_get_agent( &self, owner: &str, repository: &str, commit: Option<&str>, ) -> Result<Option<RemoteAgentBaseWithFallbacks>, HttpError>

Fetches an Agent definition (agent.json) from GitHub.

If commit is None, the latest commit is resolved first. Returns Ok(None) if the repository, commit, or file does not exist.

Source

pub async fn github_get_swarm( &self, owner: &str, repository: &str, commit: Option<&str>, ) -> Result<Option<RemoteSwarmBase>, HttpError>

Fetches a Swarm definition (swarm.json) from GitHub.

If commit is None, the latest commit is resolved first. Returns Ok(None) if the repository, commit, or file does not exist.

Source

pub async fn github_get_function( &self, owner: &str, repository: &str, commit: Option<&str>, ) -> Result<Option<FullRemoteFunction>, HttpError>

Fetches a Function definition (function.json) from GitHub.

If commit is None, the latest commit is resolved first. Returns Ok(None) if the repository, commit, or file does not exist.

Source

pub async fn github_get_profile( &self, owner: &str, repository: &str, commit: Option<&str>, ) -> Result<Option<RemoteProfile>, HttpError>

Fetches a Profile definition (profile.json) from GitHub.

If commit is None, the latest commit is resolved first. Returns Ok(None) if the repository, commit, or file does not exist.

Trait Implementations§

Source§

impl Clone for HttpClient

Source§

fn clone(&self) -> HttpClient

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HttpClient

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToAst for T

Source§

fn ast(self, begin: usize, end: usize) -> Spanned<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

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