diff --git a/src/InnerList.php b/src/InnerList.php index 8c302d7..9bc55da 100644 --- a/src/InnerList.php +++ b/src/InnerList.php @@ -59,12 +59,18 @@ private function filterMember(mixed $member): Item { if ($member instanceof StructuredFieldProvider) { $member = $member->toStructuredField(); + if (!$member instanceof Item) { + throw new InvalidArgument('The '.StructuredFieldProvider::class.' must provide a '.Item::class.'; '.$member::class.' given.'); + } + + return $member; } - return match (true) { - $member instanceof Item => $member, - default => Item::new($member), - }; + if (!$member instanceof Item) { + return Item::new($member); + } + + return $member; } /** diff --git a/src/Item.php b/src/Item.php index 526e7c0..052dc68 100644 --- a/src/Item.php +++ b/src/Item.php @@ -340,14 +340,13 @@ public static function false(): self */ public function value(?callable $validate = null): Bytes|Token|DisplayString|DateTimeImmutable|string|int|float|bool { - $value = $this->value; if (null === $validate) { - return $value; + return $this->value; } - $exceptionMessage = $validate($value); + $exceptionMessage = $validate($this->value); if (true === $exceptionMessage) { - return $value; + return $this->value; } if (!is_string($exceptionMessage) || '' === trim($exceptionMessage)) { @@ -379,25 +378,21 @@ public function toHttpValue(?Ietf $rfc = Ietf::Rfc9651): string * * @see https://www.rfc-editor.org/rfc/rfc9651.html#section-4.1 */ - private function serialize(?Ietf $rfc = Ietf::Rfc9651): string + private function serialize(?Ietf $rfc = null): string { $rfc ??= Ietf::Rfc9651; - if (!$rfc->supports($this->type)) { - throw MissingFeature::dueToLackOfSupport($this->type(), $rfc); - } - - $value = $this->value; return match (true) { - $value instanceof DateTimeImmutable => '@'.$value->getTimestamp(), - $value instanceof Token => $value->toString(), - $value instanceof Bytes => ':'.$value->encoded().':', - $value instanceof DisplayString => '%"'.$value->encoded().'"', - is_int($value) => (string) $value, - is_float($value) => (string) json_encode(round($value, 3, PHP_ROUND_HALF_EVEN), JSON_PRESERVE_ZERO_FRACTION), - $value, - false === $value => '?'.($value ? '1' : '0'), - default => '"'.preg_replace('/(["\\\])/', '\\\$1', $value).'"', + !$rfc->supports($this->type) => throw MissingFeature::dueToLackOfSupport($this->type, $rfc), + $this->value instanceof DateTimeImmutable => '@'.$this->value->getTimestamp(), + $this->value instanceof Token => $this->value->toString(), + $this->value instanceof Bytes => ':'.$this->value->encoded().':', + $this->value instanceof DisplayString => '%"'.$this->value->encoded().'"', + is_int($this->value) => (string) $this->value, + is_float($this->value) => (string) json_encode(round($this->value, 3, PHP_ROUND_HALF_EVEN), JSON_PRESERVE_ZERO_FRACTION), + $this->value, + false === $this->value => '?'.($this->value ? '1' : '0'), + default => '"'.preg_replace('/(["\\\])/', '\\\$1', $this->value).'"', }; } diff --git a/src/Parameters.php b/src/Parameters.php index a10c2cf..f2918ab 100644 --- a/src/Parameters.php +++ b/src/Parameters.php @@ -57,13 +57,22 @@ private static function filterMember(mixed $member): Item { if ($member instanceof StructuredFieldProvider) { $member = $member->toStructuredField(); + if ($member instanceof Item) { + return self::filterMember($member); + } + + throw new InvalidArgument('The '.StructuredFieldProvider::class.' must provide a '.Item::class.'; '.$member::class.' given.'); } - return match (true) { - !$member instanceof Item => Item::new($member), - $member->parameters()->isEmpty() => $member, - default => throw new InvalidArgument('The "'.$member::class.'" instance is not a Bare Item.'), - }; + if (!$member instanceof Item) { + $member = Item::new($member); + } + + if ($member->parameters()->isNotEmpty()) { + throw new InvalidArgument('The "'.$member::class.'" instance is not a Bare Item.'); + } + + return $member; } /**