git-gemini-forge 0.5.2

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
use super::ForgejoApi;
use crate::network::get::{call, ApiEndpoint};
use crate::network::ForgeApi;
use crate::network::{error, responses::Repo};
use url::Url;

struct ReposEndpoint {
	base_url: Url,
	username: String,
	repo_name: String,
}

impl ApiEndpoint<Repo> for ReposEndpoint {
	fn url(&self) -> Url {
		let username = &self.username;
		let repo_name = &self.repo_name;
		return self
			.base_url
			.join(&format!("repos/{username}/{repo_name}"))
			.unwrap();
	}
}

/// Retrieves repository metadata from the given API.
pub fn get_repo(api: &ForgejoApi, username: &str, repo_name: &str) -> Result<Repo, error::Error> {
	let base_url = api.base_url().clone();
	let endpoint = ReposEndpoint {
		base_url,
		username: String::from(username),
		repo_name: String::from(repo_name),
	};

	let repo = call(&endpoint)?;
	return Ok(repo);
}