summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Common/Configuration/Parser/MapParser.php
blob: 273d57c87ca843bb5849987219a7c2763503df7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php

declare(strict_types=1);

namespace OpenTelemetry\SDK\Common\Configuration\Parser;

use InvalidArgumentException;

class MapParser
{
    private const VARIABLE_SEPARATOR = ',';
    private const KEY_VALUE_SEPARATOR = '=';

    public static function parse($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $result = [];

        if (null === $value || trim($value) === '') {
            return $result;
        }

        foreach (explode(self::VARIABLE_SEPARATOR, $value) as $pair) {
            self::validateKeyValuePair($pair);

            [$key, $value] = explode(self::KEY_VALUE_SEPARATOR, $pair, 2);
            $result[trim($key)] = trim($value);
        }

        return $result;
    }

    private static function validateKeyValuePair(string $pair)
    {
        if (strpos($pair, self::KEY_VALUE_SEPARATOR) === false) {
            throw new InvalidArgumentException(sprintf(
                'Key-Value pair "%s" does not contain separator "%s"',
                $pair,
                self::KEY_VALUE_SEPARATOR
            ));
        }
    }
}