From c42f71687d6d54832e6b460771feb0e983feffb9 Mon Sep 17 00:00:00 2001 From: "Ivan R. Petrov" Date: Mon, 12 Aug 2024 16:19:01 +0300 Subject: [PATCH] Add resolveXsiType Add a xsi:type resolve method to the Element Context Enhancer in order to properly resolve types for XML generation --- src/Encoder/ElementEncoder.php | 2 +- src/Encoder/Feature/ElementContextEnhancer.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Encoder/ElementEncoder.php b/src/Encoder/ElementEncoder.php index c65dcd1..71a5199 100644 --- a/src/Encoder/ElementEncoder.php +++ b/src/Encoder/ElementEncoder.php @@ -38,7 +38,7 @@ public function iso(Context $context): Iso */ static fn (mixed $raw): string => (new XsdTypeXmlElementWriter())( $context, - (new ElementValueBuilder($context, $typeEncoder, $raw)) + (new ElementValueBuilder($typeEncoder instanceof Feature\ElementContextEnhancer ? ($context = $typeEncoder->resolveXsiType($context, $raw)) : $context, $typeEncoder, $raw)) ), /** * @psalm-param non-empty-string|Element $xml diff --git a/src/Encoder/Feature/ElementContextEnhancer.php b/src/Encoder/Feature/ElementContextEnhancer.php index 66ebbfc..b92fb84 100644 --- a/src/Encoder/Feature/ElementContextEnhancer.php +++ b/src/Encoder/Feature/ElementContextEnhancer.php @@ -16,4 +16,5 @@ interface ElementContextEnhancer { public function enhanceElementContext(Context $context): Context; + public function resolveXsiType(Context $context, mixed $value): Context; }