From 6b5a421538be65f52b65f759e7cef27d749dd6fc Mon Sep 17 00:00:00 2001 From: Aleksandr Petrukhin Date: Wed, 3 Apr 2019 15:32:09 +0000 Subject: [PATCH] [encoder] implemented encoding.Marshaler for map keys --- gen/encoder.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gen/encoder.go b/gen/encoder.go index b2be743..037efce 100644 --- a/gen/encoder.go +++ b/gen/encoder.go @@ -223,7 +223,9 @@ func (g *Generator) genTypeEncoderNoCheck(t reflect.Type, in string, tags fieldT fmt.Fprintln(g.out, ws+" "+tmpVar+"First := true") fmt.Fprintln(g.out, ws+" for "+tmpVar+"Name, "+tmpVar+"Value := range "+in+" {") fmt.Fprintln(g.out, ws+" if "+tmpVar+"First { "+tmpVar+"First = false } else { out.RawByte(',') }") - if keyEnc != "" { + if key.Implements(reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()) { + fmt.Fprintln(g.out, ws+" "+fmt.Sprintf("out.RawText(("+tmpVar+"Name).MarshalText()"+")")) + } else if keyEnc != "" { fmt.Fprintln(g.out, ws+" "+fmt.Sprintf(keyEnc, tmpVar+"Name")) } else { if err := g.genTypeEncoder(key, tmpVar+"Name", tags, indent+2, false); err != nil {