From 06e8e14520a4a38fed500581d2b75a42418b22c4 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 4 Jun 2026 21:09:02 +0900 Subject: feat(package): implement PackageInterface accessor layer for Package/CompletePackage/RootPackage Fill the trait-impl todo!() across the package accessor layer so loaded packages are actually usable (the ArrayLoader::load path depends on it): - Package: implement BasePackage/PackageInterface from struct fields and existing inherent methods; Display via get_unique_name. - CompletePackage: delegate PackageInterface to inner Package. - RootPackage: delegate CompletePackageInterface/PackageInterface to inner CompletePackage; RootPackageInterface link setters delegate to Package. Correct three unfaithful trait signatures found during implementation: - get_target_dir returns Option (PHP computes a normalized value; a borrow cannot represent it, and AliasPackage could not implement &str across its aliasOf handle). - RootPackageInterface link setters take IndexMap, matching Package and the real ArrayLoader caller (PHP RootPackage inherits Package::setRequires; the Link[] docblock was imprecise). - get_full_pretty_version takes a DisplayMode enum instead of a raw i64; the match is now exhaustive, so it returns String without an error path. Move mirror conversion to the boundaries: PackageInterface mirror methods use Vec (the typed form, matching the inherent methods), with array<->Mirror conversion done by the producer (ComposerRepository) and consumer (ArrayDumper). Co-Authored-By: Claude Opus 4.8 --- .../operation/install_operation.rs | 4 +--- .../operation/mark_alias_installed_operation.rs | 5 ++--- .../operation/mark_alias_uninstalled_operation.rs | 5 ++--- .../operation/uninstall_operation.rs | 4 +--- .../operation/update_operation.rs | 21 ++++++++++----------- 5 files changed, 16 insertions(+), 23 deletions(-) (limited to 'crates/shirabe/src/dependency_resolver') diff --git a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs index 23be038..1331591 100644 --- a/crates/shirabe/src/dependency_resolver/operation/install_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/install_operation.rs @@ -2,7 +2,6 @@ use crate::dependency_resolver::operation::OperationInterface; use crate::dependency_resolver::operation::SolverOperation; -use crate::package::PackageInterface; use crate::package::PackageInterfaceHandle; #[derive(Debug)] @@ -24,8 +23,7 @@ impl InstallOperation { "{}{} ({})", if lock { "Locking " } else { "Installing " }, package.get_pretty_name(), - package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV), + package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), ) } } diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs index a10186a..4ef436b 100644 --- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs @@ -3,7 +3,6 @@ use crate::dependency_resolver::operation::OperationInterface; use crate::dependency_resolver::operation::SolverOperation; use crate::package::AliasPackageHandle; -use crate::package::PackageInterface; #[derive(Debug)] pub struct MarkAliasInstalledOperation { @@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasInstalledOperation { "Marking {} ({}) as installed, alias of {} ({})", self.package.get_pretty_name(), self.package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), self.package.get_alias_of().get_pretty_name(), self.package .get_alias_of() - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV,), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,), ) } diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs index b9ad26e..41b0979 100644 --- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs @@ -3,7 +3,6 @@ use crate::dependency_resolver::operation::OperationInterface; use crate::dependency_resolver::operation::SolverOperation; use crate::package::AliasPackageHandle; -use crate::package::PackageInterface; #[derive(Debug)] pub struct MarkAliasUninstalledOperation { @@ -38,11 +37,11 @@ impl OperationInterface for MarkAliasUninstalledOperation { "Marking {} ({}) as uninstalled, alias of {} ({})", self.package.get_pretty_name(), self.package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), self.package.get_alias_of().get_pretty_name(), self.package .get_alias_of() - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV,), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,), ) } diff --git a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs index 3ff547c..465297d 100644 --- a/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/uninstall_operation.rs @@ -2,7 +2,6 @@ use crate::dependency_resolver::operation::OperationInterface; use crate::dependency_resolver::operation::SolverOperation; -use crate::package::PackageInterface; use crate::package::PackageInterfaceHandle; #[derive(Debug)] @@ -23,8 +22,7 @@ impl UninstallOperation { format!( "Removing {} ({})", package.get_pretty_name(), - package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF_IF_DEV), + package.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), ) } } diff --git a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs index bc31256..104f4ef 100644 --- a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs @@ -2,7 +2,6 @@ use crate::dependency_resolver::operation::OperationInterface; use crate::dependency_resolver::operation::SolverOperation; -use crate::package::PackageInterface; use crate::package::PackageInterfaceHandle; use crate::package::version::VersionParser; @@ -33,25 +32,25 @@ impl UpdateOperation { target_package: PackageInterfaceHandle, lock: bool, ) -> String { - let mut from_version = initial_package - .get_full_pretty_version(false, ::DISPLAY_SOURCE_REF); - let mut to_version = target_package - .get_full_pretty_version(false, ::DISPLAY_SOURCE_REF); + let mut from_version = + initial_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef); + let mut to_version = + target_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef); if from_version == to_version && initial_package.get_source_reference() != target_package.get_source_reference() { from_version = initial_package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF); + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef); to_version = target_package - .get_full_pretty_version(true, ::DISPLAY_SOURCE_REF); + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRef); } else if from_version == to_version && initial_package.get_dist_reference() != target_package.get_dist_reference() { - from_version = initial_package - .get_full_pretty_version(true, ::DISPLAY_DIST_REF); - to_version = target_package - .get_full_pretty_version(true, ::DISPLAY_DIST_REF); + from_version = + initial_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef); + to_version = + target_package.get_full_pretty_version(true, crate::package::DisplayMode::DistRef); } let action_name = if VersionParser::is_upgrade( -- cgit v1.3.1