Skip to main content

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}