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