xref: /plugin/combo/vendor/symfony/process/ProcessUtils.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau/*
4*04fd306cSNickeau * This file is part of the Symfony package.
5*04fd306cSNickeau *
6*04fd306cSNickeau * (c) Fabien Potencier <fabien@symfony.com>
7*04fd306cSNickeau *
8*04fd306cSNickeau * For the full copyright and license information, please view the LICENSE
9*04fd306cSNickeau * file that was distributed with this source code.
10*04fd306cSNickeau */
11*04fd306cSNickeau
12*04fd306cSNickeaunamespace Symfony\Component\Process;
13*04fd306cSNickeau
14*04fd306cSNickeauuse Symfony\Component\Process\Exception\InvalidArgumentException;
15*04fd306cSNickeau
16*04fd306cSNickeau/**
17*04fd306cSNickeau * ProcessUtils is a bunch of utility methods.
18*04fd306cSNickeau *
19*04fd306cSNickeau * This class contains static methods only and is not meant to be instantiated.
20*04fd306cSNickeau *
21*04fd306cSNickeau * @author Martin Hasoň <martin.hason@gmail.com>
22*04fd306cSNickeau */
23*04fd306cSNickeauclass ProcessUtils
24*04fd306cSNickeau{
25*04fd306cSNickeau    /**
26*04fd306cSNickeau     * This class should not be instantiated.
27*04fd306cSNickeau     */
28*04fd306cSNickeau    private function __construct()
29*04fd306cSNickeau    {
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    /**
33*04fd306cSNickeau     * Validates and normalizes a Process input.
34*04fd306cSNickeau     *
35*04fd306cSNickeau     * @param string $caller The name of method call that validates the input
36*04fd306cSNickeau     * @param mixed  $input  The input to validate
37*04fd306cSNickeau     *
38*04fd306cSNickeau     * @return mixed
39*04fd306cSNickeau     *
40*04fd306cSNickeau     * @throws InvalidArgumentException In case the input is not valid
41*04fd306cSNickeau     */
42*04fd306cSNickeau    public static function validateInput(string $caller, $input)
43*04fd306cSNickeau    {
44*04fd306cSNickeau        if (null !== $input) {
45*04fd306cSNickeau            if (\is_resource($input)) {
46*04fd306cSNickeau                return $input;
47*04fd306cSNickeau            }
48*04fd306cSNickeau            if (\is_string($input)) {
49*04fd306cSNickeau                return $input;
50*04fd306cSNickeau            }
51*04fd306cSNickeau            if (is_scalar($input)) {
52*04fd306cSNickeau                return (string) $input;
53*04fd306cSNickeau            }
54*04fd306cSNickeau            if ($input instanceof Process) {
55*04fd306cSNickeau                return $input->getIterator($input::ITER_SKIP_ERR);
56*04fd306cSNickeau            }
57*04fd306cSNickeau            if ($input instanceof \Iterator) {
58*04fd306cSNickeau                return $input;
59*04fd306cSNickeau            }
60*04fd306cSNickeau            if ($input instanceof \Traversable) {
61*04fd306cSNickeau                return new \IteratorIterator($input);
62*04fd306cSNickeau            }
63*04fd306cSNickeau
64*04fd306cSNickeau            throw new InvalidArgumentException(sprintf('"%s" only accepts strings, Traversable objects or stream resources.', $caller));
65*04fd306cSNickeau        }
66*04fd306cSNickeau
67*04fd306cSNickeau        return $input;
68*04fd306cSNickeau    }
69*04fd306cSNickeau}
70