1
0
Эх сурвалжийг харах

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

Fyn 3 жил өмнө
parent
commit
365c569d7c

+ 3 - 1
tools/goctl/api/dartgen/gendata.go

@@ -43,7 +43,9 @@ class {{.Name}} {
 	{{end}}}{{end}});
 	factory {{.Name}}.fromJson(Map<String,dynamic> m) {
 		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() {

+ 3 - 4
tools/goctl/api/dartgen/util.go

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

+ 32 - 0
tools/goctl/api/dartgen/util_test.go

@@ -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)
+			}
+		})
+	}
+}