From 4adc44e7883bbe1547dbe0e20cf11463f05fd20e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 13 Oct 2017 20:38:50 +0000 Subject: [PATCH] Code Encode/Decode of StringSet so we can call it from Sets Code-gen process refuses to generate them before compiling the call, which fails because they don't exist yet. --- report/map_helpers.go | 3 +++ report/string_set.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/report/map_helpers.go b/report/map_helpers.go index 169f953f4..12a1cba96 100644 --- a/report/map_helpers.go +++ b/report/map_helpers.go @@ -87,6 +87,9 @@ const ( containerMapKey = 2 containerMapValue = 3 containerMapEnd = 4 + + containerArrayElem = 6 + containerArrayEnd = 7 // from https://github.com/ugorji/go/blob/master/codec/helper.go#L152 cUTF8 = 2 ) diff --git a/report/string_set.go b/report/string_set.go index 7580d140c..de9414ab5 100644 --- a/report/string_set.go +++ b/report/string_set.go @@ -2,6 +2,8 @@ package report import ( "sort" + + "github.com/ugorji/go/codec" ) // StringSet is a sorted set of unique strings. Clients must use the Add @@ -132,3 +134,41 @@ loop: result = append(result, other[j:]...) return result, false } + +func (v StringSet) CodecEncodeSelf(encoder *codec.Encoder) { + z, r := codec.GenHelperEncoder(encoder) + if v == nil { + r.EncodeNil() + return + } + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(containerArrayElem) + r.EncodeString(cUTF8, yyv1) + } + z.EncSendContainerState(containerArrayEnd) +} + +// CodecDecodeSelf implements codec.Selfer +func (v *StringSet) CodecDecodeSelf(decoder *codec.Decoder) { + z, r := codec.GenHelperDecoder(decoder) + yyh1, length := z.DecSliceHelperStart() + if length == 0 { + *v = []string{} + return + } else if length < 0 { + *v = make([]string, 0, 8) + } else { + *v = make([]string, 0, length) + } + for i := 0; length < 0 || i < length; i++ { + if length < 0 && r.CheckBreak() { + break + } + yyh1.ElemContainerState(i) + b := r.DecodeStringAsBytes() + s := string(b) + *v = append(*v, s) + } + yyh1.End() +}