From 7caa74866bba6aad7a869beb308ed03d7630cd4c Mon Sep 17 00:00:00 2001 From: matsuo Date: Sat, 11 Jan 2025 14:40:06 +0900 Subject: [PATCH] fix non-struct type panic --- examples/different_dir/misc_gen.go | 17 +++++++++-------- examples/misc_gen.go | 17 +++++++++-------- examples/repository/misc_gen.go | 17 +++++++++-------- generator/templates/misc.go.tmpl | 17 +++++++++-------- generator/testfiles/auto/misc_gen.go | 17 +++++++++-------- generator/testfiles/misc/misc.go | 17 ++++++++--------- generator/testfiles/misc/misc_test.go | 15 ++++++++++----- generator/testfiles/not_auto/misc_gen.go | 17 +++++++++-------- 8 files changed, 72 insertions(+), 62 deletions(-) diff --git a/examples/different_dir/misc_gen.go b/examples/different_dir/misc_gen.go index 28bbf39..64fa02c 100755 --- a/examples/different_dir/misc_gen.go +++ b/examples/different_dir/misc_gen.go @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/examples/misc_gen.go b/examples/misc_gen.go index 8954ab1..9b573e1 100755 --- a/examples/misc_gen.go +++ b/examples/misc_gen.go @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/examples/repository/misc_gen.go b/examples/repository/misc_gen.go index 8954ab1..9b573e1 100755 --- a/examples/repository/misc_gen.go +++ b/examples/repository/misc_gen.go @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/generator/templates/misc.go.tmpl b/generator/templates/misc.go.tmpl index 04a6054..f954262 100644 --- a/generator/templates/misc.go.tmpl +++ b/generator/templates/misc.go.tmpl @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/generator/testfiles/auto/misc_gen.go b/generator/testfiles/auto/misc_gen.go index 50e4df7..b4969ad 100755 --- a/generator/testfiles/auto/misc_gen.go +++ b/generator/testfiles/auto/misc_gen.go @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/generator/testfiles/misc/misc.go b/generator/testfiles/misc/misc.go index cddccf0..f21a8d3 100644 --- a/generator/testfiles/misc/misc.go +++ b/generator/testfiles/misc/misc.go @@ -52,11 +52,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -109,12 +109,11 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { } pfv := pv.FieldByName(ft.Name) - - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break diff --git a/generator/testfiles/misc/misc_test.go b/generator/testfiles/misc/misc_test.go index 7e88af1..2763e84 100644 --- a/generator/testfiles/misc/misc_test.go +++ b/generator/testfiles/misc/misc_test.go @@ -28,11 +28,12 @@ type article struct { } type user struct { - Name string `json:"name" firestore:"name"` - Age int `json:"age" firestore:"age"` - BirthDay *time.Time `json:"birthDay" firestore:"birthDay"` - IsAdult bool `json:"isAdult" firestore:"isAdult"` - Address address `json:"address" firestore:"address"` + Name string `json:"name" firestore:"name"` + Age int `json:"age" firestore:"age"` + BirthDay *time.Time `json:"birthDay" firestore:"birthDay"` + IsAdult bool `json:"isAdult" firestore:"isAdult"` + Address address `json:"address" firestore:"address"` + Occupation *string `json:"occupation" firestore:"occupation"` } type address struct { @@ -64,6 +65,7 @@ func Test_updateBuilder(t *testing.T) { Latitude: 35.678803, Longitude: 139.756263, } + occupation := "engineer" tests := []struct { name string @@ -82,6 +84,7 @@ func Test_updateBuilder(t *testing.T) { Address: address{ LatLng: latLng, }, + Occupation: &occupation, }, Page: "section", Published: false, @@ -96,6 +99,7 @@ func Test_updateBuilder(t *testing.T) { "user.Age": {FieldPath: firestore.FieldPath{"user", "age"}, Value: age}, "user.BirthDay": {FieldPath: firestore.FieldPath{"user", "birthDay"}, Value: &unix}, "user.address.LatLng": {FieldPath: firestore.FieldPath{"user", "address", "LatLng"}, Value: latLng}, + "user.Occupation": {FieldPath: firestore.FieldPath{"user", "occupation"}, Value: &occupation}, "Page": {FieldPath: firestore.FieldPath{"page"}, Value: "section"}, "Published": {FieldPath: firestore.FieldPath{"published"}, Value: false}, "CreatedAt": {FieldPath: firestore.FieldPath{"createdAt"}, Value: unix}, @@ -222,6 +226,7 @@ func Test_tagMap(t *testing.T) { "user.IsAdult": "user.isAdult", "user.Name": "user.name", "user.address.LatLng": "user.address.LatLng", + "user.Occupation": "user.occupation", }, }, } diff --git a/generator/testfiles/not_auto/misc_gen.go b/generator/testfiles/not_auto/misc_gen.go index 50e4df7..b4969ad 100755 --- a/generator/testfiles/not_auto/misc_gen.go +++ b/generator/testfiles/not_auto/misc_gen.go @@ -72,11 +72,11 @@ func tagMap(v interface{}) map[string]string { if firestoreTag, ok := ft.Tag.Lookup("firestore"); ok { tag = strings.Split(firestoreTag, ",")[0] } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break @@ -141,11 +141,12 @@ func updateBuilder(v, param interface{}) map[string]firestore.Update { pfv.Set(reflect.New(fv.Type().Elem())) } - switch fv.Kind() { - case reflect.Ptr: - ptrType := reflect.PtrTo(fv.Type()).Elem() + if fv.Kind() == reflect.Ptr { + ptrType := reflect.PointerTo(fv.Type()).Elem() fv = reflect.New(ptrType.Elem()) - fallthrough + } + + switch fv.Kind() { case reflect.Struct: if isReservedType(fv) { break