pub mod net;
pub mod robotstxt;
pub mod user_agent;
pub mod error;
pub mod responses;
pub mod forgejo;
pub mod gitlab;
use crate::handlers::templates::PercentEncoded;
use isahc::http::{HeaderName, header::AUTHORIZATION};
use net::Net;
use secrecy::SecretString;
use std::fmt::Debug;
use strum_macros::{Display, EnumIter, EnumString};
use url::Url;
pub use user_agent::user_agent;
#[derive(Clone, Copy, Debug, Display, EnumIter, EnumString, PartialEq)]
#[strum(ascii_case_insensitive)] pub enum ForgeApiKind {
Forgejo,
Gitea,
GitLab,
}
pub trait ForgeApi
where
Self: Sync + Send,
{
fn kind(&self) -> ForgeApiKind;
fn base_url(&self) -> &Url;
fn get_branches(
&self,
net: &Net,
username: &PercentEncoded,
repo_name: &PercentEncoded,
) -> Result<Vec<responses::Branch>, error::Error>;
fn get_contents(
&self,
net: &Net,
username: &PercentEncoded,
repo_name: &PercentEncoded,
branch_name: &PercentEncoded,
item_path: &PercentEncoded,
) -> Result<responses::Contents<responses::Item>, error::Error>;
fn get_file_tree(
&self,
net: &Net,
username: &PercentEncoded,
repo_name: &PercentEncoded,
) -> Result<Vec<responses::Item>, error::Error>;
fn get_recent_repos(&self, net: &Net) -> Result<Vec<responses::Repo>, error::Error>;
fn get_repo(
&self,
net: &Net,
username: &PercentEncoded,
repo_name: &PercentEncoded,
) -> Result<responses::Repo, error::Error>;
fn get_user_repos(
&self,
net: &Net,
username: &PercentEncoded,
) -> Result<Vec<responses::Repo>, error::Error>;
fn get_users(&self, net: &Net) -> Result<Vec<responses::User>, error::Error>;
fn get_version(&self, net: &Net) -> Result<responses::ServerVersion, error::Error>;
fn check_access_token(&self, _net: &Net) -> Result<(), error::Error>;
fn access_token_header_name(&self) -> HeaderName {
AUTHORIZATION
}
fn access_token_value(&self) -> Option<SecretString> {
None
}
}