diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-28 22:43:11 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-28 22:43:43 +0900 |
| commit | eea4efe87e455742ec17881ee93d8095925e8516 (patch) | |
| tree | 6d242f4fdd0bf32f0494a6fbbd62bce9ed6e1dc7 /crates/shirabe/src/package/base_package.rs | |
| parent | cc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (diff) | |
| download | php-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.rs | 17 |
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 { |
