From ce4e350b822a07fd6d057cce81b84bcce4b18a4f Mon Sep 17 00:00:00 2001 From: "andrey.lukin" Date: Sat, 4 Feb 2023 21:47:01 +0700 Subject: [PATCH 1/3] Wrap errors --- README.md | 2 + .../cf_with_pointers_and_errors/convertor.go | 14 ++-- .../cf_with_slice_and_errors/convertor.go | 4 +- .../convertor.go | 9 +-- _test_data/generator/with_error/convertor.go | 8 ++- _test_data/generator/with_errors/convertor.go | 10 ++- .../convertor.go | 7 +- .../with_from_and_to_pointers/convertor.go | 10 ++- .../generator/with_from_pointer/convertor.go | 7 +- .../generator/with_to_pointer/convertor.go | 10 ++- .../mapper/expected/map_models/expected.go | 6 +- .../mapper/expected/with_aliases/expected.go | 6 +- .../mapper/expected/with_invert/expected.go | 6 +- .../mapper/expected/with_pointers/expected.go | 6 +- .../expected/with_some_cf_sources/expected.go | 6 +- generator/fillers.go | 18 ++++- generator/pairs.go | 66 ++++++++++++++++++- generator/templates/convert_error.temp | 1 + generator/templates/error_conversion.temp | 2 +- .../pointer_to_pointer_conversion.temp | 2 +- 20 files changed, 158 insertions(+), 42 deletions(-) create mode 100644 generator/templates/convert_error.temp diff --git a/README.md b/README.md index 7838950..f60be65 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,8 @@ func ConvertStringToDecimal(from string) (decimal.Decimal, error) { * [x] Converts both ways in one source * [x] Generate convertor with from/to pointer * [x] Fix error by parsing function as member +* [ ] Generate intelligent errors +* [ ] Parse files in crashed packages ??? * [ ] Update readme * [ ] Map field without tag * [ ] Use in my projects diff --git a/_test_data/generator/cf_with_pointers_and_errors/convertor.go b/_test_data/generator/cf_with_pointers_and_errors/convertor.go index 5d09da9..fdd8a52 100644 --- a/_test_data/generator/cf_with_pointers_and_errors/convertor.go +++ b/_test_data/generator/cf_with_pointers_and_errors/convertor.go @@ -4,28 +4,32 @@ // Package cf_with_pointers_and_erros is a generated datamapper package. package cf_with_pointers_and_erros -import "github.com/underbek/datamapper/_test_data/generator/cf_with_pointers_and_errors/cf" +import ( + "fmt" + + "github.com/underbek/datamapper/_test_data/generator/cf_with_pointers_and_errors/cf" +) // ConvertFromToTo convert From by tag map to To by tag map func ConvertFromToTo(from From) (To, error) { fromID, err := cf.ConvertIntToDecimalPtr(from.ID) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.ID -> To.UUID failed: %w", err) } fromAge, err := cf.ConvertIntPtrToDecimal(from.Age) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } fromCount, err := cf.ConvertIntPtrToDecimalPtr(from.Count) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Count -> To.Count failed: %w", err) } fromOrig, err := cf.ConvertIntToDecimal(from.Orig) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Orig -> To.Orig failed: %w", err) } return To{ diff --git a/_test_data/generator/cf_with_slice_and_errors/convertor.go b/_test_data/generator/cf_with_slice_and_errors/convertor.go index ec89c4e..c6f2076 100644 --- a/_test_data/generator/cf_with_slice_and_errors/convertor.go +++ b/_test_data/generator/cf_with_slice_and_errors/convertor.go @@ -5,6 +5,8 @@ package cf_with_slice_and_errors import ( + "fmt" + "github.com/shopspring/decimal" "github.com/underbek/datamapper/_test_data/generator/cf_with_slice_and_errors/cf" ) @@ -15,7 +17,7 @@ func ConvertFromToTo(from From) (To, error) { for _, item := range from.IDs { res, err := cf.ConvertStringToDecimal(item) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.IDs -> To.UUIDs failed: %w", err) } fromIDs = append(fromIDs, res) diff --git a/_test_data/generator/cf_with_slice_pointers_and_errors/convertor.go b/_test_data/generator/cf_with_slice_pointers_and_errors/convertor.go index 6333acf..2ddd888 100644 --- a/_test_data/generator/cf_with_slice_pointers_and_errors/convertor.go +++ b/_test_data/generator/cf_with_slice_pointers_and_errors/convertor.go @@ -6,6 +6,7 @@ package cf_with_slice_pointers_and_errors import ( "errors" + "fmt" "github.com/shopspring/decimal" "github.com/underbek/datamapper/_test_data/generator/cf_with_slice_pointers_and_errors/cf" @@ -17,7 +18,7 @@ func ConvertFromToTo(from From) (To, error) { for _, item := range from.IDs { res, err := cf.ConvertDecimalToInt(item) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.IDs -> To.UUIDs failed: %w", err) } fromIDs = append(fromIDs, &res) @@ -31,7 +32,7 @@ func ConvertFromToTo(from From) (To, error) { res, err := cf.ConvertDecimalToInt(*item) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Ages -> To.Ages failed: %w", err) } fromAges = append(fromAges, res) @@ -43,7 +44,7 @@ func ConvertFromToTo(from From) (To, error) { if item != nil { res, err := cf.ConvertIntegerToDecimal(*item) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Counts -> To.Counts failed: %w", err) } resPtr = &res @@ -56,7 +57,7 @@ func ConvertFromToTo(from From) (To, error) { for _, item := range from.Origins { res, err := cf.ConvertFloatPtrToDecimalPtr(item) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Origins -> To.Origins failed: %w", err) } fromOrigins = append(fromOrigins, res) diff --git a/_test_data/generator/with_error/convertor.go b/_test_data/generator/with_error/convertor.go index 618d1e1..a5001ea 100644 --- a/_test_data/generator/with_error/convertor.go +++ b/_test_data/generator/with_error/convertor.go @@ -4,13 +4,17 @@ // Package with_error is a generated datamapper package. package with_error -import "github.com/underbek/datamapper/converts" +import ( + "fmt" + + "github.com/underbek/datamapper/converts" +) // ConvertFromToTo convert From by tag map to To by tag map func ConvertFromToTo(from From) (To, error) { fromUUID, err := converts.ConvertStringToDecimal(from.UUID) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.UUID -> To.ID failed: %w", err) } return To{ diff --git a/_test_data/generator/with_errors/convertor.go b/_test_data/generator/with_errors/convertor.go index 0a1f691..f9e2d53 100644 --- a/_test_data/generator/with_errors/convertor.go +++ b/_test_data/generator/with_errors/convertor.go @@ -4,18 +4,22 @@ // Package with_errors is a generated datamapper package. package with_errors -import "github.com/underbek/datamapper/converts" +import ( + "fmt" + + "github.com/underbek/datamapper/converts" +) // ConvertFromToTo convert From by tag map to To by tag map func ConvertFromToTo(from From) (To, error) { fromUUID, err := converts.ConvertStringToDecimal(from.UUID) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.UUID -> To.ID failed: %w", err) } fromAge, err := converts.ConvertStringToSigned[int8](from.Age) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } return To{ diff --git a/_test_data/generator/with_field_pointers_and_errors/convertor.go b/_test_data/generator/with_field_pointers_and_errors/convertor.go index b2bc73e..ff07b62 100644 --- a/_test_data/generator/with_field_pointers_and_errors/convertor.go +++ b/_test_data/generator/with_field_pointers_and_errors/convertor.go @@ -6,6 +6,7 @@ package with_field_pointers_and_errors import ( "errors" + "fmt" "github.com/shopspring/decimal" "github.com/underbek/datamapper/converts" @@ -15,7 +16,7 @@ import ( func ConvertFromToTo(from From) (To, error) { fromID, err := converts.ConvertStringToSigned[int](from.ID) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.ID -> To.UUID failed: %w", err) } if from.Age == nil { @@ -24,14 +25,14 @@ func ConvertFromToTo(from From) (To, error) { fromAge, err := converts.ConvertStringToDecimal(*from.Age) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } var fromChildren *decimal.Decimal if from.Children != nil { res, err := converts.ConvertStringToDecimal(*from.Children) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Children -> To.Children failed: %w", err) } fromChildren = &res diff --git a/_test_data/generator/with_from_and_to_pointers/convertor.go b/_test_data/generator/with_from_and_to_pointers/convertor.go index e02093a..e7d1891 100644 --- a/_test_data/generator/with_from_and_to_pointers/convertor.go +++ b/_test_data/generator/with_from_and_to_pointers/convertor.go @@ -4,7 +4,11 @@ // Package with_from_and_to_pointers is a generated datamapper package. package with_from_and_to_pointers -import "github.com/underbek/datamapper/converts" +import ( + "fmt" + + "github.com/underbek/datamapper/converts" +) // ConvertFromToTo convert *From by tag map to *To by tag map func ConvertFromToTo(from *From) (*To, error) { @@ -14,12 +18,12 @@ func ConvertFromToTo(from *From) (*To, error) { fromUUID, err := converts.ConvertStringToDecimal(from.UUID) if err != nil { - return nil, err + return nil, fmt.Errorf("convert From.UUID -> To.ID failed: %w", err) } fromAge, err := converts.ConvertStringToSigned[int8](from.Age) if err != nil { - return nil, err + return nil, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } return &To{ diff --git a/_test_data/generator/with_from_pointer/convertor.go b/_test_data/generator/with_from_pointer/convertor.go index b321210..b0a5dc2 100644 --- a/_test_data/generator/with_from_pointer/convertor.go +++ b/_test_data/generator/with_from_pointer/convertor.go @@ -6,6 +6,7 @@ package with_from_pointer import ( "errors" + "fmt" "github.com/underbek/datamapper/converts" ) @@ -13,17 +14,17 @@ import ( // ConvertFromToTo convert *From by tag map to To by tag map func ConvertFromToTo(from *From) (To, error) { if from == nil { - return To{}, errors.New("from is nil") + return To{}, errors.New("From is nil") } fromUUID, err := converts.ConvertStringToDecimal(from.UUID) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.UUID -> To.ID failed: %w", err) } fromAge, err := converts.ConvertStringToSigned[int8](from.Age) if err != nil { - return To{}, err + return To{}, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } return To{ diff --git a/_test_data/generator/with_to_pointer/convertor.go b/_test_data/generator/with_to_pointer/convertor.go index 40654ce..9d809a6 100644 --- a/_test_data/generator/with_to_pointer/convertor.go +++ b/_test_data/generator/with_to_pointer/convertor.go @@ -4,18 +4,22 @@ // Package with_to_pointer is a generated datamapper package. package with_to_pointer -import "github.com/underbek/datamapper/converts" +import ( + "fmt" + + "github.com/underbek/datamapper/converts" +) // ConvertFromToTo convert From by tag map to *To by tag map func ConvertFromToTo(from From) (*To, error) { fromUUID, err := converts.ConvertStringToDecimal(from.UUID) if err != nil { - return nil, err + return nil, fmt.Errorf("convert From.UUID -> To.ID failed: %w", err) } fromAge, err := converts.ConvertStringToSigned[int8](from.Age) if err != nil { - return nil, err + return nil, fmt.Errorf("convert From.Age -> To.Age failed: %w", err) } return &To{ diff --git a/_test_data/mapper/expected/map_models/expected.go b/_test_data/mapper/expected/map_models/expected.go index 1cfe682..0187f60 100644 --- a/_test_data/mapper/expected/map_models/expected.go +++ b/_test_data/mapper/expected/map_models/expected.go @@ -5,6 +5,8 @@ package mapper import ( + "fmt" + "github.com/underbek/datamapper/_test_data/mapper/convertors" "github.com/underbek/datamapper/_test_data/mapper/domain" "github.com/underbek/datamapper/_test_data/mapper/transport" @@ -15,14 +17,14 @@ import ( func ConvertTransportUserToDomainUser(from transport.User) (domain.User, error) { fromAge, err := converts.ConvertStringToDecimal(from.Age) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.Age -> User.Age failed: %w", err) } var fromChildCount *int if from.ChildCount != nil { res, err := converts.ConvertStringToSigned[int](*from.ChildCount) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.ChildCount -> User.ChildCount failed: %w", err) } fromChildCount = &res diff --git a/_test_data/mapper/expected/with_aliases/expected.go b/_test_data/mapper/expected/with_aliases/expected.go index 1a4a22a..875d84b 100644 --- a/_test_data/mapper/expected/with_aliases/expected.go +++ b/_test_data/mapper/expected/with_aliases/expected.go @@ -5,6 +5,8 @@ package mapper import ( + "fmt" + customCf "github.com/underbek/datamapper/_test_data/mapper/convertors" to "github.com/underbek/datamapper/_test_data/mapper/domain" from "github.com/underbek/datamapper/_test_data/mapper/transport" @@ -15,14 +17,14 @@ import ( func ConvertFromUserToToUser(from from.User) (to.User, error) { fromAge, err := converts.ConvertStringToDecimal(from.Age) if err != nil { - return to.User{}, err + return to.User{}, fmt.Errorf("convert User.Age -> User.Age failed: %w", err) } var fromChildCount *int if from.ChildCount != nil { res, err := converts.ConvertStringToSigned[int](*from.ChildCount) if err != nil { - return to.User{}, err + return to.User{}, fmt.Errorf("convert User.ChildCount -> User.ChildCount failed: %w", err) } fromChildCount = &res diff --git a/_test_data/mapper/expected/with_invert/expected.go b/_test_data/mapper/expected/with_invert/expected.go index c975416..21955c1 100644 --- a/_test_data/mapper/expected/with_invert/expected.go +++ b/_test_data/mapper/expected/with_invert/expected.go @@ -5,6 +5,8 @@ package mapper import ( + "fmt" + "github.com/underbek/datamapper/_test_data/mapper/convertors" "github.com/underbek/datamapper/_test_data/mapper/domain" "github.com/underbek/datamapper/_test_data/mapper/transport" @@ -15,14 +17,14 @@ import ( func ConvertTransportUserToDomainUser(from transport.User) (domain.User, error) { fromAge, err := converts.ConvertStringToDecimal(from.Age) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.Age -> User.Age failed: %w", err) } var fromChildCount *int if from.ChildCount != nil { res, err := converts.ConvertStringToSigned[int](*from.ChildCount) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.ChildCount -> User.ChildCount failed: %w", err) } fromChildCount = &res diff --git a/_test_data/mapper/expected/with_pointers/expected.go b/_test_data/mapper/expected/with_pointers/expected.go index 77cb2c5..d3cb5da 100644 --- a/_test_data/mapper/expected/with_pointers/expected.go +++ b/_test_data/mapper/expected/with_pointers/expected.go @@ -5,6 +5,8 @@ package mapper import ( + "fmt" + "github.com/underbek/datamapper/_test_data/mapper/convertors" "github.com/underbek/datamapper/_test_data/mapper/domain" "github.com/underbek/datamapper/_test_data/mapper/transport" @@ -19,14 +21,14 @@ func ConvertTransportUserToDomainUser(from *transport.User) (*domain.User, error fromAge, err := converts.ConvertStringToDecimal(from.Age) if err != nil { - return nil, err + return nil, fmt.Errorf("convert User.Age -> User.Age failed: %w", err) } var fromChildCount *int if from.ChildCount != nil { res, err := converts.ConvertStringToSigned[int](*from.ChildCount) if err != nil { - return nil, err + return nil, fmt.Errorf("convert User.ChildCount -> User.ChildCount failed: %w", err) } fromChildCount = &res diff --git a/_test_data/mapper/expected/with_some_cf_sources/expected.go b/_test_data/mapper/expected/with_some_cf_sources/expected.go index 1cfe682..0187f60 100644 --- a/_test_data/mapper/expected/with_some_cf_sources/expected.go +++ b/_test_data/mapper/expected/with_some_cf_sources/expected.go @@ -5,6 +5,8 @@ package mapper import ( + "fmt" + "github.com/underbek/datamapper/_test_data/mapper/convertors" "github.com/underbek/datamapper/_test_data/mapper/domain" "github.com/underbek/datamapper/_test_data/mapper/transport" @@ -15,14 +17,14 @@ import ( func ConvertTransportUserToDomainUser(from transport.User) (domain.User, error) { fromAge, err := converts.ConvertStringToDecimal(from.Age) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.Age -> User.Age failed: %w", err) } var fromChildCount *int if from.ChildCount != nil { res, err := converts.ConvertStringToSigned[int](*from.ChildCount) if err != nil { - return domain.User{}, err + return domain.User{}, fmt.Errorf("convert User.ChildCount -> User.ChildCount failed: %w", err) } fromChildCount = &res diff --git a/generator/fillers.go b/generator/fillers.go index 68e951e..66e9320 100644 --- a/generator/fillers.go +++ b/generator/fillers.go @@ -19,6 +19,7 @@ const ( pointerConversionFilePath = "templates/pointer_conversion.temp" pointerToPointerConversionFilePath = "templates/pointer_to_pointer_conversion.temp" sliceConversionFilePath = "templates/slice_conversion.temp" + convertErrorFilePath = "templates/convert_error.temp" ) //go:embed templates @@ -102,11 +103,12 @@ func nilOrDefault(fullName string) string { return fmt.Sprintf("%s{}", fullName) } -func getErrorConversion(fromFieldFullName, toModelName, conversionFunction string) (string, error) { +func getErrorConversion(fromFieldFullName, toModelName, conversionFunction, err string) (string, error) { data := map[string]any{ "resValue": nilOrDefault(toModelName), "fromFieldFullName": fromFieldFullName, "conversionFunction": conversionFunction, + "error": err, } return fillTemplate[string](errorConversionFilePath, data) @@ -122,7 +124,7 @@ func getPointerConversion(fromFieldFullName string, conversionFunction string) ( } func getPointerToPointerConversion(fromFieldResName, fromFieldFullName, toModelName, toFullFieldType, - conversionFunction string, isError bool) (string, error) { + conversionFunction, err string, isError bool) (string, error) { data := map[string]any{ "fromFieldResName": fromFieldResName, @@ -130,6 +132,7 @@ func getPointerToPointerConversion(fromFieldResName, fromFieldFullName, toModelN "resValue": nilOrDefault(toModelName), "toFullFieldType": toFullFieldType, "conversionFunction": conversionFunction, + "error": err, "isError": isError, } @@ -146,3 +149,14 @@ func getSliceConversion(fromFieldName, toItemTypeName, assigment string, convers return fillTemplate[string](sliceConversionFilePath, data) } + +func getConvertError(fromTypeName, fromFieldName, toTypeName, toFieldName string) (string, error) { + data := map[string]any{ + "fromTypeName": fromTypeName, + "fromFieldName": fromFieldName, + "toTypeName": toTypeName, + "toFieldName": toFieldName, + } + + return fillTemplate[string](convertErrorFilePath, data) +} diff --git a/generator/pairs.go b/generator/pairs.go index e0ccff5..c74a658 100644 --- a/generator/pairs.go +++ b/generator/pairs.go @@ -17,7 +17,7 @@ func createModelsPair(from, to models.Struct, pkgPath string, functions models.F conversion, err := getPointerCheck( "from", to.Type.FullName(pkgPath), - `errors.New("from is nil")`, + fmt.Sprintf("errors.New(\"%s is nil\")", from.Type.Name), ) if err != nil { return result{}, err @@ -176,12 +176,28 @@ func fillConversionFunction(pair FieldsPair, fromField, toField models.Field, fr return pair, pkgs, nil case PointerPoPointerConversionFunctionsRule: + errString, err := getConvertError( + fromModel.Type.Name, + fromField.Name, + toModel.Type.Name, + toField.Name, + ) + if err != nil { + return FieldsPair{}, nil, err + } + + pkgs[models.Package{ + Name: "fmt", + Path: "fmt", + }] = struct{}{} + conversion, err := getPointerToPointerConversion( fmt.Sprintf("from%s", fromField.Name), fmt.Sprintf("from.%s", fromField.Name), toModel.Type.FullName(pkgPath), toField.Type.FullName(pkgPath), cfCall, + errString, cf.WithError, ) if err != nil { @@ -196,10 +212,26 @@ func fillConversionFunction(pair FieldsPair, fromField, toField models.Field, fr return pair, pkgs, nil case NeedCallConversionFunctionWithErrorRule: + errString, err := getConvertError( + fromModel.Type.Name, + fromField.Name, + toModel.Type.Name, + toField.Name, + ) + if err != nil { + return FieldsPair{}, nil, err + } + + pkgs[models.Package{ + Name: "fmt", + Path: "fmt", + }] = struct{}{} + conversion, err := getErrorConversion( fmt.Sprintf("from%s", fromField.Name), toModel.Type.FullName(pkgPath), cfCall, + errString, ) if err != nil { return FieldsPair{}, nil, err @@ -306,10 +338,26 @@ func fillConversionFunctionBySlice(pair FieldsPair, fromField, toField models.Fi assigment = cfCall case NeedCallConversionFunctionWithErrorRule: + errString, err := getConvertError( + fromModel.Type.Name, + fromField.Name, + toModel.Type.Name, + toField.Name, + ) + if err != nil { + return FieldsPair{}, nil, err + } + + pkgs[models.Package{ + Name: "fmt", + Path: "fmt", + }] = struct{}{} + conversion, err := getErrorConversion( "res", toModel.Type.FullName(pkgPath), cfCall, + errString, ) if err != nil { return FieldsPair{}, nil, err @@ -334,12 +382,28 @@ func fillConversionFunctionBySlice(pair FieldsPair, fromField, toField models.Fi assigment = refAssignment case PointerPoPointerConversionFunctionsRule: + errString, err := getConvertError( + fromModel.Type.Name, + fromField.Name, + toModel.Type.Name, + toField.Name, + ) + if err != nil { + return FieldsPair{}, nil, err + } + + pkgs[models.Package{ + Name: "fmt", + Path: "fmt", + }] = struct{}{} + conversion, err := getPointerToPointerConversion( "resPtr", "item", toModel.Type.FullName(pkgPath), toField.Type.Additional.(models.SliceAdditional).InType.FullName(pkgPath), cfCall, + errString, cf.WithError, ) if err != nil { diff --git a/generator/templates/convert_error.temp b/generator/templates/convert_error.temp new file mode 100644 index 0000000..cb1f46b --- /dev/null +++ b/generator/templates/convert_error.temp @@ -0,0 +1 @@ +fmt.Errorf("convert {{.fromTypeName}}.{{.fromFieldName}} -> {{.toTypeName}}.{{.toFieldName}} failed: %w", err) \ No newline at end of file diff --git a/generator/templates/error_conversion.temp b/generator/templates/error_conversion.temp index 0764099..004be90 100644 --- a/generator/templates/error_conversion.temp +++ b/generator/templates/error_conversion.temp @@ -1,4 +1,4 @@ {{.fromFieldFullName}}, err := {{.conversionFunction}} if err != nil { - return {{.resValue}}, err + return {{.resValue}}, {{.error}} } diff --git a/generator/templates/pointer_to_pointer_conversion.temp b/generator/templates/pointer_to_pointer_conversion.temp index 7630e7c..5b862fb 100644 --- a/generator/templates/pointer_to_pointer_conversion.temp +++ b/generator/templates/pointer_to_pointer_conversion.temp @@ -3,7 +3,7 @@ if {{.fromFieldFullName}} != nil { {{- if .isError -}} res, err := {{.conversionFunction}} if err != nil { - return {{.resValue}}, err + return {{.resValue}}, {{.error}} } {{else}} res := {{.conversionFunction}} From 6c82ed76f782c2bb593619285d876d1571a3ad2c Mon Sep 17 00:00:00 2001 From: "andrey.lukin" Date: Sat, 4 Feb 2023 21:49:57 +0700 Subject: [PATCH 2/3] Updated readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f60be65..ca18f57 100644 --- a/README.md +++ b/README.md @@ -136,8 +136,8 @@ func ConvertStringToDecimal(from string) (decimal.Decimal, error) { * [x] Converts both ways in one source * [x] Generate convertor with from/to pointer * [x] Fix error by parsing function as member -* [ ] Generate intelligent errors -* [ ] Parse files in crashed packages ??? +* [x] Wrap errors +* [ ] Parse packages with broken sources * [ ] Update readme * [ ] Map field without tag * [ ] Use in my projects From 40634f28b87f79db7a6867329267eee19ea68355 Mon Sep 17 00:00:00 2001 From: "andrey.lukin" Date: Sun, 5 Feb 2023 14:43:22 +0700 Subject: [PATCH 3/3] Updated version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca18f57..31b8ec4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ### Install ```shell -go install github.com/underbek/datamapper@v0.0.4 +go install github.com/underbek/datamapper@v0.0.6 ``` ### Usage