Skip to content

Commit e917fb7

Browse files
committed
feat: PR mailru#372 (caseSensitive)
1 parent 8932774 commit e917fb7

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

gen/decoder.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ func (g *Generator) interfaceIsJsonUnmarshaller(t reflect.Type) bool {
354354
return t.Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem())
355355
}
356356

357-
func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField) error {
357+
func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField, caseSensitive bool) error {
358358
jsonName := g.fieldNamer.GetJSONFieldName(t, f)
359359
tags := parseFieldTags(f)
360360

@@ -365,7 +365,11 @@ func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField)
365365
return errors.New("Mutually exclusive tags are specified: 'intern' and 'nocopy'")
366366
}
367367

368-
fmt.Fprintf(g.out, " case %q:\n", jsonName)
368+
if caseSensitive {
369+
fmt.Fprintf(g.out, " case %q:\n", jsonName)
370+
} else {
371+
fmt.Fprintf(g.out, " case %q:\n", strings.ToLower(jsonName))
372+
}
369373
if err := g.genTypeDecoder(f.Type, "out."+f.Name, tags, 3); err != nil {
370374
return err
371375
}
@@ -540,12 +544,19 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
540544

541545
fmt.Fprintln(g.out, " switch key {")
542546
for _, f := range fs {
543-
if err := g.genStructFieldDecoder(t, f); err != nil {
547+
if err := g.genStructFieldDecoder(t, f, true); err != nil {
544548
return err
545549
}
546550
}
547551

548552
fmt.Fprintln(g.out, " default:")
553+
fmt.Fprintln(g.out, " switch strings.ToLower(key) {")
554+
for _, f := range fs {
555+
if err := g.genStructFieldDecoder(t, f, false); err != nil {
556+
return err
557+
}
558+
}
559+
fmt.Fprintln(g.out, " default:")
549560
if g.disallowUnknownFields {
550561
fmt.Fprintln(g.out, ` in.AddError(&jlexer.LexerError{
551562
Offset: in.GetPos(),
@@ -557,6 +568,7 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
557568
} else {
558569
fmt.Fprintln(g.out, " in.SkipRecursive()")
559570
}
571+
fmt.Fprintln(g.out, " }")
560572
fmt.Fprintln(g.out, " }")
561573
fmt.Fprintln(g.out, " in.WantComma()")
562574
fmt.Fprintln(g.out, " }")

gen/generator.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func NewGenerator(filename string) *Generator {
6666
pkgLexer: "jlexer",
6767
pkgEasyJSON: "easyjson",
6868
"encoding/json": "json",
69+
"strings": "strings",
6970
},
7071
fieldNamer: DefaultFieldNamer{},
7172
marshalers: make(map[reflect.Type]bool),

0 commit comments

Comments
 (0)