From 8a6c39115eda144e29070d6967338bb8bed4830d Mon Sep 17 00:00:00 2001 From: A Gardner <3100188+actgardner@users.noreply.github.com> Date: Sun, 12 Sep 2021 16:03:38 -0400 Subject: [PATCH] Fix generic deserialization of enums --- v9/generic/enum.go | 6 ++++-- v9/generic/record_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/v9/generic/enum.go b/v9/generic/enum.go index c4c396a1..ef806b4a 100644 --- a/v9/generic/enum.go +++ b/v9/generic/enum.go @@ -21,10 +21,12 @@ func (r *enumDatum) Datum() interface{} { } func (r *enumDatum) SetBoolean(v bool) { panic("") } -func (r *enumDatum) SetInt(v int32) { panic("") } -func (r *enumDatum) SetLong(v int64) { +func (r *enumDatum) SetInt(v int32) { r.value = r.symbols[v] } +func (r *enumDatum) SetLong(v int64) { + panic("") +} func (r *enumDatum) SetFloat(v float32) { panic("") } func (r *enumDatum) SetDouble(v float64) { panic("") } func (r *enumDatum) SetBytes(v []byte) { panic("") } diff --git a/v9/generic/record_test.go b/v9/generic/record_test.go index af1a2295..53442468 100644 --- a/v9/generic/record_test.go +++ b/v9/generic/record_test.go @@ -99,6 +99,33 @@ func TestUnion(t *testing.T) { } func TestEnum(t *testing.T) { + s := []byte(` +{ + "type": "enum", + "name": "testenum", + "symbols": [ + "ONE", + "TWO", + "THREE" + ] +} +`) + codec, err := NewCodecFromSchema(s, s) + assert.NoError(t, err) + + for _, f := range []struct { + data []byte + expected interface{} + }{ + {data: []byte{2}, expected: "TWO"}, + {data: []byte{4}, expected: "THREE"}, + } { + r := bytes.NewBuffer(f.data) + datum, err := codec.Deserialize(r) + assert.NoError(t, err) + + assert.Equal(t, f.expected, datum) + } } func TestLinkedList(t *testing.T) {