<?php declare(strict_types=1); namespace Shlinkio\Shlink\Common; use const ARRAY_FILTER_USE_KEY; use const JSON_ERROR_NONE; use function array_filter; use function getenv; use function in_array; use function json_decode as spl_json_decode; use function json_last_error; use function json_last_error_msg; use function sprintf; use function strtolower; use function trim; /** * Gets the value of an environment variable. Supports boolean, empty and null. * This is basically Laravel's env helper * * @param string $key * @param mixed $default * @return mixed * @link https://github.com/laravel/framework/blob/5.2/src/Illuminate/Foundation/helpers.php#L369 */ function env($key, $default = null) { $value = getenv($key); if ($value === false) { return $default; } switch (strtolower($value)) { case 'true': case '(true)': return true; case 'false': case '(false)': return false; case 'empty': case '(empty)': return ''; case 'null': case '(null)': return null; } return trim($value); } function contains($needle, array $haystack): bool { return in_array($needle, $haystack, true); } /** * Returns only the keys in keysToPick from provided array * * @param array $array * @param array $keysToPick */ function pick(array $array, array $keysToPick): array { return array_filter($array, function (string $key) use ($keysToPick) { return contains($key, $keysToPick); }, ARRAY_FILTER_USE_KEY); } /** * @throws Exception\InvalidArgumentException */ function json_decode(string $json, int $depth = 512, int $options = 0): array { $data = spl_json_decode($json, true, $depth, $options); if (JSON_ERROR_NONE !== json_last_error()) { throw new Exception\InvalidArgumentException(sprintf('Error decoding JSON: %s', json_last_error_msg())); } return $data; }