light-openid 2.0.3

Lightweight OpenID primitives & client
Documentation
use crate::errors::{OpenIdError, Res};
use reqwest::{RequestBuilder, Response};
use serde::de::DeserializeOwned;
use std::fmt::Display;

/// Perform an HTTP request
pub(crate) async fn send_request(req: RequestBuilder) -> Res<Response> {
    let res = req.send().await?;

    if !res.status().is_success() {
        let status = res.status();
        tracing::trace!("HTTP response: {:?}", res.text().await);
        return Err(OpenIdError::HTTPRequestFailedWithInvalidStatus(status));
    }

    Ok(res)
}

/// Perform GET request
#[tracing::instrument(level = "debug", err, skip(url), fields(url = %url))]
pub(crate) async fn get_json_request<E: DeserializeOwned>(url: impl Display) -> Res<E> {
    Ok(send_request(reqwest::Client::new().get(url.to_string()))
        .await?
        .json()
        .await?)
}