use std::sync::Arc;
use crate::clawhub::{
ClawHubClient, ClawHubInstaller, ClawHubSearchResult, ClawHubSkillDetail, InstallResult,
UpdateAvailable, UpdateResult,
};
#[derive(Clone)]
pub struct MarketplaceApi {
installer: Arc<ClawHubInstaller>,
client: Arc<ClawHubClient>,
}
impl MarketplaceApi {
pub fn new(installer: Arc<ClawHubInstaller>, client: Arc<ClawHubClient>) -> Self {
Self { installer, client }
}
pub async fn search(
&self,
query: &str,
limit: Option<usize>,
) -> anyhow::Result<Vec<ClawHubSearchResult>> {
self.client.search_skills(query, limit).await
}
pub async fn get_skill(&self, slug: &str) -> anyhow::Result<ClawHubSkillDetail> {
self.client.get_skill(slug).await
}
pub async fn install(
&self,
slug: &str,
version: Option<&str>,
) -> anyhow::Result<InstallResult> {
self.installer.install(slug, version).await
}
pub async fn check_updates(&self) -> anyhow::Result<Vec<UpdateAvailable>> {
self.installer.check_updates().await
}
pub async fn update(&self, slug: &str) -> anyhow::Result<UpdateResult> {
self.installer.update(slug).await
}
pub async fn update_all(&self) -> anyhow::Result<Vec<UpdateResult>> {
self.installer.update_all().await
}
}