57 |
58 |
|
$template->etag = $etag ?? '*'; |
58 |
59 |
|
|
59 |
60 |
|
foreach ((array) ($data['conditions'] ?? []) as $conditionData) { |
60 |
|
- |
$template->conditions[(string) $conditionData['name']] = Condition::fromArray($conditionData); |
|
61 |
+ |
$template = $template->withCondition(self::buildCondition($conditionData['name'], $conditionData)); |
61 |
62 |
|
} |
62 |
63 |
|
|
63 |
64 |
|
foreach ((array) ($data['parameters'] ?? []) as $name => $parameterData) { |
64 |
|
- |
$template->parameters[(string) $name] = Parameter::fromArray([(string) $name => $parameterData]); |
|
65 |
+ |
$template = $template->withParameter(self::buildParameter($name, $parameterData)); |
|
66 |
+ |
} |
|
67 |
+ |
|
|
68 |
+ |
foreach ((array) ($data['parameterGroups'] ?? []) as $name => $parameterGroupData) { |
|
69 |
+ |
$template = $template->withParameterGroup(self::buildParameterGroup($name, $parameterGroupData)); |
65 |
70 |
|
} |
66 |
71 |
|
|
67 |
72 |
|
if (\is_array($data['version'] ?? null)) { |
68 |
|
- |
try { |
69 |
|
- |
$template->version = Version::fromArray($data['version']); |
70 |
|
- |
} catch (Throwable $e) { |
71 |
|
- |
$template->version = null; |
72 |
|
- |
} |
|
73 |
+ |
$template->version = Version::fromArray($data['version']); |
73 |
74 |
|
} |
74 |
75 |
|
|
75 |
76 |
|
return $template; |
76 |
77 |
|
} |
77 |
78 |
|
|
|
79 |
+ |
/** |
|
80 |
+ |
* @param array<string, string> $data |
|
81 |
+ |
*/ |
|
82 |
+ |
private static function buildCondition(string $name, array $data): Condition |
|
83 |
+ |
{ |
|
84 |
+ |
$condition = Condition::named($name)->withExpression($data['expression']); |
|
85 |
+ |
|
|
86 |
+ |
if ($tagColor = $data['tagColor'] ?? null) { |
|
87 |
+ |
$condition = $condition->withTagColor(new TagColor($tagColor)); |
|
88 |
+ |
} |
|
89 |
+ |
|
|
90 |
+ |
return $condition; |
|
91 |
+ |
} |
|
92 |
+ |
|
|
93 |
+ |
/** |
|
94 |
+ |
* @param array<string, mixed> $data |
|
95 |
+ |
*/ |
|
96 |
+ |
private static function buildParameter(string $name, array $data): Parameter |
|
97 |
+ |
{ |
|
98 |
+ |
$parameter = Parameter::named($name) |
|
99 |
+ |
->withDescription((string) ($data['description'] ?? '')) |
|
100 |
+ |
->withDefaultValue(DefaultValue::fromArray($data['defaultValue'] ?? [])); |
|
101 |
+ |
|
|
102 |
+ |
foreach ((array) ($data['conditionalValues'] ?? []) as $key => $conditionalValueData) { |
|
103 |
+ |
$parameter = $parameter->withConditionalValue(new ConditionalValue($key, $conditionalValueData['value'])); |
|
104 |
+ |
} |
|
105 |
+ |
|
|
106 |
+ |
return $parameter; |
|
107 |
+ |
} |
|
108 |
+ |
|
|
109 |
+ |
/** |
|
110 |
+ |
* @param array<string, mixed> $parameterGroupData |
|
111 |
+ |
*/ |
|
112 |
+ |
private static function buildParameterGroup(string $name, array $parameterGroupData): ParameterGroup |
|
113 |
+ |
{ |
|
114 |
+ |
$group = ParameterGroup::named($name) |
|
115 |
+ |
->withDescription((string) ($parameterGroupData['description'] ?? '')); |
|
116 |
+ |
|
|
117 |
+ |
foreach ($parameterGroupData['parameters'] ?? [] as $parameterName => $parameterData) { |
|
118 |
+ |
$group = $group->withParameter(self::buildParameter($parameterName, $parameterData)); |
|
119 |
+ |
} |
|
120 |
+ |
|
|
121 |
+ |
return $group; |
|
122 |
+ |
} |
|
123 |
+ |
|
78 |
124 |
|
/** |
79 |
125 |
|
* @internal |
80 |
126 |
|
*/ |