vibe_workspace/git/provider/
mod.rs1use 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}