gitfetch_rs/fetcher/
mod.rs1pub 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}