use async_trait::async_trait;
use crate::models::{EvidenceItem, ModuleResult, RepositoryContext};
pub mod activity;
pub mod adoption;
pub mod maintainers;
pub mod security;
pub mod stars;
#[async_trait]
pub trait TrustModule: Send + Sync {
fn name(&self) -> &'static str;
fn version(&self) -> &'static str;
async fn run(
&self,
ctx: &RepositoryContext,
) -> anyhow::Result<(ModuleResult, Vec<EvidenceItem>)>;
}
#[must_use]
pub fn registry() -> Vec<Box<dyn TrustModule>> {
vec![
Box::new(stars::StarsModule),
Box::new(activity::ActivityModule),
Box::new(maintainers::MaintainersModule),
Box::new(adoption::AdoptionModule),
Box::new(security::SecurityModule),
]
}