Skip to content

Commit 449480b

Browse files
committed
Improve Container implementation
1 parent f29f8f0 commit 449480b

File tree

5 files changed

+15
-11
lines changed

5 files changed

+15
-11
lines changed

src/Dictionary.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,19 @@
2626
final class Dictionary implements MemberOrderedMap
2727
{
2828
/** @var array<string, Value|(MemberList<int, Value>&ParameterAccess)> */
29-
private array $members = [];
29+
private readonly array $members;
3030

3131
/**
3232
* @param iterable<string, (MemberList<int, Value>&ParameterAccess)|iterable<Value|DataType>|Value|DataType> $members
3333
*/
3434
private function __construct(iterable $members = [])
3535
{
36+
$filteredMembers = [];
3637
foreach ($members as $key => $member) {
37-
$this->members[MapKey::fromString($key)->value] = self::filterMember($member);
38+
$filteredMembers[MapKey::fromString($key)->value] = self::filterMember($member);
3839
}
40+
41+
$this->members = $filteredMembers;
3942
}
4043

4144
/**
@@ -107,7 +110,7 @@ public static function fromHttpValue(Stringable|string $httpValue): self
107110
{
108111
return new self((function (iterable $pairs) {
109112
foreach ($pairs as $key => $value) {
110-
yield $key => is_array($value) ? InnerList::fromMembers(...$value[0])->withParameters(Parameters::fromAssociative($value[1])) : $value;
113+
yield $key => is_array($value) ? InnerList::fromAssociativeParameters($value[1], ...$value[0]) : $value;
111114
}
112115
})(Parser::parseDictionary($httpValue)));
113116
}

src/InnerList.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ public static function fromHttpValue(Stringable|string $httpValue): self
8080
{
8181
[$members, $parameters] = [...Parser::parseInnerList($httpValue)];
8282

83-
return self::fromMembers(...$members)
84-
->withParameters(Parameters::fromAssociative($parameters));
83+
return self::fromAssociativeParameters($parameters, ...$members);
8584
}
8685

8786
public function parameters(): Parameters

src/InnerListTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ public function it_can_be_instantiated_with_an_collection_of_item(): void
1616
$stringItem = Item::from('helloWorld');
1717
$booleanItem = Item::from(true);
1818
$arrayParams = [$stringItem, $booleanItem];
19-
$instance = InnerList::fromMembers(...$arrayParams)
20-
->withParameters(Parameters::fromAssociative(['test' => Item::from(42)]));
19+
$instance = InnerList::fromAssociativeParameters(['test' => Item::from(42)], ...$arrayParams);
2120

2221
self::assertSame($stringItem, $instance->get(0));
2322
self::assertTrue($instance->hasMembers());
@@ -202,7 +201,7 @@ public function it_can_create_via_with_parameters_method_a_new_object(): void
202201
#[Test]
203202
public function it_can_create_via_parameters_access_methods_a_new_object(): void
204203
{
205-
$instance1 = InnerList::fromMembers(Token::fromString('babayaga'), 'a', true)->withParameters(Parameters::fromAssociative(['a' => true]));
204+
$instance1 = InnerList::fromAssociativeParameters(['a' => true], Token::fromString('babayaga'), 'a', true);
206205
$instance2 = $instance1->appendParameter('a', true);
207206
$instance7 = $instance1->addParameter('a', true);
208207
$instance3 = $instance1->prependParameter('a', false);

src/OuterList.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ private static function filterMember(iterable|StructuredField|Token|ByteSequence
6666
public static function fromHttpValue(Stringable|string $httpValue): self
6767
{
6868
return self::fromMembers(...array_map(
69-
fn (mixed $value) => is_array($value) ? InnerList::fromMembers(...$value[0])->withParameters(Parameters::fromAssociative($value[1])) : $value,
69+
fn (mixed $value) => is_array($value) ? InnerList::fromAssociativeParameters($value[1], ...$value[0]) : $value,
7070
Parser::parseList($httpValue)
7171
));
7272
}

src/Parameters.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@
2424
final class Parameters implements MemberOrderedMap
2525
{
2626
/** @var array<string, Value> */
27-
private array $members = [];
27+
private readonly array $members;
2828

2929
/**
3030
* @param iterable<string, Value|DataType> $members
3131
*/
3232
private function __construct(iterable $members = [])
3333
{
34+
$filteredMembers = [];
3435
foreach ($members as $key => $member) {
35-
$this->members[MapKey::fromString($key)->value] = self::filterMember($member);
36+
$filteredMembers[MapKey::fromString($key)->value] = self::filterMember($member);
3637
}
38+
39+
$this->members = $filteredMembers;
3740
}
3841

3942
private static function filterMember(StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): Value

0 commit comments

Comments
 (0)