diff options
Diffstat (limited to 'crates/shirabe/src/repository')
| -rw-r--r-- | crates/shirabe/src/repository/repository_interface.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/crates/shirabe/src/repository/repository_interface.rs b/crates/shirabe/src/repository/repository_interface.rs index 6e60721..981ee77 100644 --- a/crates/shirabe/src/repository/repository_interface.rs +++ b/crates/shirabe/src/repository/repository_interface.rs @@ -1 +1,63 @@ //! ref: composer/src/Composer/Repository/RepositoryInterface.php + +use indexmap::IndexMap; +use shirabe_php_shim::Countable; +use shirabe_semver::constraint::constraint_interface::ConstraintInterface; +use crate::package::base_package::BasePackage; +use crate::package::package_interface::PackageInterface; + +pub enum FindPackageConstraint { + String(String), + Constraint(Box<dyn ConstraintInterface>), +} + +pub struct LoadPackagesResult { + pub names_found: Vec<String>, + pub packages: Vec<Box<BasePackage>>, +} + +pub enum AbandonedInfo { + Replacement(String), + Abandoned, +} + +pub struct SearchResult { + pub name: String, + pub description: Option<String>, + pub abandoned: Option<AbandonedInfo>, + pub url: Option<String>, +} + +pub struct ProviderInfo { + pub name: String, + pub description: Option<String>, + pub r#type: String, +} + +pub trait RepositoryInterface: Countable { + const SEARCH_FULLTEXT: i64 = 0; + const SEARCH_NAME: i64 = 1; + const SEARCH_VENDOR: i64 = 2; + + fn has_package(&self, package: &dyn PackageInterface) -> bool; + + fn find_package(&self, name: String, constraint: FindPackageConstraint) -> Option<Box<BasePackage>>; + + fn find_packages(&self, name: String, constraint: Option<FindPackageConstraint>) -> Vec<Box<BasePackage>>; + + fn get_packages(&self) -> Vec<Box<BasePackage>>; + + fn load_packages( + &self, + package_name_map: IndexMap<String, Option<Box<dyn ConstraintInterface>>>, + acceptable_stabilities: IndexMap<String, i64>, + stability_flags: IndexMap<String, i64>, + already_loaded: IndexMap<String, IndexMap<String, Box<dyn PackageInterface>>>, + ) -> LoadPackagesResult; + + fn search(&self, query: String, mode: i64, r#type: Option<String>) -> Vec<SearchResult>; + + fn get_providers(&self, package_name: String) -> IndexMap<String, ProviderInfo>; + + fn get_repo_name(&self) -> String; +} |
