From f78ade50822cee315c73b73f40f1a923a2bfd6ac Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 15 May 2026 01:07:54 +0900 Subject: feat(port): port RepositoryInterface.php --- crates/shirabe-php-shim/src/lib.rs | 4 ++ .../shirabe/src/repository/repository_interface.rs | 62 ++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/crates/shirabe-php-shim/src/lib.rs b/crates/shirabe-php-shim/src/lib.rs index 68cf03a..1c16ded 100644 --- a/crates/shirabe-php-shim/src/lib.rs +++ b/crates/shirabe-php-shim/src/lib.rs @@ -348,6 +348,10 @@ pub trait JsonSerializable { fn json_serialize(&self) -> PhpMixed; } +pub trait Countable { + fn count(&self) -> i64; +} + pub fn in_array(needle: PhpMixed, haystack: &PhpMixed, strict: bool) -> bool { todo!() } 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), +} + +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 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>; + + 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; +} -- cgit v1.3.1