apache / apache/pulsar-client-go

[BUG] upgrade linkedin/goavro to v2.11.1

Open
#786 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
745
Forks
389
Avg merge
3d 20h
Merged PRs (30d)
3

Description

image

Example code:
```go
package main

import (
"github.com/apache/pulsar-client-go/pulsar"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
)

type UserPulsarMessage struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Gender *string `json:"gender"`
}

var schema = `{
"name": "UserPulsarMessage",
"type": "record",
"fields": [
{
"name": "firstName",
"type": "string"
},
{
"name": "gender",
"type": ["null", "string"]
},
{
"name": "lastName",
"type": "string"
}
]
}`

func main() {
log.Debug().Msg("Start")
male := "male"
err := checkAvro("Dmytrii", "Havryliuk", &male)
if err != nil {
log.Error().Err(errors.WithStack(err)).Msgf(err.Error())
}

log.Debug().Msg("New case")
err = checkAvro("", "Portland", nil)
if err != nil {
log.Error().Err(errors.WithStack(err)).Msgf(err.Error())
}

log.Debug().Msg("Done")
}

func checkAvro(fName, lName string, gender *string) error {
avroSchema := pulsar.NewAvroSchema(schema, nil)
msg := &UserPulsarMessage{
FirstName: fName,
LastName: lName,
Gender: gender,
}

payload, err := avroSchema.Encode(msg)
if err != nil {
return err
}

log.Debug().Msgf("encoded payload: '%s'", string(payload))

var msgResult *UserPulsarMessage
err = avroSchema.Decode(payload, &msgResult)
if err != nil {
return err
}

log.Debug().Msgf("FirstName: '%s', LastName: '%s', Gender: '%s' Successful",
msgResult.FirstName, msgResult.LastName, msgResult.Gender)
return nil
}
```

Output:
```json
{"level":"debug","time":"2022-06-07T19:49:37+03:00","message":"Start"}
ERRO[0000] convert native Go form to binary Avro data error:cannot decode textual record "UserPulsarMessage": cannot decode textual union: expected: '{'; actual: '"' for key: "gender"
{"level":"error","error":"cannot decode textual record \"UserPulsarMessage\": cannot decode textual union: expected: '{'; actual: '\"' for key: \"gender\"","time":"2022-06-07T19:49:37+03:00","message":"cannot decode textual record \"UserPulsarMessage\": cannot decode textual union: expected: '{'; actual: '\"' for key: \"gender\""}
{"level":"debug","time":"2022-06-07T19:49:37+03:00","message":"New case"}
{"level":"debug","time":"2022-06-07T19:49:37+03:00","message":"encoded payload: '\u0000\u0000\u0010Portland'"}
{"level":"debug","time":"2022-06-07T19:49:37+03:00","message":"FirstName: '', LastName: 'Portland', Gender: '%!s(*string=)' Successful"}
{"level":"debug","time":"2022-06-07T19:49:37+03:00","message":"Done"}
Exiting.
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.