xref: /plugin/combo/vendor/symfony/process/ProcessUtils.php (revision 83c6863253ba0b92605aa8dceca974358d439aaa)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeau/*
404fd306cSNickeau * This file is part of the Symfony package.
504fd306cSNickeau *
604fd306cSNickeau * (c) Fabien Potencier <fabien@symfony.com>
704fd306cSNickeau *
804fd306cSNickeau * For the full copyright and license information, please view the LICENSE
904fd306cSNickeau * file that was distributed with this source code.
1004fd306cSNickeau */
1104fd306cSNickeau
1204fd306cSNickeaunamespace Symfony\Component\Process;
1304fd306cSNickeau
1404fd306cSNickeauuse Symfony\Component\Process\Exception\InvalidArgumentException;
1504fd306cSNickeau
1604fd306cSNickeau/**
1704fd306cSNickeau * ProcessUtils is a bunch of utility methods.
1804fd306cSNickeau *
1904fd306cSNickeau * This class contains static methods only and is not meant to be instantiated.
2004fd306cSNickeau *
2104fd306cSNickeau * @author Martin Hasoň <martin.hason@gmail.com>
2204fd306cSNickeau */
2304fd306cSNickeauclass ProcessUtils
2404fd306cSNickeau{
2504fd306cSNickeau    /**
2604fd306cSNickeau     * This class should not be instantiated.
2704fd306cSNickeau     */
2804fd306cSNickeau    private function __construct()
2904fd306cSNickeau    {
3004fd306cSNickeau    }
3104fd306cSNickeau
3204fd306cSNickeau    /**
3304fd306cSNickeau     * Validates and normalizes a Process input.
3404fd306cSNickeau     *
3504fd306cSNickeau     * @param string $caller The name of method call that validates the input
3604fd306cSNickeau     * @param mixed  $input  The input to validate
3704fd306cSNickeau     *
3804fd306cSNickeau     * @return mixed
3904fd306cSNickeau     *
4004fd306cSNickeau     * @throws InvalidArgumentException In case the input is not valid
4104fd306cSNickeau     */
4204fd306cSNickeau    public static function validateInput(string $caller, $input)
4304fd306cSNickeau    {
4404fd306cSNickeau        if (null !== $input) {
4504fd306cSNickeau            if (\is_resource($input)) {
4604fd306cSNickeau                return $input;
4704fd306cSNickeau            }
4804fd306cSNickeau            if (\is_string($input)) {
4904fd306cSNickeau                return $input;
5004fd306cSNickeau            }
51*83c68632SNico            if (\is_scalar($input)) {
5204fd306cSNickeau                return (string) $input;
5304fd306cSNickeau            }
5404fd306cSNickeau            if ($input instanceof Process) {
5504fd306cSNickeau                return $input->getIterator($input::ITER_SKIP_ERR);
5604fd306cSNickeau            }
5704fd306cSNickeau            if ($input instanceof \Iterator) {
5804fd306cSNickeau                return $input;
5904fd306cSNickeau            }
6004fd306cSNickeau            if ($input instanceof \Traversable) {
6104fd306cSNickeau                return new \IteratorIterator($input);
6204fd306cSNickeau            }
6304fd306cSNickeau
6404fd306cSNickeau            throw new InvalidArgumentException(sprintf('"%s" only accepts strings, Traversable objects or stream resources.', $caller));
6504fd306cSNickeau        }
6604fd306cSNickeau
6704fd306cSNickeau        return $input;
6804fd306cSNickeau    }
6904fd306cSNickeau}
70