//! ref: composer/src/Composer/Repository/RootPackageRepository.php use crate::package::BasePackage; use crate::package::PackageInterface; use crate::package::RootPackageInterface; use crate::repository::ArrayRepository; use crate::repository::{ProviderInfo, RepositoryInterface, SearchResult}; use indexmap::IndexMap; #[derive(Debug)] pub struct RootPackageRepository { inner: ArrayRepository, } impl RootPackageRepository { pub fn new(package: Box) -> Self { Self { // TODO(phase-b): RootPackageInterface vs BasePackage upcast + ArrayRepository::new error inner: ArrayRepository::new(vec![todo!( "convert Box to Box" )]) .expect("invalid root package"), } } pub fn get_repo_name(&self) -> String { "root package repo".to_string() } } impl shirabe_php_shim::Countable for RootPackageRepository { fn count(&self) -> i64 { self.inner.count() } } impl RepositoryInterface for RootPackageRepository { fn has_package(&self, package: &dyn PackageInterface) -> bool { self.inner.has_package(package) } fn find_package( &self, name: &str, constraint: crate::repository::FindPackageConstraint, ) -> Option> { self.inner.find_package(name, constraint) } fn find_packages( &self, name: &str, constraint: Option, ) -> Vec> { self.inner.find_packages(name, constraint) } fn get_packages(&self) -> Vec> { self.inner.get_packages() } fn load_packages( &self, package_name_map: IndexMap>, acceptable_stabilities: IndexMap, stability_flags: IndexMap, already_loaded: IndexMap>>, ) -> crate::repository::LoadPackagesResult { self.inner.load_packages( package_name_map, acceptable_stabilities, stability_flags, already_loaded, ) } fn search(&self, query: String, mode: i64, r#type: Option) -> Vec { self.inner.search(query, mode, r#type) } fn get_providers(&self, package_name: String) -> IndexMap { self.inner.get_providers(package_name) } fn get_repo_name(&self) -> String { RootPackageRepository::get_repo_name(self) } fn as_any(&self) -> &dyn std::any::Any { self } }