diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:52:46 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:52:46 +0900 |
| commit | a4c885e910f88b48df68e41005513685b16fc182 (patch) | |
| tree | e9816da8288db8eb3eaf5f6625a1a616fb460868 /crates/shirabe/src/package/version | |
| parent | 0c5593f66a11eb63e9d92b0fc6fc8aa460c4b1f4 (diff) | |
| download | php-shirabe-a4c885e910f88b48df68e41005513685b16fc182.tar.gz php-shirabe-a4c885e910f88b48df68e41005513685b16fc182.tar.zst php-shirabe-a4c885e910f88b48df68e41005513685b16fc182.zip | |
feat(port): port StabilityFilter.php
Diffstat (limited to 'crates/shirabe/src/package/version')
| -rw-r--r-- | crates/shirabe/src/package/version/stability_filter.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/shirabe/src/package/version/stability_filter.rs b/crates/shirabe/src/package/version/stability_filter.rs index 6465a00..65f024f 100644 --- a/crates/shirabe/src/package/version/stability_filter.rs +++ b/crates/shirabe/src/package/version/stability_filter.rs @@ -1 +1,31 @@ //! ref: composer/src/Composer/Package/Version/StabilityFilter.php + +use indexmap::IndexMap; +use crate::package::base_package::BasePackage; + +pub struct StabilityFilter; + +impl StabilityFilter { + pub fn is_package_acceptable( + acceptable_stabilities: &IndexMap<String, i64>, + stability_flags: &IndexMap<String, i64>, + names: &[String], + stability: &str, + ) -> bool { + for name in names { + // allow if package matches the package-specific stability flag + if let Some(&flag) = stability_flags.get(name) { + if let Some(&stability_value) = BasePackage::STABILITIES.get(stability) { + if stability_value <= flag { + return true; + } + } + } else if acceptable_stabilities.contains_key(stability) { + // allow if package matches the global stability requirement and has no exception + return true; + } + } + + false + } +} |
