From f411daceacad66e0bd774fda7d3c5ef8533cc55c Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 26 May 2026 20:04:02 +0900 Subject: refactor(io): share IOInterface via Rc> handle Co-Authored-By: Claude Opus 4.7 --- crates/shirabe/src/installer.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'crates/shirabe/src/installer.rs') diff --git a/crates/shirabe/src/installer.rs b/crates/shirabe/src/installer.rs index c3ef76f..70062aa 100644 --- a/crates/shirabe/src/installer.rs +++ b/crates/shirabe/src/installer.rs @@ -69,6 +69,7 @@ use crate::filter::platform_requirement_filter::IgnoreListPlatformRequirementFil use crate::filter::platform_requirement_filter::PlatformRequirementFilterFactory; use crate::filter::platform_requirement_filter::PlatformRequirementFilterInterface; use crate::io::IOInterface; +use crate::io::IOInterfaceImmutable; use crate::package::AliasPackage; use crate::package::CompletePackage; use crate::package::CompletePackageInterface; @@ -104,7 +105,7 @@ use shirabe_semver::constraint::SimpleConstraint; #[derive(Debug)] pub struct Installer { - pub(crate) io: Box, + pub(crate) io: std::rc::Rc>, pub(crate) config: std::rc::Rc>, pub(crate) package: RootPackageInterfaceHandle, // TODO can we get rid of the below and just use the package itself? @@ -161,7 +162,7 @@ impl Installer { pub const ERROR_TRANSPORT_EXCEPTION: i64 = 100; pub fn new( - io: Box, + io: std::rc::Rc>, config: std::rc::Rc>, package: RootPackageInterfaceHandle, download_manager: std::rc::Rc>, @@ -171,7 +172,7 @@ impl Installer { event_dispatcher: std::rc::Rc>, autoload_generator: std::rc::Rc>, ) -> Self { - let suggested_packages_reporter = SuggestedPackagesReporter::new(io.clone_box()); + let suggested_packages_reporter = SuggestedPackagesReporter::new(io.clone()); let platform_requirement_filter = PlatformRequirementFilterFactory::ignore_nothing(); let write_lock = config.borrow_mut().get("lock").as_bool().unwrap_or(false); @@ -325,7 +326,7 @@ impl Installer { { self.installation_manager .borrow_mut() - .notify_installs(&*self.io); + .notify_installs(&*self.io.borrow()); } return Err(e); } @@ -343,7 +344,7 @@ impl Installer { { self.installation_manager .borrow_mut() - .notify_installs(&*self.io); + .notify_installs(&*self.io.borrow()); } if self.update { @@ -650,7 +651,7 @@ impl Installer { let _ = allow_list; } - // TODO(phase-b): create_pool takes owned Request, Box, Option> + // TODO(phase-b): create_pool takes owned Request, std::rc::Rc>, Option> // but locally we only have refs. PHP classes (IO, dispatcher) shouldn't Clone. let mut pool: Option = { let _ = (&request, &self.event_dispatcher, &policy, &repository_set); @@ -1095,7 +1096,7 @@ impl Installer { } drop(root_requires); - // TODO(phase-b): create_pool takes owned Request, Box, Option> + // TODO(phase-b): create_pool takes owned Request, std::rc::Rc>, Option> let pool: Pool = { let _ = (&request, &self.io, &self.event_dispatcher, &repository_set); todo!() @@ -1677,7 +1678,10 @@ impl Installer { } /// Create Installer - pub fn create(io: Box, composer: &PartialComposerHandle) -> Self { + pub fn create( + io: std::rc::Rc>, + composer: &PartialComposerHandle, + ) -> Self { let composer = crate::composer::composer_full(composer); Self::new( io, -- cgit v1.3.1