git-gemini-forge 0.2.0

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
/// The ways that retrieving config values might fail.
pub enum Error {
	/// Invalid value for env var `PLATFORM_TYPE`.
	BadPlatformType(String),

	/// No value was provided for env var `FORGE_URL`.
	MissingUrl,

	/// The value provided for env var `FORGE_URL` is not a valid URL.
	BadUrl(url::ParseError),
}

fn fmt_error(err: &Error, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
	// Describe the various kinds of errors:
	match &err {
		Error::BadPlatformType(str) => write!(f, "Platform must be 'forgejo'. Instead got: {str}"),
		Error::MissingUrl => write!(f, "No platform source URL was given"),
		Error::BadUrl(err) => write!(f, "Invalid source URL was given: {err}"),
	}
}

impl std::fmt::Debug for Error {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		fmt_error(&self, f)
	}
}

impl core::fmt::Display for Error {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		fmt_error(&self, f)
	}
}

impl std::error::Error for Error {}