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, responses::RepoSearch};
use url::Url;

struct ReposSearchEndpoint {
	base_url: Url,
}

impl ApiEndpoint<RepoSearch> for ReposSearchEndpoint {
	fn url(&self) -> Url {
		let mut url = self.base_url.join("repos/search").unwrap();
		url.set_query(Some("sort=updated&order=desc&limit=12"));
		return url;
	}
}

/// Retrieves the 12 most recent repositories from the given API.
pub fn get_recent_repos(api: &ForgejoApi) -> Result<Vec<Repo>, error::Error> {
	let base_url = api.base_url().clone();
	let endpoint = ReposSearchEndpoint { base_url };

	// Sort repos by date
	let repos_json = call(&endpoint)?;
	let mut repos = repos_json.data;
	repos.sort_by(|a, b| {
		return b.updated_at.cmp(&a.updated_at);
	});
	return Ok(repos);
}