From c1c11909197dde027642cefe4733b1731c642659 Mon Sep 17 00:00:00 2001 From: chsavvaidis Date: Fri, 24 Jan 2025 12:42:30 +0200 Subject: [PATCH] fix: add specific serializers for draft13 and draft11 --- .../oid4vc/data/OpenIDProviderMetadata.kt | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/waltid-libraries/protocols/waltid-openid4vc/src/commonMain/kotlin/id/walt/oid4vc/data/OpenIDProviderMetadata.kt b/waltid-libraries/protocols/waltid-openid4vc/src/commonMain/kotlin/id/walt/oid4vc/data/OpenIDProviderMetadata.kt index 5e8330bf8..387538988 100644 --- a/waltid-libraries/protocols/waltid-openid4vc/src/commonMain/kotlin/id/walt/oid4vc/data/OpenIDProviderMetadata.kt +++ b/waltid-libraries/protocols/waltid-openid4vc/src/commonMain/kotlin/id/walt/oid4vc/data/OpenIDProviderMetadata.kt @@ -343,3 +343,52 @@ object OpenIDProviderMetadataSerializer : KSerializer { } } +object OpenIDProviderMetadataDraft13Serializer : KSerializer { + override val descriptor: SerialDescriptor = OpenIDProviderMetadata.Draft13.serializer().descriptor + + override fun serialize(encoder: Encoder, value: OpenIDProviderMetadata.Draft13) { + val jsonEncoder = encoder as? JsonEncoder + ?: throw SerializationException("This serializer can only be used with a JSON encoder") + + // Serialize Draft13 and delegate transformations + val jsonElement = Json.encodeToJsonElement(OpenIDProviderMetadata.Draft13.serializer(), value) + val transformedElement = OpenIDProviderMetadataJsonSerializer.transformSerialize(jsonElement) + jsonEncoder.encodeJsonElement(transformedElement) + } + + override fun deserialize(decoder: Decoder): OpenIDProviderMetadata.Draft13 { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("This serializer can only be used with a JSON decoder") + + // Deserialize Draft13 and delegate transformations + val rawJsonElement = jsonDecoder.decodeJsonElement() + val transformedElement = OpenIDProviderMetadataJsonSerializer.transformDeserialize(rawJsonElement) + + return Json.decodeFromJsonElement(OpenIDProviderMetadata.Draft13.serializer(), transformedElement) + } +} + +object OpenIDProviderMetadataDraft11Serializer : KSerializer { + override val descriptor: SerialDescriptor = OpenIDProviderMetadata.Draft11.serializer().descriptor + + override fun serialize(encoder: Encoder, value: OpenIDProviderMetadata.Draft11) { + val jsonEncoder = encoder as? JsonEncoder + ?: throw SerializationException("This serializer can only be used with a JSON encoder") + + // Serialize Draft13 and delegate transformations + val jsonElement = Json.encodeToJsonElement(OpenIDProviderMetadata.Draft11.serializer(), value) + val transformedElement = OpenIDProviderMetadataJsonSerializer.transformSerialize(jsonElement) + jsonEncoder.encodeJsonElement(transformedElement) + } + + override fun deserialize(decoder: Decoder): OpenIDProviderMetadata.Draft11 { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("This serializer can only be used with a JSON decoder") + + // Deserialize Draft13 and delegate transformations + val rawJsonElement = jsonDecoder.decodeJsonElement() + val transformedElement = OpenIDProviderMetadataJsonSerializer.transformDeserialize(rawJsonElement) + + return Json.decodeFromJsonElement(OpenIDProviderMetadata.Draft11.serializer(), transformedElement) + } +} \ No newline at end of file