ParameterGroup.php 1.34 KB
Newer Older
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
<?php

declare(strict_types=1);

namespace Kreait\Firebase\RemoteConfig;

final class ParameterGroup implements \JsonSerializable
{
    private string $name;

    private string $description = '';

    /** @var Parameter[] */
    private array $parameters = [];

    private function __construct(string $name)
    {
        $this->name = $name;
    }

    public static function named(string $name): self
    {
        return new self($name);
    }

    public function name(): string
    {
        return $this->name;
    }

    public function description(): string
    {
        return $this->description;
    }

    /**
     * @return Parameter[]
     */
    public function parameters(): array
    {
        return $this->parameters;
    }

    public function withDescription(string $description): self
    {
        $group = clone $this;
        $group->description = $description;

        return $group;
    }

    public function withParameter(Parameter $parameter): self
    {
        $group = clone $this;
        $group->parameters[$parameter->name()] = $parameter;

        return $group;
    }

    /**
     * @return array{description: string, parameters: Parameter[]}
     */
    public function jsonSerialize(): array
    {
        return [
            'description' => $this->description,
            'parameters' => $this->parameters,
        ];
    }
}