Skip to content

Commit 593e6cf

Browse files
committed
adding support for MapKey object
1 parent f3876dd commit 593e6cf

File tree

5 files changed

+40
-32
lines changed

5 files changed

+40
-32
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ All Notable changes to `bakame/http-strucured-fields` will be documented in this
1111
- `Value` class to improve Item public API;
1212
- `Item` implements the `ValueAccess` interface;
1313
- `Item::fromValue` named constructor to instantiate a new `Item` from a `Value` object;
14+
- Adding support for `MapKey` object.
1415

1516
### Fixed
1617

src/InnerList.php

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private static function filterMember(mixed $member): object
5353
/**
5454
* Returns a new instance.
5555
*/
56-
public static function from(ValueAccess|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members): self
56+
public static function from(StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members): self
5757
{
5858
return new self(Parameters::create(), $members);
5959
}
@@ -75,7 +75,7 @@ public static function fromPairs(
7575
*/
7676
public static function fromAssociative(
7777
iterable $parameters,
78-
ValueAccess|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members
78+
StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool ...$members
7979
): self {
8080
return new self(Parameters::fromAssociative($parameters), $members);
8181
}
@@ -97,47 +97,50 @@ public function parameters(): Parameters
9797
return $this->parameters;
9898
}
9999

100-
public function parameter(string $key): mixed
100+
public function parameter(MapKey|string $key): mixed
101101
{
102+
$key = $key instanceof MapKey ? $key->value : $key;
102103
if ($this->parameters->has($key)) {
103104
return $this->parameters->get($key)->value();
104105
}
105106

106107
return null;
107108
}
108109

109-
public function addParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
110+
public function withParameters(Parameters $parameters): static
110111
{
111-
return $this->withParameters($this->parameters()->add($key, $member));
112+
if ($this->parameters->toHttpValue() === $parameters->toHttpValue()) {
113+
return $this;
114+
}
115+
116+
return new static($parameters, $this->members);
112117
}
113118

114-
public function prependParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
119+
public function addParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
115120
{
116-
return $this->withParameters($this->parameters()->prepend($key, $member));
121+
return $this->withParameters($this->parameters()->add($key instanceof MapKey ? $key->value : $key, $member));
117122
}
118123

119-
public function appendParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
124+
public function prependParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
120125
{
121-
return $this->withParameters($this->parameters()->append($key, $member));
126+
return $this->withParameters($this->parameters()->prepend($key instanceof MapKey ? $key->value : $key, $member));
122127
}
123128

124-
public function withoutParameter(string ...$keys): static
129+
public function appendParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
125130
{
126-
return $this->withParameters($this->parameters()->remove(...$keys));
131+
return $this->withParameters($this->parameters()->append($key instanceof MapKey ? $key->value : $key, $member));
127132
}
128133

129-
public function withoutAnyParameter(): static
134+
public function withoutParameter(MapKey|string ...$keys): static
130135
{
131-
return $this->withParameters(Parameters::create());
136+
return $this->withParameters($this->parameters()->remove(
137+
...array_map(fn (MapKey|string $key): string => $key instanceof MapKey ? $key->value : $key, $keys)
138+
));
132139
}
133140

134-
public function withParameters(Parameters $parameters): static
141+
public function withoutAnyParameter(): static
135142
{
136-
if ($this->parameters->toHttpValue() === $parameters->toHttpValue()) {
137-
return $this;
138-
}
139-
140-
return new static($parameters, $this->members);
143+
return $this->withParameters(Parameters::create());
141144
}
142145

143146
public function toHttpValue(): string

src/Item.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,24 +200,26 @@ public function withParameters(Parameters $parameters): static
200200
return $this->parameters->toHttpValue() === $parameters->toHttpValue() ? $this : new static($this->value, $parameters);
201201
}
202202

203-
public function addParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
203+
public function addParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
204204
{
205-
return $this->withParameters($this->parameters()->add($key, $member));
205+
return $this->withParameters($this->parameters()->add($key instanceof MapKey ? $key->value : $key, $member));
206206
}
207207

208-
public function prependParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
208+
public function prependParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
209209
{
210-
return $this->withParameters($this->parameters()->prepend($key, $member));
210+
return $this->withParameters($this->parameters()->prepend($key instanceof MapKey ? $key->value : $key, $member));
211211
}
212212

213-
public function withoutParameter(string ...$keys): static
213+
public function appendParameter(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
214214
{
215-
return $this->withParameters($this->parameters()->remove(...$keys));
215+
return $this->withParameters($this->parameters()->append($key instanceof MapKey ? $key->value : $key, $member));
216216
}
217217

218-
public function appendParameter(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
218+
public function withoutParameter(MapKey|string ...$keys): static
219219
{
220-
return $this->withParameters($this->parameters()->append($key, $member));
220+
return $this->withParameters($this->parameters()->remove(
221+
...array_map(fn (MapKey|string $key): string => $key instanceof MapKey ? $key->value : $key, $keys)
222+
));
221223
}
222224

223225
public function withoutAnyParameter(): static

src/ParameterAccess.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Bakame\Http\StructuredFields;
66

77
/**
8-
* @phpstan-import-type SfTypeInput from ValueAccess
8+
* @phpstan-import-type SfTypeInput from StructuredField
99
*/
1010
interface ParameterAccess
1111
{

src/Parameters.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,10 @@ public function pair(int $index): array
241241
return [...$this->toPairs()][$this->filterIndex($index)];
242242
}
243243

244-
public function add(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
244+
public function add(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
245245
{
246246
$members = $this->members;
247-
$members[$key] = $member;
247+
$members[$key instanceof MapKey ? $key->value : $key] = $member;
248248

249249
return new self($members);
250250
}
@@ -266,8 +266,9 @@ public function remove(MapKey|string|int ...$keys): static
266266
/**
267267
* @param SfItemInput $member
268268
*/
269-
public function append(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
269+
public function append(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
270270
{
271+
$key = $key instanceof MapKey ? $key->value : $key;
271272
$members = $this->members;
272273
unset($members[$key]);
273274
$members[$key] = $member;
@@ -282,8 +283,9 @@ public function append(string $key, StructuredField|Token|ByteSequence|DateTimeI
282283
/**
283284
* @param SfItemInput $member
284285
*/
285-
public function prepend(string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
286+
public function prepend(MapKey|string $key, StructuredField|Token|ByteSequence|DateTimeInterface|Stringable|string|int|float|bool $member): static
286287
{
288+
$key = $key instanceof MapKey ? $key->value : $key;
287289
$members = $this->members;
288290
unset($members[$key]);
289291

0 commit comments

Comments
 (0)