use crate::log::error;
use crate::models::{RequestError, WistiaError};
use crate::types::Result;
use crate::utils::{host_with_path, resp_to_string};
use core::result::Result::{Err, Ok};
use http::Response;
use hyper::{http, Body};
pub async fn raise_for_status(request_url: &str, resp: &mut Response<Body>) -> Result<()> {
let status_code = resp.status().as_u16();
let reason: String;
if (400..500).contains(&status_code) {
reason = format!(
"{status} Client Error: {reason} for url: {url}",
status = status_code,
reason = resp.status().canonical_reason().unwrap_or("Unknown"),
url = host_with_path(request_url)?,
);
} else if (500..600).contains(&status_code) {
reason = format!(
"{status} Server Error: {reason} for url: {url}",
status = status_code,
reason = resp.status().canonical_reason().unwrap_or("Unknown"),
url = host_with_path(request_url)?,
);
} else {
return Ok(());
}
let resp_data = resp_to_string(resp).await?;
let mut e = RequestError::new(status_code, reason);
if let Ok(error_data) = serde_json::from_str::<WistiaError>(&resp_data) {
e.error = error_data;
} else {
e.error = WistiaError::default();
e.error.error = resp_data.trim().to_owned();
}
error!("{:#?}", e);
Err(Box::new(e))
}