mirror of
https://github.com/netbirdio/easyjson.git
synced 2026-05-22 18:44:42 -07:00
Allow marshalling "named" maps.
This commit is contained in:
+9
-5
@@ -322,7 +322,7 @@ func getStructFields(t reflect.Type) ([]reflect.StructField, error) {
|
||||
|
||||
func (g *Generator) genDecoder(t reflect.Type) error {
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array:
|
||||
case reflect.Slice, reflect.Array, reflect.Map:
|
||||
return g.genSliceArrayDecoder(t)
|
||||
default:
|
||||
return g.genStructDecoder(t)
|
||||
@@ -330,8 +330,10 @@ func (g *Generator) genDecoder(t reflect.Type) error {
|
||||
}
|
||||
|
||||
func (g *Generator) genSliceArrayDecoder(t reflect.Type) error {
|
||||
if t.Kind() != reflect.Slice && t.Kind() != reflect.Array {
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice or array type", t)
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array, reflect.Map:
|
||||
default:
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice/array/map type", t)
|
||||
}
|
||||
|
||||
fname := g.getDecoderName(t)
|
||||
@@ -413,8 +415,10 @@ func (g *Generator) genStructDecoder(t reflect.Type) error {
|
||||
}
|
||||
|
||||
func (g *Generator) genStructUnmarshaller(t reflect.Type) error {
|
||||
if t.Kind() != reflect.Struct && t.Kind() != reflect.Slice && t.Kind() != reflect.Array {
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array type", t)
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array, reflect.Map, reflect.Struct:
|
||||
default:
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array/map type", t)
|
||||
}
|
||||
|
||||
fname := g.getDecoderName(t)
|
||||
|
||||
+12
-8
@@ -266,16 +266,18 @@ func (g *Generator) genStructFieldEncoder(t reflect.Type, f reflect.StructField)
|
||||
|
||||
func (g *Generator) genEncoder(t reflect.Type) error {
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array:
|
||||
return g.genSliceArrayEncoder(t)
|
||||
case reflect.Slice, reflect.Array, reflect.Map:
|
||||
return g.genSliceArrayMapEncoder(t)
|
||||
default:
|
||||
return g.genStructEncoder(t)
|
||||
}
|
||||
}
|
||||
|
||||
func (g *Generator) genSliceArrayEncoder(t reflect.Type) error {
|
||||
if t.Kind() != reflect.Slice && t.Kind() != reflect.Array {
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice or array type", t)
|
||||
func (g *Generator) genSliceArrayMapEncoder(t reflect.Type) error {
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array, reflect.Map:
|
||||
default:
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice/array/map type", t)
|
||||
}
|
||||
|
||||
fname := g.getEncoderName(t)
|
||||
@@ -292,7 +294,7 @@ func (g *Generator) genSliceArrayEncoder(t reflect.Type) error {
|
||||
|
||||
func (g *Generator) genStructEncoder(t reflect.Type) error {
|
||||
if t.Kind() != reflect.Struct {
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct type")
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct type", t)
|
||||
}
|
||||
|
||||
fname := g.getEncoderName(t)
|
||||
@@ -320,8 +322,10 @@ func (g *Generator) genStructEncoder(t reflect.Type) error {
|
||||
}
|
||||
|
||||
func (g *Generator) genStructMarshaller(t reflect.Type) error {
|
||||
if t.Kind() != reflect.Struct && t.Kind() != reflect.Slice && t.Kind() != reflect.Array {
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array type", t)
|
||||
switch t.Kind() {
|
||||
case reflect.Slice, reflect.Array, reflect.Map, reflect.Struct:
|
||||
default:
|
||||
return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array/map type", t)
|
||||
}
|
||||
|
||||
fname := g.getEncoderName(t)
|
||||
|
||||
@@ -35,6 +35,7 @@ var testCases = []struct {
|
||||
{&mapsValue, mapsString},
|
||||
{&deepNestValue, deepNestString},
|
||||
{&IntsValue, IntsString},
|
||||
{&mapStringStringValue, mapStringStringString},
|
||||
}
|
||||
|
||||
func TestMarshal(t *testing.T) {
|
||||
|
||||
@@ -613,6 +613,13 @@ var IntsValue = Ints{1, 2, 3, 4, 5}
|
||||
|
||||
var IntsString = `[1,2,3,4,5]`
|
||||
|
||||
//easyjson:json
|
||||
type MapStringString map[string]string
|
||||
|
||||
var mapStringStringValue = MapStringString{"a": "b"}
|
||||
|
||||
var mapStringStringString = `{"a":"b"}`
|
||||
|
||||
type RequiredOptionalStruct struct {
|
||||
FirstName string `json:"first_name,required"`
|
||||
Lastname string `json:"last_name"`
|
||||
|
||||
Reference in New Issue
Block a user