pub use reqwest::{Client, Response, Request, Error as RequestError};
use rumtk_core::base::RUMResult;
use rumtk_core::buffers::RUMBuffer;
use rumtk_core::rumtk_resolve_task;
use rumtk_core::serde::RUMSerJson;
use rumtk_core::strings::rumtk_format;
pub type RUMWebClient = Client;
pub type RUMWebClientResponse = (u16, RUMBuffer);
#[inline]
async fn consume_response(response: Response) -> RUMResult<RUMWebClientResponse> {
let response_code = response.status().as_u16();
let url = response.url().to_string();
let response = response.bytes().await;
match response {
Ok(text) => Ok((response_code, RUMBuffer::from(text.as_ref()))),
Err(e) => Err(rumtk_format!("No response from {} because {}", url, e)),
}
}
#[inline]
pub async fn rumtk_web_get(url: String) -> RUMResult<RUMWebClientResponse> {
let client = Client::new();
let response = match client.get(&url).send().await {
Ok(r) => r,
Err(e) => return Err(rumtk_format!("Get request failed for {} because {}", &url, e)),
};
consume_response(response).await
}
#[inline]
pub fn rumtk_web_sync_get(url: &str) -> RUMResult<RUMWebClientResponse> {
let url = url.to_string();
rumtk_resolve_task!(rumtk_web_get(url))
}
pub async fn rumtk_web_post<T: RUMSerJson + Sync + Send + 'static>(url: String, data: T) -> RUMResult<RUMWebClientResponse> {
let client = Client::new();
let response = match client.post(&url).json(&data).send().await {
Ok(r) => r,
Err(e) => return Err(rumtk_format!("Post request failed for {} because {}", &url, e)),
};
consume_response(response).await
}
pub fn rumtk_web_sync_post<T: RUMSerJson + Sync + Send + 'static>(url: &str, data: T) -> RUMResult<RUMWebClientResponse> {
let url = url.to_string();
rumtk_resolve_task!(rumtk_web_post(url, data))
}