diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:43:31 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:43:31 +0900 |
| commit | c772e00dfbe4dd10d06c2fe9cb2389158ddae744 (patch) | |
| tree | 4498e466263f11d19ec66c35a2db7719bdd42de8 /crates/shirabe | |
| parent | 3f2f6f2c3552f014e840c58a7adf61b239b675a0 (diff) | |
| download | php-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.tar.gz php-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.tar.zst php-shirabe-c772e00dfbe4dd10d06c2fe9cb2389158ddae744.zip | |
feat(port): port PlatformRequirementFilterFactory.php
Diffstat (limited to 'crates/shirabe')
| -rw-r--r-- | crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs | 43 |
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) + } +} |
