aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-20 02:45:02 +0900
committernsfisis <nsfisis@gmail.com>2026-06-20 02:45:02 +0900
commit98af76dbe2815c95d15c20e0f911c4a420b6d848 (patch)
treeaa3f3dd479f0ffee8542009bf51f43d53234d8c4 /crates/shirabe
parentcf0e5510dc645038b91c6fcb77ff373cb2a57d49 (diff)
downloadphp-shirabe-98af76dbe2815c95d15c20e0f911c4a420b6d848.tar.gz
php-shirabe-98af76dbe2815c95d15c20e0f911c4a420b6d848.tar.zst
php-shirabe-98af76dbe2815c95d15c20e0f911c4a420b6d848.zip
feat(package): implement as_package_interface upcast
Make the Rust-only as_package_interface a required trait method and return self from each concrete implementation, replacing the todo!() default that PHP needs no equivalent for (implicit subtype coercion). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/package/complete_alias_package.rs4
-rw-r--r--crates/shirabe/src/package/complete_package.rs4
-rw-r--r--crates/shirabe/src/package/complete_package_interface.rs4
-rw-r--r--crates/shirabe/src/package/root_alias_package.rs8
-rw-r--r--crates/shirabe/src/package/root_package.rs8
-rw-r--r--crates/shirabe/src/package/root_package_interface.rs4
6 files changed, 26 insertions, 6 deletions
diff --git a/crates/shirabe/src/package/complete_alias_package.rs b/crates/shirabe/src/package/complete_alias_package.rs
index 9e1f1f6..54b4486 100644
--- a/crates/shirabe/src/package/complete_alias_package.rs
+++ b/crates/shirabe/src/package/complete_alias_package.rs
@@ -153,4 +153,8 @@ impl CompletePackageInterface for CompleteAliasPackage {
fn set_archive_excludes(&mut self, excludes: Vec<String>) {
self.alias_of.set_archive_excludes(excludes);
}
+
+ fn as_package_interface(&self) -> &dyn crate::package::PackageInterface {
+ self
+ }
}
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs
index 033db9b..56d50d5 100644
--- a/crates/shirabe/src/package/complete_package.rs
+++ b/crates/shirabe/src/package/complete_package.rs
@@ -156,6 +156,10 @@ impl CompletePackageInterface for CompletePackage {
fn get_archive_excludes(&self) -> Vec<String> {
self.archive_excludes.clone()
}
+
+ fn as_package_interface(&self) -> &dyn PackageInterface {
+ self
+ }
}
impl PackageInterface for CompletePackage {
diff --git a/crates/shirabe/src/package/complete_package_interface.rs b/crates/shirabe/src/package/complete_package_interface.rs
index 549aeb4..8a7ee25 100644
--- a/crates/shirabe/src/package/complete_package_interface.rs
+++ b/crates/shirabe/src/package/complete_package_interface.rs
@@ -56,7 +56,5 @@ pub trait CompletePackageInterface: PackageInterface {
fn set_archive_excludes(&mut self, excludes: Vec<String>);
- fn as_package_interface(&self) -> &dyn crate::package::PackageInterface {
- todo!()
- }
+ fn as_package_interface(&self) -> &dyn crate::package::PackageInterface;
}
diff --git a/crates/shirabe/src/package/root_alias_package.rs b/crates/shirabe/src/package/root_alias_package.rs
index 9f987eb..140c96d 100644
--- a/crates/shirabe/src/package/root_alias_package.rs
+++ b/crates/shirabe/src/package/root_alias_package.rs
@@ -146,6 +146,10 @@ impl RootPackageInterface for RootAliasPackage {
fn set_extra(&mut self, extra: IndexMap<String, PhpMixed>) {
self.alias_of.set_extra(extra);
}
+
+ fn as_package_interface(&self) -> &dyn crate::package::PackageInterface {
+ self
+ }
}
impl CompletePackageInterface for RootAliasPackage {
@@ -248,4 +252,8 @@ impl CompletePackageInterface for RootAliasPackage {
fn set_archive_excludes(&mut self, excludes: Vec<String>) {
self.inner.set_archive_excludes(excludes);
}
+
+ fn as_package_interface(&self) -> &dyn crate::package::PackageInterface {
+ self
+ }
}
diff --git a/crates/shirabe/src/package/root_package.rs b/crates/shirabe/src/package/root_package.rs
index fc04d25..9cdc6e2 100644
--- a/crates/shirabe/src/package/root_package.rs
+++ b/crates/shirabe/src/package/root_package.rs
@@ -129,6 +129,10 @@ impl RootPackageInterface for RootPackage {
fn set_extra(&mut self, extra: IndexMap<String, PhpMixed>) {
self.inner.inner.set_extra(extra);
}
+
+ fn as_package_interface(&self) -> &dyn PackageInterface {
+ self
+ }
}
impl CompletePackageInterface for RootPackage {
@@ -231,6 +235,10 @@ impl CompletePackageInterface for RootPackage {
fn set_archive_excludes(&mut self, excludes: Vec<String>) {
CompletePackageInterface::set_archive_excludes(&mut self.inner, excludes)
}
+
+ fn as_package_interface(&self) -> &dyn PackageInterface {
+ self
+ }
}
impl std::fmt::Display for RootPackage {
diff --git a/crates/shirabe/src/package/root_package_interface.rs b/crates/shirabe/src/package/root_package_interface.rs
index aa2534a..d597555 100644
--- a/crates/shirabe/src/package/root_package_interface.rs
+++ b/crates/shirabe/src/package/root_package_interface.rs
@@ -51,7 +51,5 @@ pub trait RootPackageInterface: CompletePackageInterface {
fn set_extra(&mut self, extra: IndexMap<String, PhpMixed>);
- fn as_package_interface(&self) -> &dyn PackageInterface {
- todo!()
- }
+ fn as_package_interface(&self) -> &dyn PackageInterface;
}