aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/repository')
-rw-r--r--crates/shirabe/src/repository/package_repository.rs87
1 files changed, 86 insertions, 1 deletions
diff --git a/crates/shirabe/src/repository/package_repository.rs b/crates/shirabe/src/repository/package_repository.rs
index 554e24a..e19d04c 100644
--- a/crates/shirabe/src/repository/package_repository.rs
+++ b/crates/shirabe/src/repository/package_repository.rs
@@ -2,12 +2,18 @@
use crate::advisory::SecurityAdvisory;
use crate::advisory::{AnySecurityAdvisory, PartialSecurityAdvisory};
+use crate::package::BasePackageHandle;
+use crate::package::PackageInterfaceHandle;
use crate::package::loader::ArrayLoader;
use crate::package::loader::ValidatingArrayLoader;
use crate::package::version::VersionParser;
use crate::repository::ArrayRepository;
use crate::repository::InvalidRepositoryException;
-use crate::repository::{AdvisoryProviderInterface, SecurityAdvisoryResult};
+use crate::repository::RepositoryInterfaceWeakHandle;
+use crate::repository::{
+ AdvisoryProviderInterface, FindPackageConstraint, LoadPackagesResult, ProviderInfo,
+ RepositoryInterface, SearchResult, SecurityAdvisoryResult,
+};
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::Preg;
use shirabe_php_shim::{Exception, PhpMixed, RuntimeException, var_export};
@@ -80,6 +86,85 @@ impl PackageRepository {
}
}
+impl RepositoryInterface for PackageRepository {
+ // The structural methods are inherited from ArrayRepository in PHP, where they trigger the
+ // overridden initialize() that loads packages from config. Wiring that virtual dispatch is a
+ // Phase C concern; the advisory paths below are what is exercised so far.
+ fn count(&self) -> anyhow::Result<usize> {
+ todo!()
+ }
+
+ fn has_package(&self, _package: PackageInterfaceHandle) -> bool {
+ todo!()
+ }
+
+ fn find_package(
+ &mut self,
+ _name: &str,
+ _constraint: FindPackageConstraint,
+ ) -> anyhow::Result<Option<BasePackageHandle>> {
+ todo!()
+ }
+
+ fn find_packages(
+ &mut self,
+ _name: &str,
+ _constraint: Option<FindPackageConstraint>,
+ ) -> anyhow::Result<Vec<BasePackageHandle>> {
+ todo!()
+ }
+
+ fn get_packages(&mut self) -> anyhow::Result<Vec<BasePackageHandle>> {
+ todo!()
+ }
+
+ fn load_packages(
+ &mut self,
+ _package_name_map: IndexMap<String, Option<shirabe_semver::constraint::AnyConstraint>>,
+ _acceptable_stabilities: IndexMap<String, i64>,
+ _stability_flags: IndexMap<String, i64>,
+ _already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>,
+ ) -> anyhow::Result<LoadPackagesResult> {
+ todo!()
+ }
+
+ fn search(
+ &mut self,
+ _query: String,
+ _mode: i64,
+ _type: Option<String>,
+ ) -> anyhow::Result<Vec<SearchResult>> {
+ todo!()
+ }
+
+ fn get_providers(
+ &mut self,
+ _package_name: String,
+ ) -> anyhow::Result<IndexMap<String, ProviderInfo>> {
+ todo!()
+ }
+
+ fn get_repo_name(&self) -> String {
+ PackageRepository::get_repo_name(self)
+ }
+
+ fn as_advisory_provider(&self) -> Option<&dyn AdvisoryProviderInterface> {
+ Some(self)
+ }
+
+ fn as_advisory_provider_mut(&mut self) -> Option<&mut dyn AdvisoryProviderInterface> {
+ Some(self)
+ }
+
+ fn as_any(&self) -> &dyn std::any::Any {
+ self
+ }
+
+ fn set_self_handle(&self, weak: RepositoryInterfaceWeakHandle) {
+ self.inner.set_self_handle(weak);
+ }
+}
+
impl AdvisoryProviderInterface for PackageRepository {
fn has_security_advisories(&mut self) -> anyhow::Result<bool> {
Ok(!self.security_advisories.is_empty())