diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:28:16 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:28:16 +0900 |
| commit | df8b44c06667b366917ab2fbc7dae0034c10b1e6 (patch) | |
| tree | aabc56ced062daa64bd1ce068b044ae856e209ff /crates/shirabe | |
| parent | 9822e9e0cbdb759a099ae03e2a3fa230678c6d17 (diff) | |
| download | php-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.tar.gz php-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.tar.zst php-shirabe-df8b44c06667b366917ab2fbc7dae0034c10b1e6.zip | |
feat(port): port PackageInfo.php
Diffstat (limited to 'crates/shirabe')
| -rw-r--r-- | crates/shirabe/src/util/package_info.rs | 32 |
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 + } +} |
