cloud-sdk-reqwest 0.25.0

Optional provider-neutral reqwest transport boundary for cloud-sdk.
Documentation
use std::vec::Vec;

use cloud_sdk::rate_limit::RateLimit;
use cloud_sdk::transport::{
    BlockingTransport, ResponseBuffer, ResponseContentType, ResponseHeaders, StatusCode,
    TransportRequest, TransportResponse,
};

use super::super::{BlockingClient, TransportError};

pub(super) struct CapturedResponse {
    status: StatusCode,
    body: Vec<u8>,
    content_type: Option<ResponseContentType>,
    rate_limit: Option<RateLimit>,
    headers: ResponseHeaders,
}

impl CapturedResponse {
    fn capture(response: TransportResponse<'_>) -> Self {
        Self {
            status: response.status(),
            body: response.body().to_vec(),
            content_type: response.content_type(),
            rate_limit: response.rate_limit(),
            headers: *response.headers(),
        }
    }

    pub(super) const fn status(&self) -> StatusCode {
        self.status
    }

    pub(super) fn body(&self) -> &[u8] {
        &self.body
    }

    pub(super) const fn content_type(&self) -> Option<ResponseContentType> {
        self.content_type
    }

    pub(super) const fn rate_limit(&self) -> Option<RateLimit> {
        self.rate_limit
    }

    pub(super) const fn headers(&self) -> &ResponseHeaders {
        &self.headers
    }
}

pub(super) fn send_test(
    client: &BlockingClient,
    request: TransportRequest<'_>,
    output: &mut [u8],
) -> Result<CapturedResponse, TransportError> {
    let capacity = output.len();
    let mut response = ResponseBuffer::new(output, capacity, client);
    BlockingTransport::send(client, request, response.writer())?;
    response
        .with_response(CapturedResponse::capture)
        .map_err(|_| TransportError::ResponseCommitFailed)
}