claude-agent 0.2.25

Rust SDK for building AI agents with Anthropic's Claude - Direct API, no CLI dependency
Documentation
//! Common utilities for cloud adapters.

use crate::{Error, Result};

pub struct RequestExecutor;

impl RequestExecutor {
    pub async fn post(
        http: &reqwest::Client,
        url: &str,
        body: &serde_json::Value,
        headers: Vec<(String, String)>,
    ) -> Result<reqwest::Response> {
        let mut req = http
            .post(url)
            .header("Content-Type", "application/json")
            .json(body);

        for (name, value) in headers {
            req = req.header(&name, &value);
        }

        let response = req.send().await?;
        Self::check_response(response).await
    }

    pub async fn post_bytes(
        http: &reqwest::Client,
        url: &str,
        body: Vec<u8>,
        headers: Vec<(String, String)>,
    ) -> Result<reqwest::Response> {
        let mut req = http
            .post(url)
            .header("Content-Type", "application/json")
            .header("Accept", "application/json")
            .body(body);

        for (name, value) in headers {
            req = req.header(&name, &value);
        }

        let response = req.send().await?;
        Self::check_response(response).await
    }

    async fn check_response(response: reqwest::Response) -> Result<reqwest::Response> {
        if !response.status().is_success() {
            let status = response.status().as_u16();
            let text = response.text().await.unwrap_or_default();
            return Err(Error::Api {
                message: text,
                status: Some(status),
                error_type: None,
            });
        }
        Ok(response)
    }
}