Skip to content

Commit fc56745

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

File tree

4 files changed

+36
-34
lines changed

4 files changed

+36
-34
lines changed

src/Dictionary.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ public function pair(int $index): array
234234
public function add(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
235235
{
236236
$members = $this->members;
237-
$members[MapKey::fromString($key)->value] = self::filterMember($member);
237+
$members[$key] = $member;
238238

239239
return new self($members);
240240
}
@@ -257,16 +257,17 @@ public function append(string $key, StructuredField|Token|ByteSequence|DateTimeI
257257
{
258258
$members = $this->members;
259259
unset($members[$key]);
260+
$members[$key] = $member;
260261

261-
return new self([...$members, $key => self::filterMember($member)]);
262+
return new self($members);
262263
}
263264

264265
public function prepend(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
265266
{
266267
$members = $this->members;
267268
unset($members[$key]);
268269

269-
return new self([$key => self::filterMember($member), ...$members]);
270+
return new self([$key => $member, ...$members]);
270271
}
271272

272273
/**

src/InnerList.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ private function __construct(private readonly Parameters $parameters, iterable $
3434
$this->members = array_map(self::filterMember(...), array_values([...$members]));
3535
}
3636

37+
private static function filterMember(StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): Value
38+
{
39+
return match (true) {
40+
$member instanceof Value => $member,
41+
$member instanceof StructuredField => throw new InvalidArgument('Expecting a "'.Value::class.'" instance; received a "'.$member::class.'" instead.'),
42+
default => Item::from($member),
43+
};
44+
}
45+
3746
/**
3847
* Returns a new instance.
3948
*/
@@ -62,15 +71,6 @@ public static function fromPairParameters(iterable $parameters, Value|Token|Byte
6271
return new self(Parameters::fromPairs($parameters), $members);
6372
}
6473

65-
private static function filterMember(StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): Value
66-
{
67-
return match (true) {
68-
$member instanceof Value => $member,
69-
$member instanceof StructuredField => throw new InvalidArgument('Expecting a "'.Value::class.'" instance; received a "'.$member::class.'" instead.'),
70-
default => Item::from($member),
71-
};
72-
}
73-
7474
/**
7575
* Returns an instance from an HTTP textual representation.
7676
*
@@ -242,7 +242,7 @@ public function unshift(StructuredField|Token|ByteSequence|DateTimeInterface|Str
242242
return $this;
243243
}
244244

245-
return $this->newInstance([...array_map(self::filterMember(...), array_values($members)), ...$this->members]);
245+
return $this->newInstance([...array_values($members), ...$this->members]);
246246
}
247247

248248
/**
@@ -262,7 +262,7 @@ public function push(StructuredField|Token|ByteSequence|DateTimeInterface|String
262262
return $this;
263263
}
264264

265-
return $this->newInstance([...$this->members, ...array_map(self::filterMember(...), array_values($members))]);
265+
return $this->newInstance([...$this->members, ...array_values($members)]);
266266
}
267267

268268
/**
@@ -280,7 +280,7 @@ public function insert(int $key, StructuredField|Token|ByteSequence|DateTimeInte
280280
count($this->members) === $offset => $this->push(...$members),
281281
[] === $members => $this,
282282
default => (function (array $newMembers) use ($offset, $members) {
283-
array_splice($newMembers, $offset, 0, array_map(self::filterMember(...), $members));
283+
array_splice($newMembers, $offset, 0, $members);
284284

285285
return $this->newInstance($newMembers);
286286
})($this->members),
@@ -294,7 +294,7 @@ public function replace(int $key, StructuredField|Token|ByteSequence|DateTimeInt
294294
}
295295

296296
$members = $this->members;
297-
$members[$offset] = self::filterMember($member);
297+
$members[$offset] = $member;
298298

299299
return $this->newInstance($members);
300300
}

src/OuterList.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,12 @@ final class OuterList implements MemberList
2727
/** @var list<Value|(MemberList<int, Value>&ParameterAccess)> */
2828
private readonly array $members;
2929

30-
/**
31-
* @param Value|(MemberList<int, Value>&ParameterAccess) ...$members
32-
*/
33-
private function __construct(MemberList|Value ...$members)
34-
{
35-
$this->members = array_values($members);
36-
}
37-
3830
/**
3931
* @param StructuredField|iterable<Value|DataType>|DataType ...$members
4032
*/
41-
public static function fromMembers(iterable|StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members): self
33+
private function __construct(iterable|StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members)
4234
{
43-
return new self(...array_map(self::filterMember(...), $members));
35+
$this->members = array_map(self::filterMember(...), array_values([...$members]));
4436
}
4537

4638
/**
@@ -58,6 +50,14 @@ private static function filterMember(iterable|StructuredField|Token|ByteSequence
5850
};
5951
}
6052

53+
/**
54+
* @param StructuredField|iterable<Value|DataType>|DataType ...$members
55+
*/
56+
public static function fromMembers(iterable|StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members): self
57+
{
58+
return new self(...$members);
59+
}
60+
6161
/**
6262
* Returns an instance from an HTTP textual representation.
6363
*
@@ -182,11 +182,11 @@ public function unshift(StructuredField|Token|ByteSequence|DateTimeInterface|Str
182182
return $this;
183183
}
184184

185-
return $this->newInstance([...array_map(self::filterMember(...), array_values($members)), ...$this->members]);
185+
return $this->newInstance([...array_values($members), ...$this->members]);
186186
}
187187

188188
/**
189-
* @param iterable<int, Value|(MemberList<int, Value>&ParameterAccess)> $members
189+
* @param iterable<int, Value|DataType|(MemberList<int, Value>&ParameterAccess)> $members
190190
*/
191191
private function newInstance(iterable $members): self
192192
{
@@ -202,7 +202,7 @@ public function push(StructuredField|Token|ByteSequence|DateTimeInterface|String
202202
return $this;
203203
}
204204

205-
return $this->newInstance([...$this->members, ...array_map(self::filterMember(...), array_values($members))]);
205+
return $this->newInstance([...$this->members, ...array_values($members)]);
206206
}
207207

208208
/**
@@ -220,7 +220,7 @@ public function insert(int $key, StructuredField|Token|ByteSequence|DateTimeInte
220220
count($this->members) === $offset => $this->push(...$members),
221221
[] === $members => $this,
222222
default => (function (array $newMembers) use ($offset, $members) {
223-
array_splice($newMembers, $offset, 0, array_map(self::filterMember(...), $members));
223+
array_splice($newMembers, $offset, 0, $members);
224224

225225
return $this->newInstance($newMembers);
226226
})($this->members),
@@ -234,7 +234,7 @@ public function replace(int $key, StructuredField|Token|ByteSequence|DateTimeInt
234234
}
235235

236236
$members = $this->members;
237-
$members[$offset] = self::filterMember($member);
237+
$members[$offset] = $member;
238238

239239
return $this->newInstance($members);
240240
}

src/Parameters.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public function pair(int $index): array
226226
public function add(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
227227
{
228228
$members = $this->members;
229-
$members[MapKey::fromString($key)->value] = self::filterMember($member);
229+
$members[$key] = $member;
230230

231231
return new self($members);
232232
}
@@ -249,16 +249,17 @@ public function append(string $key, StructuredField|Token|ByteSequence|DateTimeI
249249
{
250250
$members = $this->members;
251251
unset($members[$key]);
252+
$members[$key] = $member;
252253

253-
return new self([...$members, $key => self::filterMember($member)]);
254+
return new self($members);
254255
}
255256

256257
public function prepend(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
257258
{
258259
$members = $this->members;
259260
unset($members[$key]);
260261

261-
return new self([$key => self::filterMember($member), ...$members]);
262+
return new self([$key => $member, ...$members]);
262263
}
263264

264265
/**

0 commit comments

Comments
 (0)