aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/base_package.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-28 22:43:11 +0900
committernsfisis <nsfisis@gmail.com>2026-05-28 22:43:43 +0900
commiteea4efe87e455742ec17881ee93d8095925e8516 (patch)
tree6d242f4fdd0bf32f0494a6fbbd62bce9ed6e1dc7 /crates/shirabe/src/package/base_package.rs
parentcc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (diff)
downloadphp-shirabe-eea4efe87e455742ec17881ee93d8095925e8516.tar.gz
php-shirabe-eea4efe87e455742ec17881ee93d8095925e8516.tar.zst
php-shirabe-eea4efe87e455742ec17881ee93d8095925e8516.zip
refactor(repository): introduce Rc<RefCell<_>> handles for repositories
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package/base_package.rs')
-rw-r--r--crates/shirabe/src/package/base_package.rs17
1 files changed, 5 insertions, 12 deletions
diff --git a/crates/shirabe/src/package/base_package.rs b/crates/shirabe/src/package/base_package.rs
index 64a5919..ca6f171 100644
--- a/crates/shirabe/src/package/base_package.rs
+++ b/crates/shirabe/src/package/base_package.rs
@@ -8,7 +8,7 @@ use shirabe_php_shim::{LogicException, UnexpectedValueException, preg_quote};
use crate::package::Link;
use crate::package::PackageInterface;
use crate::repository::PlatformRepository;
-use crate::repository::RepositoryInterface;
+use crate::repository::RepositoryInterfaceHandle;
pub struct SupportedLinkType {
pub description: &'static str,
@@ -79,15 +79,9 @@ pub trait BasePackage: PackageInterface + std::fmt::Display {
fn name_mut(&mut self) -> &mut String;
fn pretty_name(&self) -> &str;
fn pretty_name_mut(&mut self) -> &mut String;
- fn repository_opt(&self) -> Option<&dyn RepositoryInterface>;
- fn set_repository_box(&mut self, repository: Box<dyn RepositoryInterface>);
- fn take_repository(&mut self) -> Option<Box<dyn RepositoryInterface>>;
-
- /// PHP `setRepository($this)` from the containing repository — Rust port marker until
- /// the borrow story for repository-package back-references is finalized in phase B.
- fn set_repository_self(&mut self) {
- // TODO(phase-b): wire up a back-reference to the containing repository when needed.
- }
+ fn repository_opt(&self) -> Option<RepositoryInterfaceHandle>;
+ fn set_repository_box(&mut self, repository: RepositoryInterfaceHandle);
+ fn take_repository(&mut self) -> Option<RepositoryInterfaceHandle>;
// as_alias_package / as_complete_package_interface inherited from PackageInterface.
@@ -104,8 +98,7 @@ pub trait BasePackage: PackageInterface + std::fmt::Display {
fn is_platform(&self) -> bool {
self.repository_opt()
- .and_then(|r| r.as_any().downcast_ref::<PlatformRepository>())
- .is_some()
+ .map_or(false, |r| r.is::<PlatformRepository>())
}
fn equals(&self, _package: &dyn PackageInterface) -> bool {