use isahc::{http::StatusCode, prelude::*};
use url::Url;
use super::error;
pub fn get<D>(url: &Url) -> Result<D, error::Error> where D: serde::de::DeserializeOwned {
match isahc::get(url.as_str()) {
Err(err) => {
println!("Request failed due to error: {err}");
return Err(error::Error::NetworkFailure);
},
Ok(mut response) => {
if response.status() == StatusCode::NOT_FOUND {
return Err(error::Error::ResourceNotFound);
}
return match response.json() {
Ok(obj) => Ok(obj),
Err(err) => {
println!("Failed to parse value due to error: {err}");
return Err(error::Error::UnexpectedResponse);
},
}
},
};
}