@@ -18,11 +18,13 @@ package avrov2
1818
1919import  (
2020	"errors" 
21- 	"github.com/confluentinc/confluent-kafka-go/v2/schemaregistry/rules/cel" 
2221	"reflect" 
2322	"testing" 
2423	"time" 
2524
25+ 	"github.com/confluentinc/confluent-kafka-go/v2/schemaregistry/rules/cel" 
26+ 	"github.com/hamba/avro/v2" 
27+ 
2628	_ "github.com/confluentinc/confluent-kafka-go/v2/schemaregistry/rules/cel" 
2729	"github.com/confluentinc/confluent-kafka-go/v2/schemaregistry/rules/encryption" 
2830	_ "github.com/confluentinc/confluent-kafka-go/v2/schemaregistry/rules/encryption/awskms" 
@@ -286,7 +288,62 @@ const (
286288      "confluent:tags": [ "PII" ] 
287289    } 
288290  ] 
289- }  
291+ } 
292+ ` 
293+ 	demoWithSchemaFuncSchema  =  ` 
294+ { 
295+   "name": "DemoWithSchemaFunc", 
296+   "type": "record", 
297+   "fields": [ 
298+     { 
299+       "name": "IntField", 
300+       "type": "int" 
301+     }, 
302+     { 
303+       "name": "BoolField", 
304+       "type": "boolean" 
305+     }, 
306+     { 
307+       "name": "ArrayField", 
308+       "type": { 
309+         "type": "array", 
310+         "items": "string" 
311+       } 
312+     }, 
313+     { 
314+       "name": "MapField", 
315+       "type": { 
316+         "type": "map", 
317+         "values": "string" 
318+       } 
319+     }, 
320+     { 
321+       "name": "StringField", 
322+       "type": ["null", "string"] 
323+     }, 
324+     { 
325+       "name": "EnumField", 
326+       "type": { 
327+         "name": "GreetingsEnum", 
328+         "type": "enum", 
329+         "symbols": ["hey", "bye"] 
330+       } 
331+     }, 
332+     { 
333+       "name": "RecordField", 
334+       "type": { 
335+         "name": "GreetingsObj", 
336+         "type": "record", 
337+         "fields": [ 
338+           { 
339+             "name": "Hey", 
340+             "type": "string" 
341+           } 
342+         ] 
343+       } 
344+     } 
345+   ] 
346+ } 
290347` 
291348)
292349
@@ -302,6 +359,8 @@ func testMessageFactory(subject string, name string) (interface{}, error) {
302359		return  & DemoSchemaSingleTag {}, nil 
303360	case  "DemoSchemaWithUnion" :
304361		return  & DemoSchemaWithUnion {}, nil 
362+ 	case  "DemoWithSchemaFunc" :
363+ 		return  & DemoWithSchemaFunc {}, nil 
305364	case  "ComplexSchema" :
306365		return  & ComplexSchema {}, nil 
307366	case  "SchemaEvolution" :
@@ -804,6 +863,46 @@ func TestAvroSchemaEvolution(t *testing.T) {
804863	serde .MaybeFail ("deserialization" , err , serde .Expect (msg , & obj2 ))
805864}
806865
866+ func  TestAvroSerdeWithEncodingSchemaFunc (t  * testing.T ) {
867+ 	serde .MaybeFail  =  serde .InitFailFunc (t )
868+ 	var  err  error 
869+ 	conf  :=  schemaregistry .NewConfig ("mock://" )
870+ 
871+ 	client , err  :=  schemaregistry .NewClient (conf )
872+ 	serde .MaybeFail ("Schema Registry configuration" , err )
873+ 
874+ 	ser , err  :=  NewSerializer (client , serde .ValueSerde , NewSerializerConfig ())
875+ 	serde .MaybeFail ("Serializer configuration" , err )
876+ 
877+ 	obj  :=  DemoWithSchemaFunc {
878+ 		IntField :    123 ,
879+ 		StringField : nil ,
880+ 		BoolField :   true ,
881+ 		ArrayField :  []string {"hello" , "world" },
882+ 		MapField : map [string ]string {
883+ 			"hello" : "world" ,
884+ 		},
885+ 		EnumField : "hey" ,
886+ 		RecordField : struct  {
887+ 			Hey  string  `json:"Hey"` 
888+ 		}{Hey : "bye" },
889+ 	}
890+ 	bytes , err  :=  ser .Serialize ("topic1" , & obj )
891+ 	serde .MaybeFail ("serialization" , err )
892+ 
893+ 	deser , err  :=  NewDeserializer (client , serde .ValueSerde , NewDeserializerConfig ())
894+ 	serde .MaybeFail ("Deserializer configuration" , err )
895+ 	deser .Client  =  ser .Client 
896+ 	deser .MessageFactory  =  testMessageFactory 
897+ 
898+ 	var  newobj  DemoWithSchemaFunc 
899+ 	err  =  deser .DeserializeInto ("topic1" , bytes , & newobj )
900+ 	serde .MaybeFail ("deserialization into" , err , serde .Expect (newobj , obj ))
901+ 
902+ 	msg , err  :=  deser .Deserialize ("topic1" , bytes )
903+ 	serde .MaybeFail ("deserialization" , err , serde .Expect (msg , & obj ))
904+ }
905+ 
807906func  TestAvroSerdeWithCELCondition (t  * testing.T ) {
808907	serde .MaybeFail  =  serde .InitFailFunc (t )
809908	var  err  error 
@@ -2688,3 +2787,19 @@ type SchemaEvolution1 struct {
26882787type  SchemaEvolution2  struct  {
26892788	NewOptionalField  string  `json:"NewOptionalField"` 
26902789}
2790+ 
2791+ type  DemoWithSchemaFunc  struct  {
2792+ 	IntField     int32              `json:"IntField"` 
2793+ 	BoolField    bool               `json:"BoolField"` 
2794+ 	StringField  * string            `json:"StringField"` 
2795+ 	ArrayField   []string           `json:"ArrayField"` 
2796+ 	MapField     map [string ]string  `json:"MapField"` 
2797+ 	EnumField    string             `json:"EnumField"` 
2798+ 	RecordField  struct  {
2799+ 		Hey  string  `json:"Hey"` 
2800+ 	} `json:"RecordField"` 
2801+ }
2802+ 
2803+ func  (d  * DemoWithSchemaFunc ) Schema () avro.Schema  {
2804+ 	return  avro .MustParse (demoWithSchemaFuncSchema )
2805+ }
0 commit comments