diff options
| -rw-r--r-- | crates/shirabe/src/package/base_package.rs | 17 | ||||
| -rw-r--r-- | crates/shirabe/src/package/handle.rs | 14 |
2 files changed, 14 insertions, 17 deletions
diff --git a/crates/shirabe/src/package/base_package.rs b/crates/shirabe/src/package/base_package.rs index ec2fd3f..54abc13 100644 --- a/crates/shirabe/src/package/base_package.rs +++ b/crates/shirabe/src/package/base_package.rs @@ -84,32 +84,15 @@ pub trait BasePackage: PackageInterface + std::fmt::Display { 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. - fn as_alias_package_mut(&mut self) -> Option<&mut crate::package::AliasPackage> { None } - // get_name / get_pretty_name / get_names live on PackageInterface; the BasePackage - // duplicates were causing ambiguity at every call site (`pkg.get_name()` with - // pkg: &dyn BasePackage). Concrete impls already forward to name()/pretty_name(). - - // set_id, get_id, get_repository, get_unique_name, set_repository are inherited - // from PackageInterface; do not redeclare here to avoid trait-method ambiguity. - fn is_platform(&self) -> bool { self.repository_opt() .map_or(false, |r| r.is::<PlatformRepository>()) } - fn equals(&self, _package: &dyn PackageInterface) -> bool { - // TODO(phase-b): implement via reference identity (requires Rc/Arc) - // PHP uses === which is reference equality; unwraps AliasPackage on both sides - todo!("equals requires reference identity which needs Rc/Arc") - } - - // get_pretty_string is inherited from PackageInterface. - fn get_full_pretty_version(&self, truncate: bool, display_mode: DisplayMode) -> String { if display_mode == DisplayMode::SourceRefIfDev && (!self.is_dev() diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs index 2e723b3..5df4fc0 100644 --- a/crates/shirabe/src/package/handle.rs +++ b/crates/shirabe/src/package/handle.rs @@ -1359,6 +1359,20 @@ macro_rules! impl_handle_downcasts { impl_handle_downcasts!(PackageInterfaceHandle); +impl PackageInterfaceHandle { + pub fn equals(&self, package: &PackageInterfaceHandle) -> bool { + let self_real = match self.as_alias() { + Some(alias) => PackageInterfaceHandle::from(alias.get_alias_of()), + None => self.clone(), + }; + let other_real = match package.as_alias() { + Some(alias) => PackageInterfaceHandle::from(alias.get_alias_of()), + None => package.clone(), + }; + self_real.ptr_eq(&other_real) + } +} + impl PackageHandle { pub fn from_package(package: Package) -> Self { Self(Rc::new(RefCell::new(AnyPackage::Package(package)))) |
