Skip to main content

vibe_workspace/git/provider/
mod.rs

1use anyhow::Result;
2use async_trait::async_trait;
3
4pub mod github_cli;
5pub mod vector_store;
6
7pub use github_cli::GitHubCliProvider;
8
9use super::{Repository, SearchQuery};
10
11#[async_trait]
12pub trait SearchProvider: Send + Sync {
13    async fn search(&self, query: &SearchQuery) -> Result<Vec<Repository>>;
14    async fn get_repository(&self, id: &str) -> Result<Repository>;
15    fn name(&self) -> &str;
16}
17
18pub struct ProviderFactory;
19
20impl ProviderFactory {
21    pub fn create_provider(name: &str) -> Result<Box<dyn SearchProvider>> {
22        match name {
23            "github_cli" => Ok(Box::new(GitHubCliProvider::new()?)),
24            _ => anyhow::bail!("Unknown search provider: {}", name),
25        }
26    }
27}