cloud-sdk-reqwest 0.32.0

Optional provider-neutral reqwest transport boundary for cloud-sdk.
Documentation
use cloud_sdk::transport::{
    AsyncExecutionError, RawResponsePolicy, ResponseWriter, TransportFailure, TransportRequest,
    drive_async_raw,
};

use super::RawAsyncClient;
use crate::asynchronous::RawHttpError;

pub(crate) trait RawAsyncTestExt {
    async fn execute_checked<'executor, 'request, 'policy, 'writer, 'buffer>(
        &'executor self,
        request: TransportRequest<'request>,
        policy: RawResponsePolicy<'policy>,
        response: &'writer mut ResponseWriter<'buffer>,
    ) -> Result<(), crate::shared::RawTransportFailure>
    where
        'executor: 'writer,
        'request: 'writer,
        'policy: 'writer,
        'buffer: 'writer;
}

impl RawAsyncTestExt for RawAsyncClient {
    async fn execute_checked<'executor, 'request, 'policy, 'writer, 'buffer>(
        &'executor self,
        request: TransportRequest<'request>,
        policy: RawResponsePolicy<'policy>,
        response: &'writer mut ResponseWriter<'buffer>,
    ) -> Result<(), crate::shared::RawTransportFailure>
    where
        'executor: 'writer,
        'request: 'writer,
        'policy: 'writer,
        'buffer: 'writer,
    {
        drive_async_raw(self, request, policy, response)
            .await
            .map_err(|error| match error {
                AsyncExecutionError::Transport(error) => error,
                AsyncExecutionError::Response(error) => TransportFailure::not_sent(match error {
                    cloud_sdk::transport::ResponseWriterError::AlreadyCommitted => {
                        RawHttpError::ResponseAlreadyCommitted
                    }
                    _ => RawHttpError::ResponseCommitFailed,
                }),
            })
    }
}