use crate::errors::{OpenIdError, Res};
use reqwest::{RequestBuilder, Response};
use serde::de::DeserializeOwned;
use std::fmt::Display;
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)
}
#[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?)
}