@@ -48,6 +48,46 @@ const (
4848 }
4949 ]
5050}
51+ `
52+ rootSchemaNested = `
53+ {
54+ "name": "NestedTestRecord",
55+ "type": "record",
56+ "fields": [
57+ {
58+ "name": "OtherField",
59+ "type":
60+ {
61+ "name": "DemoSchema",
62+ "type": "record",
63+ "fields": [
64+ {
65+ "name": "IntField",
66+ "type": "int"
67+ },
68+ {
69+ "name": "DoubleField",
70+ "type": "double"
71+ },
72+ {
73+ "name": "StringField",
74+ "type": "string",
75+ "confluent:tags": [ "PII" ]
76+ },
77+ {
78+ "name": "BoolField",
79+ "type": "boolean"
80+ },
81+ {
82+ "name": "BytesField",
83+ "type": "bytes",
84+ "confluent:tags": [ "PII" ]
85+ }
86+ ]
87+ }
88+ }
89+ ]
90+ }
5191`
5292 demoSchema = `
5393{
@@ -435,6 +475,53 @@ func TestAvroSerdeWithNested(t *testing.T) {
435475 serde .MaybeFail ("deserialization" , err , serde .Expect (msg , & obj ))
436476}
437477
478+ func TestAvroSerdeWithNestedMap (t * testing.T ) {
479+ serde .MaybeFail = serde .InitFailFunc (t )
480+ var err error
481+ conf := schemaregistry .NewConfig ("mock://" )
482+
483+ client , err := schemaregistry .NewClient (conf )
484+ serde .MaybeFail ("Schema Registry configuration" , err )
485+
486+ serConfig := NewSerializerConfig ()
487+ serConfig .AutoRegisterSchemas = false
488+ serConfig .UseLatestVersion = true
489+ ser , err := NewSerializer (client , serde .ValueSerde , serConfig )
490+ serde .MaybeFail ("Serializer configuration" , err )
491+
492+ info := schemaregistry.SchemaInfo {
493+ Schema : rootSchemaNested ,
494+ SchemaType : "AVRO" ,
495+ }
496+
497+ id , err := client .Register ("topic1-value" , info , false )
498+ serde .MaybeFail ("Schema registration" , err )
499+ if id <= 0 {
500+ t .Errorf ("Expected valid schema id, found %d" , id )
501+ }
502+
503+ nested := make (map [string ]interface {})
504+ nested ["IntField" ] = 123
505+ nested ["DoubleField" ] = 45.67
506+ nested ["StringField" ] = "hi"
507+ nested ["BoolField" ] = true
508+ nested ["BytesField" ] = []byte {1 , 2 }
509+ obj := make (map [string ]interface {})
510+ obj ["OtherField" ] = nested
511+
512+ bytes , err := ser .Serialize ("topic1" , & obj )
513+ serde .MaybeFail ("serialization" , err )
514+
515+ deser , err := NewDeserializer (client , serde .ValueSerde , NewDeserializerConfig ())
516+ serde .MaybeFail ("Deserializer configuration" , err )
517+ deser .Client = ser .Client
518+ deser .MessageFactory = testMessageFactory
519+
520+ var newobj map [string ]interface {}
521+ err = deser .DeserializeInto ("topic1" , bytes , & newobj )
522+ serde .MaybeFail ("deserialization into" , err , serde .Expect (newobj , obj ))
523+ }
524+
438525func TestAvroSerdeWithReferences (t * testing.T ) {
439526 serde .MaybeFail = serde .InitFailFunc (t )
440527 var err error
0 commit comments