//! ref: composer/src/Composer/Repository/AdvisoryProviderInterface.php use crate::advisory::PartialSecurityAdvisory; use crate::advisory::SecurityAdvisory; use indexmap::IndexMap; use shirabe_semver::constraint::ConstraintInterface; #[derive(Debug)] pub enum PartialOrSecurityAdvisory { Partial(PartialSecurityAdvisory), Full(SecurityAdvisory), } impl PartialOrSecurityAdvisory { pub fn advisory_id(&self) -> &str { match self { PartialOrSecurityAdvisory::Partial(p) => &p.advisory_id, PartialOrSecurityAdvisory::Full(s) => s.advisory_id(), } } } #[derive(Debug)] pub struct SecurityAdvisoryResult { pub names_found: Vec, pub advisories: IndexMap>, } pub trait AdvisoryProviderInterface { fn has_security_advisories(&self) -> bool; fn get_security_advisories( &self, package_constraint_map: IndexMap>, allow_partial_advisories: bool, ) -> anyhow::Result; }