nako-metadata-scraper 0.1.0-alpha.2

Official Nako metadata scraper Addon Sidecar.
Documentation
use std::{
    collections::VecDeque,
    sync::{Arc, Mutex},
};

use async_trait::async_trait;

use crate::providers::http_runtime::{
    ProviderHttpError, ProviderHttpRequest, ProviderHttpResponse, ProviderHttpResult,
    ProviderHttpRuntimeConfig, ProviderHttpTransport,
};

#[derive(Clone, Default)]
pub(super) struct FakeTransport {
    responses: Arc<Mutex<VecDeque<ProviderHttpResult<ProviderHttpResponse>>>>,
    requests: Arc<Mutex<Vec<ProviderHttpRequest>>>,
    configs: Arc<Mutex<Vec<ProviderHttpRuntimeConfig>>>,
}

impl FakeTransport {
    pub(super) fn push(&self, response: ProviderHttpResult<ProviderHttpResponse>) {
        self.responses.lock().unwrap().push_back(response);
    }

    pub(super) fn requests(&self) -> Vec<ProviderHttpRequest> {
        self.requests.lock().unwrap().clone()
    }

    pub(super) fn configs(&self) -> Vec<ProviderHttpRuntimeConfig> {
        self.configs.lock().unwrap().clone()
    }
}

#[async_trait]
impl ProviderHttpTransport for FakeTransport {
    async fn send(
        &self,
        request: ProviderHttpRequest,
        config: ProviderHttpRuntimeConfig,
    ) -> ProviderHttpResult<ProviderHttpResponse> {
        self.requests.lock().unwrap().push(request);
        self.configs.lock().unwrap().push(config);
        self.responses
            .lock()
            .unwrap()
            .pop_front()
            .unwrap_or_else(|| {
                Err(ProviderHttpError::Transport {
                    provider_id: "fake",
                    operation: "fake",
                    message: "fake transport response queue was empty".to_owned(),
                    attempts: 0,
                })
            })
    }
}