gitfetch_rs/fetcher/
mod.rs

1pub mod gitea;
2pub mod github;
3pub mod gitlab;
4pub mod sourcehut;
5
6use anyhow::Result;
7use async_trait::async_trait;
8use serde_json::Value;
9
10#[async_trait]
11pub trait Fetcher: Send + Sync {
12  async fn get_authenticated_user(&self) -> Result<String>;
13  async fn fetch_user_data(&self, username: &str) -> Result<Value>;
14  async fn fetch_user_stats(&self, username: &str, user_data: Option<&Value>) -> Result<Value>;
15}
16
17pub fn create_fetcher(
18  provider: &str,
19  base_url: &str,
20  token: Option<&str>,
21) -> Result<Box<dyn Fetcher>> {
22  match provider {
23    "github" => Ok(Box::new(github::GitHubFetcher::new()?)),
24    "gitlab" => Ok(Box::new(gitlab::GitLabFetcher::new(base_url, token)?)),
25    "gitea" => Ok(Box::new(gitea::GiteaFetcher::new(base_url, token)?)),
26    "sourcehut" => Ok(Box::new(sourcehut::SourcehutFetcher::new(base_url, token)?)),
27    _ => Err(anyhow::anyhow!("Unsupported provider: {}", provider)),
28  }
29}