git-gemini-forge 0.5.2

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
use crate::network::error;
use crate::network::responses::*;
use crate::network::{ForgeApi, ForgeApiKind};
use url::Url;

/// Describes the Forgejo API.
///
/// See https://code.forgejo.org/api/swagger and https://gitea.com/api/swagger
#[derive(Clone, Debug)]
pub struct ForgejoApi {
	_base_url: Url,
	_kind: ForgeApiKind,
}

impl ForgejoApi {
	/// Constructs an API from the given forge URL.
	pub fn from_url(forge_url: Url, kind: ForgeApiKind) -> Self {
		let base_url: Url = forge_url.join("/api/v1/").unwrap();
		return ForgejoApi {
			_base_url: base_url,
			_kind: kind,
		};
	}
}

impl ForgeApi for ForgejoApi {
	fn kind(&self) -> ForgeApiKind {
		return self._kind;
	}

	fn base_url(&self) -> &Url {
		return &self._base_url;
	}

	fn get_branches(&self, username: &str, repo_name: &str) -> Result<Vec<Branch>, error::Error> {
		return super::get_branches(self, username, repo_name);
	}

	fn get_file_tree(
		&self,
		username: &str,
		repo_name: &str,
	) -> Result<Vec<RepoContents>, error::Error> {
		return super::get_file_tree(self, username, repo_name);
	}

	fn get_recent_repos(&self) -> Result<Vec<Repo>, error::Error> {
		return super::get_recent_repos(self);
	}

	fn get_repo(&self, username: &str, repo_name: &str) -> Result<Repo, error::Error> {
		return super::get_repo(self, username, repo_name);
	}

	fn get_user_repos(&self, username: &str) -> Result<Vec<Repo>, error::Error> {
		return super::get_user_repos(self, username);
	}

	fn get_users(&self) -> Result<Vec<User>, error::Error> {
		return super::get_users(self);
	}

	fn get_version(&self) -> Result<ServerVersion, error::Error> {
		return super::get_version(self);
	}
}