fix(goctl): dart gen user defined struct array (#1620)

master
Fyn 3 years ago committed by GitHub
parent 68a81fea8a
commit 365c569d7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -43,7 +43,9 @@ class {{.Name}} {
{{end}}}{{end}}); {{end}}}{{end}});
factory {{.Name}}.fromJson(Map<String,dynamic> m) { factory {{.Name}}.fromJson(Map<String,dynamic> m) {
return {{.Name}}({{range .Members}} return {{.Name}}({{range .Members}}
{{lowCamelCase .Name}}: {{if isDirectType .Type.Name}}m['{{getPropertyFromMember .}}']{{else if isClassListType .Type.Name}}(m['{{getPropertyFromMember .}}'] as List<dynamic>).map((i) => {{getCoreType .Type.Name}}.fromJson(i)){{else}}{{.Type.Name}}.fromJson(m['{{getPropertyFromMember .}}']){{end}},{{end}} {{lowCamelCase .Name}}: {{if isDirectType .Type.Name}}m['{{getPropertyFromMember .}}']
{{else if isClassListType .Type.Name}}(m['{{getPropertyFromMember .}}'] as List<dynamic>).map((i) => {{getCoreType .Type.Name}}.fromJson(i)).toList()
{{else}}{{.Type.Name}}.fromJson(m['{{getPropertyFromMember .}}']){{end}},{{end}}
); );
} }
Map<String,dynamic> toJson() { Map<String,dynamic> toJson() {

@ -128,11 +128,10 @@ func specTypeToDart(tp spec.Type) (string, error) {
} }
s := getBaseType(valueType) s := getBaseType(valueType)
if len(s) == 0 { if len(s) != 0 {
return s, errors.New("unsupported primitive type " + tp.Name())
}
return s, nil return s, nil
}
return fmt.Sprintf("List<%s>", valueType), nil
case spec.InterfaceType: case spec.InterfaceType:
return "Object", nil return "Object", nil
case spec.PointerType: case spec.PointerType:

@ -37,3 +37,35 @@ func Test_getPropertyFromMember(t *testing.T) {
}) })
} }
} }
func Test_specTypeToDart(t *testing.T) {
tests := []struct {
name string
specType spec.Type
want string
wantErr bool
}{
{
name: "[]string should return List<String>",
specType: spec.ArrayType{RawName: "[]string", Value: spec.PrimitiveType{RawName: "string"}},
want: "List<String>",
},
{
name: "[]Foo should return List<Foo>",
specType: spec.ArrayType{RawName: "[]Foo", Value: spec.DefineStruct{RawName: "Foo"}},
want: "List<Foo>",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := specTypeToDart(tt.specType)
if (err != nil) != tt.wantErr {
t.Errorf("specTypeToDart() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("specTypeToDart() = %v, want %v", got, tt.want)
}
})
}
}

Loading…
Cancel
Save