valorant_api 0.3.14

A library for interacting with the ingame Valorant-API.
Documentation
use std::collections::HashMap;
use std::str::FromStr;

use reqwest::header::{HeaderMap, HeaderName, HeaderValue};
use reqwest::{Client, Method};
use serde::de::DeserializeOwned;
use url::Url;

use crate::errors::response_error::RequestError;
use crate::utils::credentials_manager::CredentialsManager;

pub(crate) async fn fetch_endpoint<D: DeserializeOwned>(
    credentials_manager: &CredentialsManager,
    http_client: &Client,
    uri: Url,
    method: Method,
    body: &str,
    headers: &HashMap<String, String>,
) -> Result<D, RequestError> {
    let auth_headers = credentials_manager.get_auth_headers().await?;
    let headers: HeaderMap = headers
        .iter()
        .chain(auth_headers.iter())
        .filter_map(|(key, value)| {
            HeaderName::from_str(key.as_str())
                .ok()
                .and_then(|header_name| {
                    HeaderValue::from_str(value)
                        .map(|header_value| (header_name, header_value))
                        .ok()
                })
        })
        .collect();
    http_client
        .request(method, uri)
        .headers(headers)
        .body(body.to_string())
        .send()
        .await
        .map_err(RequestError::Fetch)?
        .error_for_status()
        .map_err(RequestError::Fetch)?
        .json()
        .await
        .map_err(RequestError::Fetch)
}