From 4305f035f0c35f3cb151106028382e37fdb6c863 Mon Sep 17 00:00:00 2001 From: Flori Weber Date: Sun, 11 Jun 2023 17:21:09 +0200 Subject: [PATCH] Move common request code into common.rs --- src/api/common.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/api/common.rs b/src/api/common.rs index 8b13789..b2e9d3d 100644 --- a/src/api/common.rs +++ b/src/api/common.rs @@ -1 +1,57 @@ +use reqwest::RequestBuilder; +use serde::Deserialize; +use serde_json::from_str; +use crate::{errors::ChorusLibError, instance::UserMeta, limit::LimitedRequester}; + +/// Sends a request to wherever it needs to go and performs some basic error +/// handling. +pub async fn handle_request( + request: RequestBuilder, + user: &mut UserMeta, +) -> Result { + let mut belongs_to = user.belongs_to.borrow_mut(); + match LimitedRequester::new() + .await + .send_request( + request, + crate::api::limits::LimitType::Channel, + &mut belongs_to.limits, + &mut user.limits, + ) + .await + { + Ok(response) => return Ok(response), + Err(e) => return Err(e), + } +} + +pub async fn deserialize_response Deserialize<'a>>( + request: RequestBuilder, + user: &mut UserMeta, +) -> Result { + let response = handle_request(request, user).await.unwrap(); + let response_text = match response.text().await { + Ok(string) => string, + Err(e) => { + return Err(ChorusLibError::InvalidResponseError { + error: format!( + "Error while trying to process the HTTP response into a String: {}", + e.to_string() + ), + }); + } + }; + let object = match from_str::(&response_text) { + Ok(object) => object, + Err(e) => { + return Err(ChorusLibError::InvalidResponseError { + error: format!( + "Error while trying to deserialize the JSON response into T: {}", + e.to_string() + ), + }) + } + }; + Ok(object) +}