From 1921f173ea219cb4b25847294d2d3fa465550fbb Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 25 May 2026 00:58:20 +0900 Subject: refactor(package): introduce Rc> handles for packages PHP packages have reference semantics, so introduce shared-ownership handles over an AnyPackage enum (PackageInterfaceHandle and friends) and replace Box throughout. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/shirabe/src/installer/noop_installer.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'crates/shirabe/src/installer/noop_installer.rs') diff --git a/crates/shirabe/src/installer/noop_installer.rs b/crates/shirabe/src/installer/noop_installer.rs index 8297165..12e7e95 100644 --- a/crates/shirabe/src/installer/noop_installer.rs +++ b/crates/shirabe/src/installer/noop_installer.rs @@ -2,6 +2,7 @@ use crate::installer::InstallerInterface; use crate::package::PackageInterface; +use crate::package::PackageInterfaceHandle; use crate::repository::InstalledRepositoryInterface; use shirabe_php_shim::{InvalidArgumentException, PhpMixed}; @@ -51,10 +52,10 @@ impl InstallerInterface for NoopInstaller { async fn install( &mut self, repo: &mut dyn InstalledRepositoryInterface, - package: &dyn PackageInterface, + package: &PackageInterfaceHandle, ) -> anyhow::Result> { - if !repo.has_package(package) { - repo.add_package(package.clone_package_box()); + if !repo.has_package(package.as_rc().borrow().as_package_interface()) { + repo.add_package(package.clone()); } Ok(None) @@ -63,10 +64,10 @@ impl InstallerInterface for NoopInstaller { async fn update( &mut self, repo: &mut dyn InstalledRepositoryInterface, - initial: &dyn PackageInterface, - target: &dyn PackageInterface, + initial: &PackageInterfaceHandle, + target: &PackageInterfaceHandle, ) -> anyhow::Result> { - if !repo.has_package(initial) { + if !repo.has_package(initial.as_rc().borrow().as_package_interface()) { return Err(InvalidArgumentException { message: format!("Package is not installed: {}", initial), code: 0, @@ -74,9 +75,9 @@ impl InstallerInterface for NoopInstaller { .into()); } - repo.remove_package(initial); - if !repo.has_package(target) { - repo.add_package(target.clone_package_box()); + repo.remove_package(initial.as_rc().borrow().as_package_interface()); + if !repo.has_package(target.as_rc().borrow().as_package_interface()) { + repo.add_package(target.clone()); } Ok(None) @@ -85,16 +86,16 @@ impl InstallerInterface for NoopInstaller { async fn uninstall( &mut self, repo: &mut dyn InstalledRepositoryInterface, - package: &dyn PackageInterface, + package: &PackageInterfaceHandle, ) -> anyhow::Result> { - if !repo.has_package(package) { + if !repo.has_package(package.as_rc().borrow().as_package_interface()) { return Err(InvalidArgumentException { message: format!("Package is not installed: {}", package), code: 0, } .into()); } - repo.remove_package(package); + repo.remove_package(package.as_rc().borrow().as_package_interface()); Ok(None) } -- cgit v1.3.1