use ggen_utils::error::Result;
#[derive(Debug, Clone)]
pub struct DiscoverInput {
pub query: Option<String>,
pub namespace: Option<String>,
pub domain: Option<String>,
pub language: Option<String>,
pub sort_by: SortOrder,
pub limit: usize,
}
#[derive(Debug, Clone, Default, serde::Serialize)]
pub enum SortOrder {
#[default]
Downloads,
Rating,
Updated,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct DiscoverOutput {
pub packs: Vec<OntologyPackSummary>,
pub total: usize,
pub query: Option<String>,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct OntologyPackSummary {
pub pack_id: String,
pub name: String,
pub version: String,
pub description: String,
pub ontologies: Vec<String>,
pub languages_supported: Vec<String>,
pub downloads: usize,
pub rating: Option<f32>,
}
pub async fn execute_discover(input: &DiscoverInput) -> Result<DiscoverOutput> {
Ok(DiscoverOutput {
packs: vec![],
total: 0,
query: input.query.clone(),
})
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_discover_returns_empty() {
let input = DiscoverInput {
query: Some("nonexistent".to_string()),
namespace: None,
domain: None,
language: None,
sort_by: SortOrder::Downloads,
limit: 10,
};
let output = execute_discover(&input).await.unwrap();
assert_eq!(output.total, 0);
}
}