From 280ec994c16323f7f0dcce20a0b0982dcfa5ac87 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Mon, 8 Aug 2022 14:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=92=E5=BA=8Fmap?= =?UTF-8?q?=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lego/utils/codec/factory/factory_map.go | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/lego/utils/codec/factory/factory_map.go b/lego/utils/codec/factory/factory_map.go index fe70437bb..eac42c436 100644 --- a/lego/utils/codec/factory/factory_map.go +++ b/lego/utils/codec/factory/factory_map.go @@ -134,6 +134,47 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, w codecore.IWriter w.PutReader(subIter) } +func (this *sortKeysMapEncoder) EncodeToMapJson(ptr unsafe.Pointer, w codecore.IWriter) (ret map[string]string, err error) { + ret = make(map[string]string) + var ( + k, v string + ) + keystream := w.GetWriter() + elemstream := w.GetWriter() + defer func() { + w.PutWriter(keystream) + w.PutWriter(elemstream) + }() + iter := this.mapType.UnsafeIterate(ptr) + for i := 0; iter.HasNext(); i++ { + key, elem := iter.UnsafeNext() + if this.keyEncoder.GetType() != reflect.String { + this.keyEncoder.Encode(key, keystream) + if keystream.Error() != nil && keystream.Error() != io.EOF { + err = keystream.Error() + return + } + k = BytesToString(keystream.Buffer()) + } else { + k = *((*string)(key)) + } + if this.elemEncoder.GetType() != reflect.String { + this.elemEncoder.Encode(elem, elemstream) + if elemstream.Error() != nil && elemstream.Error() != io.EOF { + err = elemstream.Error() + return + } + v = BytesToString(elemstream.Buffer()) + } else { + v = *((*string)(elem)) + } + ret[k] = v + keystream.Reset() + elemstream.Reset() + } + return +} + func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool { iter := encoder.mapType.UnsafeIterate(ptr) return !iter.HasNext()