private static IConsumer <OrderKey, OrderEventRecord> CreateConsumer( ISchemaRegistryClient registryClient) { var deserializerBuilder = new BinaryDeserializerBuilder( BinaryDeserializerBuilder.CreateDefaultCaseBuilders() .Prepend(builder => new OrderEventUnionDeserializerBuilderCase(builder))); return(new ConsumerBuilder <OrderKey, OrderEventRecord>( new ConsumerConfig { BootstrapServers = BootstrapServers, EnableAutoCommit = false, GroupId = $"union-type-example-{Guid.NewGuid()}", }) .SetAvroKeyDeserializer(registryClient) .SetValueDeserializer(new AsyncSchemaRegistryDeserializer <OrderEventRecord>( registryClient, deserializerBuilder).AsSyncOverAsync()) .Build()); }
public void SelectedTypes() { var schema = new RecordSchema(nameof(EventContainer)) { Fields = new[] { new RecordField( "event", new UnionSchema(new[] { new RecordSchema(nameof(OrderCreatedEvent)) { Fields = new[] { new RecordField("timestamp", new StringSchema()), new RecordField( "total", new BytesSchema() { LogicalType = new DecimalLogicalType(5, 2), }), }, }, new RecordSchema(nameof(OrderCancelledEvent)) { Fields = new[] { new RecordField("timestamp", new StringSchema()), }, }, })), }, }; var deserialize = new BinaryDeserializerBuilder(BinaryDeserializerBuilder .CreateDefaultCaseBuilders() .Prepend(builder => new OrderDeserializerBuilderCase(builder))) .BuildDelegate <EventContainer>(schema); var serialize = new BinarySerializerBuilder(BinarySerializerBuilder .CreateDefaultCaseBuilders() .Prepend(builder => new OrderSerializerBuilderCase(builder))) .BuildDelegate <EventContainer>(schema); var creation = new EventContainer { Event = new OrderCreatedEvent { Timestamp = DateTime.UtcNow, Total = 40M, }, }; var cancellation = new EventContainer { Event = new OrderCancelledEvent { Timestamp = DateTime.UtcNow, }, }; using (stream) { serialize(creation, new BinaryWriter(stream)); var reader = new BinaryReader(stream.ToArray()); var result = deserialize(ref reader); Assert.IsType <OrderCreatedEvent>(result.Event); stream.Position = 0; serialize(cancellation, new BinaryWriter(stream)); reader = new BinaryReader(stream.ToArray()); result = deserialize(ref reader); Assert.IsType <OrderCancelledEvent>(result.Event); } }