git-gemini-forge 0.6.6

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
use crate::config::*;
use crate::constants::REPO_GMI;
use crate::network::net::Net;
use crate::network::{self, ForgeApi};
use windmark::response::Response;

/// Answers with Gemtext that consists of a list of recently updated repositories.
pub async fn handler(cfg: &Config, net: &Net) -> Result<Response, network::error::Error> {
	// List repos
	let repos = &cfg.forge_api().get_recent_repos(net).await?;

	// Transform repos into Gemtext internal page links
	let repo_links: Vec<String> = repos.iter().map(super::templates::repo_link).collect();

	// Format usernames into a Gemtext list
	let gemtext_list: String = repo_links
		.iter()
		.map(|n: &String| format!("{n}\n"))
		.collect::<Vec<String>>()
		.concat();

	let gemtext = format!(
		"A Gemtext proxy for {}.

This capsule lets readers view code repositories from the comfort of a Gemini-protocol client.

=> {REPO_GMI} Proxy source code
=> {} Visit {}

## Recent Activity\n{gemtext_list}",
		cfg.forge_url.host_str().expect("Proxy source has host"),
		cfg.forge_url,
		cfg.forge_kind
	);
	Ok(Response::success(gemtext))
}