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 }