diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-27 00:49:33 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-27 00:54:09 +0900 |
| commit | cc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (patch) | |
| tree | 091a0d01232d927f13f3ab22700701804980f231 /crates/shirabe/src/util | |
| parent | c5850d62beabef0a6bcc4cf6a179589c0ba8f405 (diff) | |
| download | php-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.tar.gz php-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.tar.zst php-shirabe-cc5d73c05a0abca2eebcc8a6afa0b1543ee49850.zip | |
refactor(package): pass package handles by value throughout
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/util')
| -rw-r--r-- | crates/shirabe/src/util/package_info.rs | 17 | ||||
| -rw-r--r-- | crates/shirabe/src/util/sync_helper.rs | 41 |
2 files changed, 30 insertions, 28 deletions
diff --git a/crates/shirabe/src/util/package_info.rs b/crates/shirabe/src/util/package_info.rs index 6660404..df34951 100644 --- a/crates/shirabe/src/util/package_info.rs +++ b/crates/shirabe/src/util/package_info.rs @@ -1,13 +1,12 @@ //! ref: composer/src/Composer/Util/PackageInfo.php -use crate::package::CompletePackageInterface; -use crate::package::PackageInterface; +use crate::package::PackageInterfaceHandle; pub struct PackageInfo; impl PackageInfo { - pub fn get_view_source_url(package: &dyn PackageInterface) -> Option<String> { - if let Some(complete) = package.as_complete_package_interface() { + pub fn get_view_source_url(package: PackageInterfaceHandle) -> Option<String> { + if let Some(complete) = package.as_complete() { let support = complete.get_support(); if let Some(source) = support.get("source") { if source != "" { @@ -16,14 +15,14 @@ impl PackageInfo { } } - package.get_source_url().map(|s| s.to_string()) + package.get_source_url() } - pub fn get_view_source_or_homepage_url(package: &dyn PackageInterface) -> Option<String> { - let url = Self::get_view_source_url(package).or_else(|| { + pub fn get_view_source_or_homepage_url(package: PackageInterfaceHandle) -> Option<String> { + let url = Self::get_view_source_url(package.clone()).or_else(|| { package - .as_complete_package_interface() - .and_then(|complete| complete.get_homepage().map(|s| s.to_string())) + .as_complete() + .and_then(|complete| complete.get_homepage()) }); if url.as_deref() == Some("") { diff --git a/crates/shirabe/src/util/sync_helper.rs b/crates/shirabe/src/util/sync_helper.rs index 7388b96..4181b23 100644 --- a/crates/shirabe/src/util/sync_helper.rs +++ b/crates/shirabe/src/util/sync_helper.rs @@ -2,7 +2,7 @@ use crate::downloader::DownloadManager; use crate::downloader::DownloaderInterface; -use crate::package::PackageInterface; +use crate::package::PackageInterfaceHandle; use crate::util::r#loop::Loop; use anyhow::Result; use shirabe_php_shim::PhpMixed; @@ -15,9 +15,9 @@ pub enum DownloaderOrManager<'a> { impl<'a> DownloaderOrManager<'a> { async fn download( &self, - package: &dyn PackageInterface, + package: PackageInterfaceHandle, path: &str, - prev_package: Option<&dyn PackageInterface>, + prev_package: Option<PackageInterfaceHandle>, ) -> Result<Option<PhpMixed>> { match self { Self::Interface(d) => d.download3(package, path, prev_package).await, @@ -28,9 +28,9 @@ impl<'a> DownloaderOrManager<'a> { async fn prepare( &self, r#type: &str, - package: &dyn PackageInterface, + package: PackageInterfaceHandle, path: &str, - prev_package: Option<&dyn PackageInterface>, + prev_package: Option<PackageInterfaceHandle>, ) -> Result<Option<PhpMixed>> { match self { Self::Interface(d) => d.prepare(r#type, package, path, prev_package).await, @@ -44,7 +44,7 @@ impl<'a> DownloaderOrManager<'a> { async fn install( &self, - package: &dyn PackageInterface, + package: PackageInterfaceHandle, path: &str, ) -> Result<Option<PhpMixed>> { match self { @@ -55,8 +55,8 @@ impl<'a> DownloaderOrManager<'a> { async fn update( &self, - package: &dyn PackageInterface, - prev_package: &dyn PackageInterface, + package: PackageInterfaceHandle, + prev_package: PackageInterfaceHandle, path: &str, ) -> Result<Option<PhpMixed>> { match self { @@ -68,9 +68,9 @@ impl<'a> DownloaderOrManager<'a> { async fn cleanup( &self, r#type: &str, - package: &dyn PackageInterface, + package: PackageInterfaceHandle, path: &str, - prev_package: Option<&dyn PackageInterface>, + prev_package: Option<PackageInterfaceHandle>, ) -> Result<Option<PhpMixed>> { match self { Self::Interface(d) => d.cleanup(r#type, package, path, prev_package).await, @@ -90,8 +90,8 @@ impl SyncHelper { r#loop: &std::rc::Rc<std::cell::RefCell<Loop>>, downloader: DownloaderOrManager<'_>, path: String, - package: &dyn PackageInterface, - prev_package: Option<&dyn PackageInterface>, + package: PackageInterfaceHandle, + prev_package: Option<PackageInterfaceHandle>, ) -> Result<()> { let r#type = if prev_package.is_some() { "update" @@ -104,7 +104,7 @@ impl SyncHelper { r#loop, Some(Box::pin(async { downloader - .download(package, &path, prev_package) + .download(package.clone(), &path, prev_package.clone()) .await .map(|_| ()) })), @@ -113,17 +113,20 @@ impl SyncHelper { r#loop, Some(Box::pin(async { downloader - .prepare(r#type, package, &path, prev_package) + .prepare(r#type, package.clone(), &path, prev_package.clone()) .await .map(|_| ()) })), )?; if r#type == "update" { - if let Some(prev) = prev_package { + if let Some(prev) = &prev_package { Self::r#await( r#loop, Some(Box::pin(async { - downloader.update(package, prev, &path).await.map(|_| ()) + downloader + .update(package.clone(), prev.clone(), &path) + .await + .map(|_| ()) })), )?; } @@ -131,7 +134,7 @@ impl SyncHelper { Self::r#await( r#loop, Some(Box::pin(async { - downloader.install(package, &path).await.map(|_| ()) + downloader.install(package.clone(), &path).await.map(|_| ()) })), )?; } @@ -143,7 +146,7 @@ impl SyncHelper { r#loop, Some(Box::pin(async { downloader - .cleanup(r#type, package, &path, prev_package) + .cleanup(r#type, package.clone(), &path, prev_package.clone()) .await .map(|_| ()) })), @@ -155,7 +158,7 @@ impl SyncHelper { r#loop, Some(Box::pin(async { downloader - .cleanup(r#type, package, &path, prev_package) + .cleanup(r#type, package.clone(), &path, prev_package.clone()) .await .map(|_| ()) })), |
