From fc7bf91c2d918cbee9a67dc7645c33bc6f2dd96c Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 25 Jun 2020 15:24:07 +0200 Subject: [PATCH] Fix avro serialization for union schemas. --- .../Actions/Kafka/KafkaProducer.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/extensions/Squidex.Extensions/Actions/Kafka/KafkaProducer.cs b/backend/extensions/Squidex.Extensions/Actions/Kafka/KafkaProducer.cs index 6085824ea..b347cbf09 100644 --- a/backend/extensions/Squidex.Extensions/Actions/Kafka/KafkaProducer.cs +++ b/backend/extensions/Squidex.Extensions/Actions/Kafka/KafkaProducer.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -186,11 +187,11 @@ namespace Squidex.Extensions.Actions.Kafka { case JsonString s: return s.Value; - case JsonNumber n when schema.Tag == Schema.Type.Long: + case JsonNumber n when IsTypeOrUnionWith(schema, Schema.Type.Long): return (long)n.Value; - case JsonNumber n when schema.Tag == Schema.Type.Float: + case JsonNumber n when IsTypeOrUnionWith(schema, Schema.Type.Float): return (float)n.Value; - case JsonNumber n when schema.Tag == Schema.Type.Int: + case JsonNumber n when IsTypeOrUnionWith(schema, Schema.Type.Int): return (int)n.Value; case JsonNumber n: return n.Value; @@ -230,5 +231,10 @@ namespace Squidex.Extensions.Actions.Kafka return null; } + + private static bool IsTypeOrUnionWith(Schema schema, Schema.Type expected) + { + return schema.Tag == expected || (schema is UnionSchema union && union.Schemas.Any(x => x.Tag == expected)); + } } }