aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-12 03:28:16 +0900
committernsfisis <nsfisis@gmail.com>2026-05-12 03:28:16 +0900
commitdf8b44c06667b366917ab2fbc7dae0034c10b1e6 (patch)
treeaabc56ced062daa64bd1ce068b044ae856e209ff /crates/shirabe/src
parent9822e9e0cbdb759a099ae03e2a3fa230678c6d17 (diff)
downloadphp-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.tar.gz
php-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.tar.zst
php-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.zip
feat(port): port PackageInfo.php
Diffstat (limited to 'crates/shirabe/src')
-rw-r--r--crates/shirabe/src/util/package_info.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/shirabe/src/util/package_info.rs b/crates/shirabe/src/util/package_info.rs
index 3db9b68..82fac57 100644
--- a/crates/shirabe/src/util/package_info.rs
+++ b/crates/shirabe/src/util/package_info.rs
@@ -1 +1,33 @@
//! ref: composer/src/Composer/Util/PackageInfo.php
+
+use crate::package::complete_package_interface::CompletePackageInterface;
+use crate::package::package_interface::PackageInterface;
+
+pub struct PackageInfo;
+
+impl PackageInfo {
+ pub fn get_view_source_url(package: &dyn PackageInterface) -> Option<String> {
+ if let Some(complete) = package.as_complete_package_interface() {
+ let support = complete.get_support();
+ if let Some(source) = support.get("source") {
+ if source != "" {
+ return Some(source.clone());
+ }
+ }
+ }
+
+ package.get_source_url()
+ }
+
+ pub fn get_view_source_or_homepage_url(package: &dyn PackageInterface) -> Option<String> {
+ let url = Self::get_view_source_url(package).or_else(|| {
+ package.as_complete_package_interface().and_then(|complete| complete.get_homepage())
+ });
+
+ if url.as_deref() == Some("") {
+ return None;
+ }
+
+ url
+ }
+}