From 99fc926c5bf90f2b70455ee627e304ad0691a6bf Mon Sep 17 00:00:00 2001 From: Stephen Buttolph Date: Wed, 11 Oct 2023 12:39:01 -0400 Subject: [PATCH] Fix json marshalling of Sets (#2161) --- utils/set/set.go | 6 +++--- utils/set/set_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/utils/set/set.go b/utils/set/set.go index 9a30754f2e9a..29eb8fe11bd4 100644 --- a/utils/set/set.go +++ b/utils/set/set.go @@ -168,13 +168,13 @@ func (s *Set[T]) UnmarshalJSON(b []byte) error { return nil } -func (s *Set[_]) MarshalJSON() ([]byte, error) { +func (s Set[_]) MarshalJSON() ([]byte, error) { var ( - eltBytes = make([][]byte, len(*s)) + eltBytes = make([][]byte, len(s)) i int err error ) - for elt := range *s { + for elt := range s { eltBytes[i], err = stdjson.Marshal(elt) if err != nil { return nil, err diff --git a/utils/set/set_test.go b/utils/set/set_test.go index d15d9ad45c5d..bcba36944adf 100644 --- a/utils/set/set_test.go +++ b/utils/set/set_test.go @@ -229,3 +229,29 @@ func TestSetUnmarshalJSON(t *testing.T) { require.Equal(set1, set2) } } + +func TestSetReflectJSONMarshal(t *testing.T) { + require := require.New(t) + set := Set[int]{} + { + asJSON, err := json.Marshal(set) + require.NoError(err) + require.Equal("[]", string(asJSON)) + } + id1JSON, err := json.Marshal(1) + require.NoError(err) + id2JSON, err := json.Marshal(2) + require.NoError(err) + set.Add(1) + { + asJSON, err := json.Marshal(set) + require.NoError(err) + require.Equal(fmt.Sprintf("[%s]", string(id1JSON)), string(asJSON)) + } + set.Add(2) + { + asJSON, err := json.Marshal(set) + require.NoError(err) + require.Equal(fmt.Sprintf("[%s,%s]", string(id1JSON), string(id2JSON)), string(asJSON)) + } +}