datafold 0.1.55

A personal database for data sovereignty with AI-powered ingestion
Documentation
#![cfg(feature = "aws-backend")]
use aws_smithy_runtime_api::client::http::HttpClient;
use aws_smithy_runtime_api::client::orchestrator::HttpRequest;
use aws_smithy_runtime_api::client::runtime_components::RuntimeComponents;
use std::sync::{Arc, Mutex};

#[derive(Clone, Debug)]
pub struct MockHttpClient {
    pub requests: Arc<Mutex<Vec<HttpRequest>>>,
    pub response_status: u16,
    pub response_body: String,
}

impl MockHttpClient {
    pub fn new() -> Self {
        Self {
            requests: Arc::new(Mutex::new(Vec::new())),
            response_status: 200,
            response_body: "{}".to_string(),
        }
    }

    pub fn with_response(mut self, status: u16, body: &str) -> Self {
        self.response_status = status;
        self.response_body = body.to_string();
        self
    }
}

impl HttpClient for MockHttpClient {
    fn http_connector(
        &self,
        _settings: &aws_smithy_runtime_api::client::http::HttpConnectorSettings,
        _components: &RuntimeComponents,
    ) -> aws_smithy_runtime_api::client::http::SharedHttpConnector {
        aws_smithy_runtime_api::client::http::SharedHttpConnector::new(self.clone())
    }
}

impl aws_smithy_runtime_api::client::http::HttpConnector for MockHttpClient {
    fn call(
        &self,
        request: HttpRequest,
    ) -> aws_smithy_runtime_api::client::http::HttpConnectorFuture {
        let requests = self.requests.clone();
        let status = self.response_status;
        let body = self.response_body.clone();

        aws_smithy_runtime_api::client::http::HttpConnectorFuture::new(async move {
            requests.lock().unwrap().push(request);

            let sdk_body = aws_smithy_types::body::SdkBody::from(body);
            let response = http::Response::builder()
                .status(status)
                .body(sdk_body)
                .unwrap();

            Ok(
                aws_smithy_runtime_api::client::orchestrator::HttpResponse::try_from(response)
                    .unwrap(),
            )
        })
    }
}

#[test]
fn check_mock_compiles() {
    let mock = MockHttpClient::new();
    let _ = mock;
}