1<?php
2
3declare(strict_types=1);
4
5/*
6 * This file is part of the league/config package.
7 *
8 * (c) Colin O'Dell <colinodell@gmail.com>
9 *
10 * For the full copyright and license information, please view the LICENSE
11 * file that was distributed with this source code.
12 */
13
14namespace League\Config\Exception;
15
16class InvalidConfigurationException extends \UnexpectedValueException implements ConfigurationExceptionInterface
17{
18    /**
19     * @param string  $option      Name/path of the option
20     * @param mixed   $valueGiven  The invalid option that was provided
21     * @param ?string $description Additional text describing the issue (optional)
22     */
23    public static function forConfigOption(string $option, $valueGiven, ?string $description = null): self
24    {
25        $message = \sprintf('Invalid config option for "%s": %s', $option, self::getDebugValue($valueGiven));
26        if ($description !== null) {
27            $message .= \sprintf(' (%s)', $description);
28        }
29
30        return new self($message);
31    }
32
33    /**
34     * @param mixed $value
35     *
36     * @psalm-pure
37     */
38    private static function getDebugValue($value): string
39    {
40        if (\is_object($value)) {
41            return \get_class($value);
42        }
43
44        return \print_r($value, true);
45    }
46}
47