From dc65f77bafe97ee2d9e2711359f02d123470849d Mon Sep 17 00:00:00 2001 From: ParkourLiu <33681340+ParkourLiu@users.noreply.github.com> Date: Sat, 22 Oct 2022 18:04:49 +0800 Subject: [PATCH] repair panic (#1999) * repair panic * Add empty struct field test Co-authored-by: Lea Anthony --- v2/internal/binding/binding.go | 12 ++++- .../binding_test/binding_emptystruct_test.go | 53 +++++++++++++++++++ .../binding/binding_test/binding_test.go | 1 + 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 v2/internal/binding/binding_test/binding_emptystruct_test.go diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index d26242156..a51855ac9 100755 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -187,7 +187,11 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, continue } fqname := field.Type.String() - sName := strings.Split(fqname, ".")[1] + sNameSplit := strings.Split(fqname, ".") + if len(sNameSplit) < 2 { + continue + } + sName := sNameSplit[1] pName := getPackageName(fqname) a := reflect.New(field.Type) if b.hasExportedJSONFields(field.Type) { @@ -199,7 +203,11 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, continue } fqname := field.Type.Elem().String() - sName := strings.Split(fqname, ".")[1] + sNameSplit := strings.Split(fqname, ".") + if len(sNameSplit) < 2 { + continue + } + sName := sNameSplit[1] pName := getPackageName(fqname) typ := field.Type.Elem() a := reflect.New(typ) diff --git a/v2/internal/binding/binding_test/binding_emptystruct_test.go b/v2/internal/binding/binding_test/binding_emptystruct_test.go new file mode 100644 index 000000000..46ff69adc --- /dev/null +++ b/v2/internal/binding/binding_test/binding_emptystruct_test.go @@ -0,0 +1,53 @@ +package binding_test + +type EmptyStruct struct { + Empty struct{} `json:"empty"` +} + +func (s EmptyStruct) Get() EmptyStruct { + return s +} + +var EmptyStructTest = BindingTest{ + name: "EmptyStruct", + structs: []interface{}{ + &EmptyStruct{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + export class EmptyStruct { + // Go type: struct {} + + empty: any; + + static createFrom(source: any = {}) { + return new EmptyStruct(source); + } + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.empty = this.convertValues(source["empty"], null); + } + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + + if (a.slice) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } +} +`, +} diff --git a/v2/internal/binding/binding_test/binding_test.go b/v2/internal/binding/binding_test/binding_test.go index fb315ac1e..7a17ce6ca 100644 --- a/v2/internal/binding/binding_test/binding_test.go +++ b/v2/internal/binding/binding_test/binding_test.go @@ -29,6 +29,7 @@ func TestBindings_GenerateModels(t *testing.T) { NonStringMapKeyTest, SingleFieldTest, MultistructTest, + EmptyStructTest, } testLogger := &logger.Logger{}