aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/filter
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-12 03:43:31 +0900
committernsfisis <nsfisis@gmail.com>2026-05-12 03:43:31 +0900
commitc772e00dfbe4dd10d06c2fe9cb2389158ddae744 (patch)
tree4498e466263f11d19ec66c35a2db7719bdd42de8 /crates/shirabe/src/filter
parent3f2f6f2c3552f014e840c58a7adf61b239b675a0 (diff)
downloadphp-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.tar.gz
php-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.tar.zst
php-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.zip
feat(port): port PlatformRequirementFilterFactory.php
Diffstat (limited to 'crates/shirabe/src/filter')
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs
index 4df8cde..8dda266 100644
--- a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs
+++ b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs
@@ -1 +1,44 @@
//! ref: composer/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterFactory.php
+
+use anyhow::Result;
+use shirabe_php_shim::{InvalidArgumentException, PhpMixed};
+use crate::filter::platform_requirement_filter::{
+ ignore_all_platform_requirement_filter::IgnoreAllPlatformRequirementFilter,
+ ignore_list_platform_requirement_filter::IgnoreListPlatformRequirementFilter,
+ ignore_nothing_platform_requirement_filter::IgnoreNothingPlatformRequirementFilter,
+ platform_requirement_filter_interface::PlatformRequirementFilterInterface,
+};
+
+pub struct PlatformRequirementFilterFactory;
+
+impl PlatformRequirementFilterFactory {
+ pub fn from_bool_or_list(bool_or_list: PhpMixed) -> Result<Box<dyn PlatformRequirementFilterInterface>> {
+ match bool_or_list {
+ PhpMixed::Bool(b) => {
+ if b {
+ Ok(Self::ignore_all())
+ } else {
+ Ok(Self::ignore_nothing())
+ }
+ }
+ list_or_array @ (PhpMixed::List(_) | PhpMixed::Array(_)) => {
+ Ok(Box::new(IgnoreListPlatformRequirementFilter::new(list_or_array)))
+ }
+ other => Err(anyhow::anyhow!(InvalidArgumentException {
+ message: format!(
+ "PlatformRequirementFilter: Unknown $boolOrList parameter {}. Please report at https://github.com/composer/composer/issues/new.",
+ shirabe_php_shim::get_debug_type(&other)
+ ),
+ code: 0,
+ })),
+ }
+ }
+
+ pub fn ignore_all() -> Box<dyn PlatformRequirementFilterInterface> {
+ Box::new(IgnoreAllPlatformRequirementFilter)
+ }
+
+ pub fn ignore_nothing() -> Box<dyn PlatformRequirementFilterInterface> {
+ Box::new(IgnoreNothingPlatformRequirementFilter)
+ }
+}