This is an automated email from the ASF dual-hosted git repository.

zixuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git


The following commit(s) were added to refs/heads/master by this push:
     new 63ae1542 [refactor][schema] replace linkedin/goavro/v2 with 
hamba/avro/v2 (#1230)
63ae1542 is described below

commit 63ae1542b9e444c3acad11a8a867d3ad798188a6
Author: adrianiacobghiula <2491756+adrianiacobghi...@users.noreply.github.com>
AuthorDate: Wed Jul 3 12:49:46 2024 +0200

    [refactor][schema] replace linkedin/goavro/v2 with hamba/avro/v2 (#1230)
    
    * replace linkedin/goavro/v2 with hamba/avro/v2
    
    * remove deprecated AvroCodec & NewSchemaDefinition
---
 .github/workflows/ci.yml |  2 +-
 Makefile                 |  2 +-
 README.md                |  4 +--
 go.mod                   | 15 ++++++-----
 go.sum                   | 30 ++++++++++++----------
 pulsar/schema.go         | 67 +++++++++++++++++-------------------------------
 6 files changed, 54 insertions(+), 66 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7b770051..3a6731f9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -38,7 +38,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        go-version: ['1.18', '1.19', '1.20', '1.21.0']
+        go-version: ['1.20', '1.21.0', '1.22.0']
     steps:
       - uses: actions/checkout@v3
       - name: clean docker cache
diff --git a/Makefile b/Makefile
index ce41b206..fee46f69 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@
 IMAGE_NAME = pulsar-client-go-test:latest
 PULSAR_VERSION ?= 3.2.2
 PULSAR_IMAGE = apachepulsar/pulsar:$(PULSAR_VERSION)
-GO_VERSION ?= 1.18
+GO_VERSION ?= 1.20
 CONTAINER_ARCH ?= $(shell uname -m | sed s/x86_64/amd64/)
 
 # Golang standard bin directory.
diff --git a/README.md b/README.md
index dee379cf..c77cdea7 100644
--- a/README.md
+++ b/README.md
@@ -38,7 +38,7 @@ CGo-based library.
 
 ## Requirements
 
-- Go 1.18+
+- Go 1.20+
 
 > **Note**:
 >
@@ -152,7 +152,7 @@ Run the tests:
 
 Run the tests with specific versions of GOLANG and PULSAR:
 
-    make test GOLANG_VERSION=1.18 PULSAR_VERSION=2.10.0
+    make test GOLANG_VERSION=1.20 PULSAR_VERSION=2.10.0
 
 ## Contributing
 
diff --git a/go.mod b/go.mod
index b0f822f3..bbbf9bd6 100644
--- a/go.mod
+++ b/go.mod
@@ -10,8 +10,7 @@ require (
        github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b
        github.com/davecgh/go-spew v1.1.1
        github.com/google/uuid v1.1.2
-       github.com/klauspost/compress v1.14.4
-       github.com/linkedin/goavro/v2 v2.9.8
+       github.com/klauspost/compress v1.17.9
        github.com/onsi/ginkgo v1.16.5
        github.com/onsi/gomega v1.19.0
        github.com/opentracing/opentracing-go v1.2.0
@@ -21,9 +20,9 @@ require (
        github.com/sirupsen/logrus v1.6.0
        github.com/spaolacci/murmur3 v1.1.0
        github.com/spf13/cobra v1.6.1
-       github.com/stretchr/testify v1.8.0
+       github.com/stretchr/testify v1.9.0
        go.uber.org/atomic v1.7.0
-       golang.org/x/mod v0.8.0
+       golang.org/x/mod v0.18.0
        golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602
        golang.org/x/time v0.0.0-20191024005414-555d28b269f0
        google.golang.org/protobuf v1.33.0
@@ -32,6 +31,7 @@ require (
 require (
        github.com/golang-jwt/jwt/v5 v5.2.1
        github.com/golang/protobuf v1.5.2
+       github.com/hamba/avro/v2 v2.22.2-0.20240625062549-66aad10411d9
        github.com/hashicorp/go-multierror v1.1.1
 )
 
@@ -44,12 +44,15 @@ require (
        github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
        github.com/fsnotify/fsnotify v1.4.9 // indirect
        github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
-       github.com/golang/snappy v0.0.1 // indirect
        github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // 
indirect
        github.com/hashicorp/errwrap v1.0.0 // indirect
        github.com/inconshreveable/mousetrap v1.0.1 // indirect
+       github.com/json-iterator/go v1.1.12 // indirect
        github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect
        github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+       github.com/mitchellh/mapstructure v1.5.0 // indirect
+       github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
+       github.com/modern-go/reflect2 v1.0.2 // indirect
        github.com/mtibben/percent v0.2.1 // indirect
        github.com/nxadm/tail v1.4.8 // indirect
        github.com/pmezard/go-difflib v1.0.0 // indirect
@@ -57,7 +60,7 @@ require (
        github.com/prometheus/common v0.26.0 // indirect
        github.com/prometheus/procfs v0.6.0 // indirect
        github.com/spf13/pflag v1.0.5 // indirect
-       github.com/stretchr/objx v0.4.0 // indirect
+       github.com/stretchr/objx v0.5.2 // indirect
        golang.org/x/net v0.23.0 // indirect
        golang.org/x/sys v0.18.0 // indirect
        golang.org/x/term v0.18.0 // indirect
diff --git a/go.sum b/go.sum
index 64f5faab..818627b1 100644
--- a/go.sum
+++ b/go.sum
@@ -129,8 +129,6 @@ github.com/golang/protobuf v1.4.3/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
 github.com/golang/protobuf v1.5.0/go.mod 
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2 
h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
 github.com/golang/protobuf v1.5.2/go.mod 
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
-github.com/golang/snappy v0.0.1/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod 
h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod 
h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod 
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -161,6 +159,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod 
h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
 github.com/gorilla/mux v1.7.4/go.mod 
h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c 
h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
 github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod 
h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
+github.com/hamba/avro/v2 v2.22.2-0.20240625062549-66aad10411d9 
h1:NEoabXt33PDWK4fXryK4e+XX+fSKDmmu9vg3yb9YI2M=
+github.com/hamba/avro/v2 v2.22.2-0.20240625062549-66aad10411d9/go.mod 
h1:fQVdB2mFZBhPW1D5Abej41LMvrErARGrrdjOnKbm5yw=
 github.com/hashicorp/errwrap v1.0.0 
h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
 github.com/hashicorp/errwrap v1.0.0/go.mod 
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-multierror v1.1.1 
h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
@@ -178,13 +178,15 @@ github.com/jpillora/backoff v1.0.0/go.mod 
h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX
 github.com/json-iterator/go v1.1.6/go.mod 
h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod 
h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.11/go.mod 
h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.12 
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod 
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod 
h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/jstemmer/go-junit-report v0.9.1/go.mod 
h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 github.com/julienschmidt/httprouter v1.2.0/go.mod 
h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod 
h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.14.4 
h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4=
-github.com/klauspost/compress v1.14.4/go.mod 
h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.17.9 
h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
+github.com/klauspost/compress v1.17.9/go.mod 
h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod 
h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3 
h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod 
h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -194,14 +196,17 @@ github.com/kr/pretty v0.2.0/go.mod 
h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/linkedin/goavro/v2 v2.9.8 
h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg=
-github.com/linkedin/goavro/v2 v2.9.8/go.mod 
h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 
h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mitchellh/mapstructure v1.5.0 
h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod 
h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd 
h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod 
h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1/go.mod 
h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2 
h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mtibben/percent v0.2.1 
h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
 github.com/mtibben/percent v0.2.1/go.mod 
h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod 
h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@@ -264,16 +269,15 @@ github.com/spf13/pflag v1.0.5/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod 
h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
-github.com/stretchr/objx v0.4.0/go.mod 
h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod 
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
 github.com/stretchr/testify v1.2.2/go.mod 
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod 
h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.5.1/go.mod 
h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.7.0/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0 
h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
-github.com/stretchr/testify v1.8.0/go.mod 
h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.9.0 
h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod 
h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/yuin/goldmark v1.1.25/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.32/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -322,8 +326,8 @@ golang.org/x/mod 
v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod 
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
+golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
diff --git a/pulsar/schema.go b/pulsar/schema.go
index ac2192db..71136504 100644
--- a/pulsar/schema.go
+++ b/pulsar/schema.go
@@ -28,7 +28,7 @@ import (
 
        log "github.com/sirupsen/logrus"
 
-       "github.com/linkedin/goavro/v2"
+       "github.com/hamba/avro/v2"
        "google.golang.org/protobuf/proto"
        "google.golang.org/protobuf/reflect/protodesc"
        "google.golang.org/protobuf/reflect/protoreflect"
@@ -124,21 +124,10 @@ func NewSchema(schemaType SchemaType, schemaData []byte, 
properties map[string]s
        return
 }
 
-type AvroCodec struct {
-       Codec *goavro.Codec
-}
-
-func NewSchemaDefinition(schema *goavro.Codec) *AvroCodec {
-       schemaDef := &AvroCodec{
-               Codec: schema,
-       }
-       return schemaDef
-}
-
 // initAvroCodec returns a Codec used to translate between a byte slice of 
either
 // binary or textual Avro data and native Go data.
-func initAvroCodec(codec string) (*goavro.Codec, error) {
-       return goavro.NewCodec(codec)
+func initAvroCodec(schemaDef string) (avro.Schema, error) {
+       return avro.Parse(schemaDef)
 }
 
 type JSONSchema struct {
@@ -162,8 +151,11 @@ func NewJSONSchemaWithValidation(jsonAvroSchemaDef string, 
properties map[string
        if err != nil {
                return nil, err
        }
-       schemaDef := NewSchemaDefinition(avroCodec)
-       js.SchemaInfo.Schema = schemaDef.Codec.Schema()
+       resolvedSchema, err := json.Marshal(avroCodec)
+       if err != nil {
+               return nil, err
+       }
+       js.SchemaInfo.Schema = string(resolvedSchema)
        js.SchemaInfo.Type = JSON
        js.SchemaInfo.Properties = properties
        js.SchemaInfo.Name = "JSON"
@@ -187,7 +179,6 @@ func (js *JSONSchema) GetSchemaInfo() *SchemaInfo {
 }
 
 type ProtoSchema struct {
-       AvroCodec
        SchemaInfo
 }
 
@@ -210,9 +201,11 @@ func NewProtoSchemaWithValidation(protoAvroSchemaDef 
string, properties map[stri
        if err != nil {
                return nil, err
        }
-       schemaDef := NewSchemaDefinition(avroCodec)
-       ps.AvroCodec.Codec = schemaDef.Codec
-       ps.SchemaInfo.Schema = schemaDef.Codec.Schema()
+       resolvedSchema, err := json.Marshal(avroCodec)
+       if err != nil {
+               return nil, err
+       }
+       ps.SchemaInfo.Schema = string(resolvedSchema)
        ps.SchemaInfo.Type = PROTOBUF
        ps.SchemaInfo.Properties = properties
        ps.SchemaInfo.Name = "Proto"
@@ -314,7 +307,7 @@ func (ps *ProtoNativeSchema) GetSchemaInfo() *SchemaInfo {
 }
 
 type AvroSchema struct {
-       AvroCodec
+       Codec avro.Schema
        SchemaInfo
 }
 
@@ -335,9 +328,12 @@ func NewAvroSchemaWithValidation(avroSchemaDef string, 
properties map[string]str
        if err != nil {
                return nil, err
        }
-       schemaDef := NewSchemaDefinition(avroCodec)
-       as.AvroCodec.Codec = schemaDef.Codec
-       as.SchemaInfo.Schema = schemaDef.Codec.Schema()
+       as.Codec = avroCodec
+       resolvedSchema, err := json.Marshal(avroCodec)
+       if err != nil {
+               return nil, err
+       }
+       as.SchemaInfo.Schema = string(resolvedSchema)
        as.SchemaInfo.Type = AVRO
        as.SchemaInfo.Name = "Avro"
        as.SchemaInfo.Properties = properties
@@ -345,35 +341,20 @@ func NewAvroSchemaWithValidation(avroSchemaDef string, 
properties map[string]str
 }
 
 func (as *AvroSchema) Encode(data interface{}) ([]byte, error) {
-       textual, err := json.Marshal(data)
-       if err != nil {
-               log.Errorf("serialize data error:%s", err.Error())
-               return nil, err
-       }
-       native, _, err := as.Codec.NativeFromTextual(textual)
+       bin, err := avro.Marshal(as.Codec, data)
        if err != nil {
-               log.Errorf("convert native Go form to binary Avro data 
error:%s", err.Error())
+               log.Errorf("convert Go form to binary Avro data error:%s", 
err.Error())
                return nil, err
        }
-       return as.Codec.BinaryFromNative(nil, native)
+       return bin, nil
 }
 
 func (as *AvroSchema) Decode(data []byte, v interface{}) error {
-       native, _, err := as.Codec.NativeFromBinary(data)
+       err := avro.Unmarshal(as.Codec, data, v)
        if err != nil {
                log.Errorf("convert binary Avro data back to native Go form 
error:%s", err.Error())
                return err
        }
-       textual, err := as.Codec.TextualFromNative(nil, native)
-       if err != nil {
-               log.Errorf("convert native Go form to textual Avro data 
error:%s", err.Error())
-               return err
-       }
-       err = json.Unmarshal(textual, v)
-       if err != nil {
-               log.Errorf("unSerialize textual error:%s", err.Error())
-               return err
-       }
        return nil
 }
 

Reply via email to