From f31b101ce1e921a026ba234b1f0a83b0392bc118 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 20 May 2026 08:33:49 +0900 Subject: fix(compile): fix all remaining compile errors Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/package/archiver/archive_manager.rs | 29 ++++++++++++---------- .../src/package/archiver/archiver_interface.rs | 5 ++++ .../shirabe/src/package/archiver/phar_archiver.rs | 4 +++ .../shirabe/src/package/archiver/zip_archiver.rs | 4 +++ 4 files changed, 29 insertions(+), 13 deletions(-) (limited to 'crates/shirabe/src/package/archiver') diff --git a/crates/shirabe/src/package/archiver/archive_manager.rs b/crates/shirabe/src/package/archiver/archive_manager.rs index 374e16c..094ddc3 100644 --- a/crates/shirabe/src/package/archiver/archive_manager.rs +++ b/crates/shirabe/src/package/archiver/archive_manager.rs @@ -58,10 +58,10 @@ impl ArchiveManager { pub fn get_package_filename_parts( &self, package: &dyn CompletePackageInterface, - ) -> IndexMap { + ) -> anyhow::Result> { let base_name = match package.get_archive_name() { Some(name) => name.to_string(), - None => Preg::replace("#[^a-z0-9-_]#i", "-", package.get_name()), + None => Preg::replace("#[^a-z0-9-_]#i", "-", package.get_name())?, }; let mut parts: IndexMap = IndexMap::new(); @@ -70,7 +70,7 @@ impl ArchiveManager { let dist_reference = package.get_dist_reference(); if let Some(ref dist_ref) = dist_reference { if Preg::is_match("{^[a-f0-9]{40}$}", dist_ref).unwrap_or(false) { - parts.insert("dist_reference".to_string(), dist_ref.clone()); + parts.insert("dist_reference".to_string(), dist_ref.to_string()); if let Some(dist_type) = package.get_dist_type() { parts.insert("dist_type".to_string(), dist_type.to_string()); } @@ -79,7 +79,7 @@ impl ArchiveManager { "version".to_string(), package.get_pretty_version().to_string(), ); - parts.insert("dist_reference".to_string(), dist_ref.clone()); + parts.insert("dist_reference".to_string(), dist_ref.to_string()); } } else { parts.insert( @@ -95,10 +95,10 @@ impl ArchiveManager { // array_filter removed null values; replace '/' with '-' in each value for val in parts.values_mut() { - *val = val.replace('/', '-'); + *val = val.replace('/', "-"); } - parts + Ok(parts) } pub fn get_package_filename_from_parts(&self, parts: &IndexMap) -> String { @@ -106,9 +106,12 @@ impl ArchiveManager { values.join("-") } - pub fn get_package_filename(&self, package: &dyn CompletePackageInterface) -> String { - let parts = self.get_package_filename_parts(package); - self.get_package_filename_from_parts(&parts) + pub fn get_package_filename( + &self, + package: &dyn CompletePackageInterface, + ) -> anyhow::Result { + let parts = self.get_package_filename_parts(package)?; + Ok(self.get_package_filename_from_parts(&parts)) } pub fn archive( @@ -147,9 +150,9 @@ impl ArchiveManager { } }; - let filesystem = Filesystem::new(None); + let mut filesystem = Filesystem::new(None); - let is_root = package.as_any().is::(); + let is_root = package.as_root_package_interface().is_some(); let source_path: String; if is_root { @@ -181,7 +184,7 @@ impl ArchiveManager { let composer_json_path = format!("{}/composer.json", source_path); if file_exists(&composer_json_path) { - let json_file = JsonFile::new(composer_json_path, None, None)?; + let mut json_file = JsonFile::new(composer_json_path, None, None)?; let json_data = json_file.read()?; if let Some(archive) = json_data.get("archive") { if let Some(name) = archive.get("name").and_then(|v| v.as_string()) { @@ -206,7 +209,7 @@ impl ArchiveManager { let supported_formats = self.get_supported_formats(); let package_name_parts = match file_name { - None => self.get_package_filename_parts(package), + None => self.get_package_filename_parts(package)?, Some(f) => { let mut parts = IndexMap::new(); parts.insert("base".to_string(), f); diff --git a/crates/shirabe/src/package/archiver/archiver_interface.rs b/crates/shirabe/src/package/archiver/archiver_interface.rs index 82e976d..54121b5 100644 --- a/crates/shirabe/src/package/archiver/archiver_interface.rs +++ b/crates/shirabe/src/package/archiver/archiver_interface.rs @@ -1,5 +1,7 @@ //! ref: composer/src/Composer/Package/Archiver/ArchiverInterface.php +use std::any::Any; + pub trait ArchiverInterface { fn archive( &self, @@ -11,4 +13,7 @@ pub trait ArchiverInterface { ) -> anyhow::Result; fn supports(&self, format: String, source_type: Option) -> bool; + + /// PHP `$archiver instanceof X` checks; allow downcasting from `dyn ArchiverInterface`. + fn as_any(&self) -> &dyn Any; } diff --git a/crates/shirabe/src/package/archiver/phar_archiver.rs b/crates/shirabe/src/package/archiver/phar_archiver.rs index 7b5142b..17bc05b 100644 --- a/crates/shirabe/src/package/archiver/phar_archiver.rs +++ b/crates/shirabe/src/package/archiver/phar_archiver.rs @@ -156,4 +156,8 @@ impl ArchiverInterface for PharArchiver { fn supports(&self, format: String, _source_type: Option) -> bool { formats().contains_key(format.as_str()) } + + fn as_any(&self) -> &dyn std::any::Any { + self + } } diff --git a/crates/shirabe/src/package/archiver/zip_archiver.rs b/crates/shirabe/src/package/archiver/zip_archiver.rs index 471352f..a5dd4f4 100644 --- a/crates/shirabe/src/package/archiver/zip_archiver.rs +++ b/crates/shirabe/src/package/archiver/zip_archiver.rs @@ -107,4 +107,8 @@ impl ArchiverInterface for ZipArchiver { fn supports(&self, format: String, _source_type: Option) -> bool { Self::formats().contains_key(&format) && self.compression_available() } + + fn as_any(&self) -> &dyn std::any::Any { + self + } } -- cgit v1.3.1