//! ref: composer/src/Composer/Repository/RepositoryInterface.php use crate::package::base_package::BasePackage; use crate::package::package_interface::PackageInterface; use crate::repository::advisory_provider_interface::AdvisoryProviderInterface; use indexmap::IndexMap; use shirabe_php_shim::Countable; use shirabe_semver::constraint::constraint_interface::ConstraintInterface; pub enum FindPackageConstraint { String(String), Constraint(Box), } pub struct LoadPackagesResult { pub names_found: Vec, pub packages: Vec>, } pub enum AbandonedInfo { Replacement(String), Abandoned, } pub struct SearchResult { pub name: String, pub description: Option, pub abandoned: Option, pub url: Option, } pub struct ProviderInfo { pub name: String, pub description: Option, pub r#type: String, } pub const SEARCH_FULLTEXT: i64 = 0; pub const SEARCH_NAME: i64 = 1; pub const SEARCH_VENDOR: i64 = 2; pub trait RepositoryInterface: Countable { fn has_package(&self, package: &dyn PackageInterface) -> bool; fn find_package( &self, name: String, constraint: FindPackageConstraint, ) -> Option>; fn find_packages( &self, name: String, constraint: Option, ) -> Vec>; fn get_packages(&self) -> Vec>; fn load_packages( &self, package_name_map: IndexMap>>, acceptable_stabilities: IndexMap, stability_flags: IndexMap, already_loaded: IndexMap>>, ) -> LoadPackagesResult; fn search(&self, query: String, mode: i64, r#type: Option) -> Vec; fn get_providers(&self, package_name: String) -> IndexMap; fn get_repo_name(&self) -> String; fn as_advisory_provider(&self) -> Option<&dyn AdvisoryProviderInterface> { None } fn as_any(&self) -> &dyn std::any::Any; }