Skip to content

Commit 88f73b5

Browse files
committed
Improve Container constraints
1 parent c207d51 commit 88f73b5

File tree

7 files changed

+16
-9
lines changed

7 files changed

+16
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ All Notable changes to `bakame/http-strucured-fields` will be documented in this
2323
- `Value` internal class to improve Item public API;
2424
- **[BC Break]** `::fromAssociative` and `::fromPair` the `$parameters` argument is now required;
2525
- **[BC Break]** `MemberOrderedMap` instances can no longer be added to `Dictionary` or `OuterList` instances.
26+
- RFC restriction on eligible container members.
27+
- Exception normalization.
2628

2729
### Deprecated
2830

src/Dictionary.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ private static function filterMember(mixed $member): object
5353
{
5454
return match (true) {
5555
$member instanceof ParameterAccess && ($member instanceof MemberList || $member instanceof ValueAccess) => $member,
56-
$member instanceof MemberOrderedMap => throw new InvalidArgument('Only structured fields as list are supported.'),
56+
!$member instanceof ParameterAccess && ($member instanceof MemberList || $member instanceof ValueAccess),
57+
$member instanceof MemberOrderedMap => throw new InvalidArgument('An instance of "'.$member::class.'" can not be a member of "'.self::class.'".'),
5758
is_iterable($member) => InnerList::new(...$member),
5859
default => Item::new($member),
5960
};

src/InnerList.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ private static function filterMember(mixed $member): object
4646
{
4747
return match (true) {
4848
$member instanceof ValueAccess && $member instanceof ParameterAccess => $member,
49-
!$member instanceof StructuredField => Item::new($member),
50-
default => throw new InvalidArgument('Expecting a "'.ValueAccess::class.'" instance; received a "'.$member::class.'" instead.'),
49+
$member instanceof StructuredField => throw new InvalidArgument('An instance of "'.$member::class.'" can not be a member of "'.self::class.'".'),
50+
default => Item::new($member),
5151
};
5252
}
5353

src/OuterList.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ private static function filterMember(mixed $member): object
4747
{
4848
return match (true) {
4949
$member instanceof ParameterAccess && ($member instanceof MemberList || $member instanceof ValueAccess) => $member,
50-
$member instanceof MemberOrderedMap => throw new InvalidArgument('Only structured fields as list are supported.'),
50+
!$member instanceof ParameterAccess && ($member instanceof MemberList || $member instanceof ValueAccess),
51+
$member instanceof MemberOrderedMap => throw new InvalidArgument('An instance of "'.$member::class.'" can not be a member of "'.self::class.'".'),
5152
is_iterable($member) => InnerList::new(...$member),
5253
default => Item::new($member),
5354
};

src/Parameters.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,13 @@ private function __construct(iterable $members = [])
5050
*/
5151
private static function filterMember(mixed $member): object
5252
{
53+
$isItem = $member instanceof ValueAccess && $member instanceof ParameterAccess;
54+
5355
return match (true) {
54-
$member instanceof ValueAccess && $member instanceof ParameterAccess && $member->parameters()->hasNoMembers() => $member,
55-
!$member instanceof StructuredField => Item::new($member),
56-
default => throw new InvalidArgument('Parameters instances can only contain bare items.'),
56+
$isItem && $member->parameters()->hasNoMembers() => $member,
57+
$isItem && $member->parameters()->hasMembers() => throw new InvalidArgument('The instance of "'.$member::class.'" is not a Bare Item instance.'),
58+
$member instanceof StructuredField => throw new InvalidArgument('An instance of "'.$member::class.'" can not be a member of "'.self::class.'".'),
59+
default => Item::new($member),
5760
};
5861
}
5962

src/TypeTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ final class TypeTest extends TestCase
1515
#[Test]
1616
public function it_will_throw_if_the_type_is_no_supported(): void
1717
{
18-
$this->expectException(SyntaxError::class);
18+
$this->expectException(InvalidArgument::class);
1919

2020
Type::fromValue([]);
2121
}

src/Value.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function __construct(mixed $value)
3131
is_float($value) => [self::filterDecimal($value), Type::Decimal],
3232
is_bool($value) => [$value, Type::Boolean],
3333
is_string($value) => [self::filterString($value), Type::String],
34-
default => throw new SyntaxError('The type "'.(is_object($value) ? $value::class : gettype($value)).'" is not supported.')
34+
default => throw new InvalidArgument('The type "'.(is_object($value) ? $value::class : gettype($value)).'" is not supported.')
3535
};
3636
}
3737

0 commit comments

Comments
 (0)