@@ -64,6 +64,25 @@ const (
64
64
}
65
65
}
66
66
}
67
+ `
68
+ demoSchemaWithNullable = `
69
+ {
70
+ "type": "object",
71
+ "properties": {
72
+ "IntField": { "type": "integer" },
73
+ "DoubleField": { "type": "number" },
74
+ "StringField": {
75
+ "type": ["string", "null"],
76
+ "confluent:tags": [ "PII" ]
77
+ },
78
+ "BoolField": { "type": "boolean" },
79
+ "BytesField": {
80
+ "type": "string",
81
+ "contentEncoding": "base64",
82
+ "confluent:tags": [ "PII" ]
83
+ }
84
+ }
85
+ }
67
86
`
68
87
demoSchemaWithUnion = `
69
88
{
@@ -672,6 +691,71 @@ func TestJSONSchemaSerdeWithCELFieldTransform(t *testing.T) {
672
691
serde .MaybeFail ("deserialization" , err , serde .Expect (& newobj , & obj2 ))
673
692
}
674
693
694
+ func TestJSONSchemaSerdeWithCELFieldTransformWithNullable (t * testing.T ) {
695
+ serde .MaybeFail = serde .InitFailFunc (t )
696
+ var err error
697
+
698
+ conf := schemaregistry .NewConfig ("mock://" )
699
+
700
+ client , err := schemaregistry .NewClient (conf )
701
+ serde .MaybeFail ("Schema Registry configuration" , err )
702
+
703
+ serConfig := NewSerializerConfig ()
704
+ serConfig .AutoRegisterSchemas = false
705
+ serConfig .UseLatestVersion = true
706
+ ser , err := NewSerializer (client , serde .ValueSerde , serConfig )
707
+ serde .MaybeFail ("Serializer configuration" , err )
708
+
709
+ encRule := schemaregistry.Rule {
710
+ Name : "test-cel" ,
711
+ Kind : "TRANSFORM" ,
712
+ Mode : "WRITE" ,
713
+ Type : "CEL_FIELD" ,
714
+ Expr : "name == 'StringField' ; value + '-suffix'" ,
715
+ }
716
+ ruleSet := schemaregistry.RuleSet {
717
+ DomainRules : []schemaregistry.Rule {encRule },
718
+ }
719
+
720
+ info := schemaregistry.SchemaInfo {
721
+ Schema : demoSchemaWithNullable ,
722
+ SchemaType : "JSON" ,
723
+ RuleSet : & ruleSet ,
724
+ }
725
+
726
+ id , err := client .Register ("topic1-value" , info , false )
727
+ serde .MaybeFail ("Schema registration" , err )
728
+ if id <= 0 {
729
+ t .Errorf ("Expected valid schema id, found %d" , id )
730
+ }
731
+
732
+ obj := JSONDemoSchema {}
733
+ obj .IntField = 123
734
+ obj .DoubleField = 45.67
735
+ obj .StringField = "hi"
736
+ obj .BoolField = true
737
+ obj .BytesField = base64 .StdEncoding .EncodeToString ([]byte {1 , 2 })
738
+
739
+ bytes , err := ser .Serialize ("topic1" , & obj )
740
+ serde .MaybeFail ("serialization" , err )
741
+
742
+ deserConfig := NewDeserializerConfig ()
743
+ deser , err := NewDeserializer (client , serde .ValueSerde , deserConfig )
744
+ serde .MaybeFail ("Deserializer configuration" , err )
745
+ deser .Client = ser .Client
746
+
747
+ obj2 := JSONDemoSchema {}
748
+ obj2 .IntField = 123
749
+ obj2 .DoubleField = 45.67
750
+ obj2 .StringField = "hi-suffix"
751
+ obj2 .BoolField = true
752
+ obj2 .BytesField = base64 .StdEncoding .EncodeToString ([]byte {1 , 2 })
753
+
754
+ var newobj JSONDemoSchema
755
+ err = deser .DeserializeInto ("topic1" , bytes , & newobj )
756
+ serde .MaybeFail ("deserialization" , err , serde .Expect (& newobj , & obj2 ))
757
+ }
758
+
675
759
func TestJSONSchemaSerdeWithCELFieldTransformWithDef (t * testing.T ) {
676
760
serde .MaybeFail = serde .InitFailFunc (t )
677
761
var err error
0 commit comments