git-gemini-forge 0.3.0

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
use isahc::{http::StatusCode, prelude::*};
use url::Url;
use super::error;

/// Fetches data from the given URL.
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) => {
			// Don't attempt to deserialize if the result is 404, since the shape may differ
			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);
				},
			}
		},
	};
}