diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-25 00:58:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-25 00:58:36 +0900 |
| commit | 1921f173ea219cb4b25847294d2d3fa465550fbb (patch) | |
| tree | 0d30486a2cb9a0c106e5d5827be3f655c60cd871 /crates/shirabe/src/command/fund_command.rs | |
| parent | dbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (diff) | |
| download | php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.gz php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.zst php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.zip | |
refactor(package): introduce Rc<RefCell<_>> handles for packages
PHP packages have reference semantics, so introduce shared-ownership
handles over an AnyPackage enum (PackageInterfaceHandle and friends)
and replace Box<dyn PackageInterface> throughout.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/fund_command.rs')
| -rw-r--r-- | crates/shirabe/src/command/fund_command.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/crates/shirabe/src/command/fund_command.rs b/crates/shirabe/src/command/fund_command.rs index 82c0c0a..f829342 100644 --- a/crates/shirabe/src/command/fund_command.rs +++ b/crates/shirabe/src/command/fund_command.rs @@ -67,14 +67,14 @@ impl FundCommand { let mut packages_to_load: IndexMap<String, Option<AnyConstraint>> = IndexMap::new(); let mut packages_to_load_names: indexmap::IndexSet<String> = indexmap::IndexSet::new(); for package in repo.get_packages() { - if package.as_any().downcast_ref::<AliasPackage>().is_some() { + if package.as_alias().is_some() { continue; } packages_to_load.insert( - package.get_name().to_string(), + package.get_name(), Some(MatchAllConstraint::new(None).into()), ); - packages_to_load_names.insert(package.get_name().to_string()); + packages_to_load_names.insert(package.get_name()); } // load all packages dev versions in parallel @@ -87,15 +87,15 @@ impl FundCommand { // collect funding data from default branches for (_, package) in &result.packages { - if package.as_any().downcast_ref::<AliasPackage>().is_none() { + if package.as_alias().is_none() { // TODO: check for CompleteAliasPackage as well - if let Some(complete_pkg) = package.as_any().downcast_ref::<CompletePackage>() { + if let Some(complete_pkg) = package.as_complete() { if complete_pkg.is_default_branch() && !complete_pkg.get_funding().is_empty() - && packages_to_load_names.contains(complete_pkg.get_name()) + && packages_to_load_names.contains(&complete_pkg.get_name()) { - Self::insert_funding_data(&mut fundings, complete_pkg)?; - packages_to_load_names.shift_remove(complete_pkg.get_name()); + Self::insert_funding_data(&mut fundings, &complete_pkg)?; + packages_to_load_names.shift_remove(&complete_pkg.get_name()); } } } @@ -103,15 +103,14 @@ impl FundCommand { // collect funding from installed packages if none was found in the default branch above for package in repo.get_packages() { - if package.as_any().downcast_ref::<AliasPackage>().is_some() - || !packages_to_load_names.contains(package.get_name()) + if package.as_alias().is_some() || !packages_to_load_names.contains(&package.get_name()) { continue; } // TODO: check for CompleteAliasPackage as well - if let Some(complete_pkg) = package.as_any().downcast_ref::<CompletePackage>() { + if let Some(complete_pkg) = package.as_complete() { if !complete_pkg.get_funding().is_empty() { - Self::insert_funding_data(&mut fundings, complete_pkg)?; + Self::insert_funding_data(&mut fundings, &complete_pkg)?; } } } @@ -172,10 +171,12 @@ impl FundCommand { fn insert_funding_data( fundings: &mut IndexMap<String, IndexMap<String, Vec<String>>>, - package: &CompletePackage, + package: &crate::package::CompletePackageInterfaceHandle, ) -> Result<()> { let pretty_name = package.get_pretty_name(); - let (vendor, package_name) = pretty_name.split_once('/').unwrap_or(("", pretty_name)); + let (vendor, package_name) = pretty_name + .split_once('/') + .unwrap_or(("", pretty_name.as_str())); for funding_option in package.get_funding() { let url_val = funding_option.get("url").and_then(|v| v.as_string()); |
