scitadel_core/ports/source.rs
1use async_trait::async_trait;
2
3use crate::error::CoreError;
4use crate::models::CandidatePaper;
5
6/// Port for external source adapters (`PubMed`, `arXiv`, `OpenAlex`, `INSPIRE`).
7#[async_trait]
8pub trait SourceAdapter: Send + Sync {
9 /// Human-readable name of this source (e.g., "pubmed", "arxiv").
10 fn name(&self) -> &str;
11
12 /// Search the source and return normalized candidate records.
13 async fn search(
14 &self,
15 query: &str,
16 max_results: usize,
17 ) -> Result<Vec<CandidatePaper>, CoreError>;
18}