aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-27 00:49:33 +0900
committernsfisis <nsfisis@gmail.com>2026-05-27 00:54:09 +0900
commitcc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (patch)
tree091a0d01232d927f13f3ab22700701804980f231 /crates/shirabe/src/util
parentc5850d62beabef0a6bcc4cf6a179589c0ba8f405 (diff)
downloadphp-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.rs17
-rw-r--r--crates/shirabe/src/util/sync_helper.rs41
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(|_| ())
})),