Skip to content

Commit

Permalink
Merge pull request go-playground#340 from glb/v9
Browse files Browse the repository at this point in the history
Support translating field errors when field is of kind reflect.Ptr
  • Loading branch information
Dean Karn authored Feb 3, 2018
2 parents 48a433b + 866bd2a commit 36cd0d5
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 7 deletions.
56 changes: 49 additions & 7 deletions translations/en/en.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string

var digits uint64
var kind reflect.Kind

if idx := strings.Index(fe.Param(), "."); idx != -1 {
digits = uint64(len(fe.Param()[idx+1:]))
Expand All @@ -79,7 +80,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
goto END
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -154,6 +160,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string

var digits uint64
var kind reflect.Kind

if idx := strings.Index(fe.Param(), "."); idx != -1 {
digits = uint64(len(fe.Param()[idx+1:]))
Expand All @@ -164,7 +171,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
goto END
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -239,6 +251,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string

var digits uint64
var kind reflect.Kind

if idx := strings.Index(fe.Param(), "."); idx != -1 {
digits = uint64(len(fe.Param()[idx+1:]))
Expand All @@ -249,7 +262,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
goto END
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -359,6 +377,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string
var f64 float64
var digits uint64
var kind reflect.Kind

fn := func() (err error) {

Expand All @@ -371,7 +390,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
return
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -472,6 +496,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string
var f64 float64
var digits uint64
var kind reflect.Kind

fn := func() (err error) {

Expand All @@ -484,7 +509,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
return
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -585,6 +615,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string
var f64 float64
var digits uint64
var kind reflect.Kind

fn := func() (err error) {

Expand All @@ -597,7 +628,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
return
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down Expand Up @@ -698,6 +734,7 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
var t string
var f64 float64
var digits uint64
var kind reflect.Kind

fn := func() (err error) {

Expand All @@ -710,7 +747,12 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
return
}

switch fe.Kind() {
kind = fe.Kind()
if kind == reflect.Ptr {
kind = fe.Type().Elem().Kind()
}

switch kind {
case reflect.String:

var c string
Expand Down
39 changes: 39 additions & 0 deletions translations/en/en_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,13 @@ func TestTranslations(t *testing.T) {
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
MAC string `validate:"mac"`
IsColor string `validate:"iscolor"`
StrPtrMinLen *string `validate:"min=10"`
StrPtrMaxLen *string `validate:"max=1"`
StrPtrLen *string `validate:"len=2"`
StrPtrLt *string `validate:"lt=1"`
StrPtrLte *string `validate:"lte=1"`
StrPtrGt *string `validate:"gt=10"`
StrPtrGte *string `validate:"gte=10"`
}

var test Test
Expand Down Expand Up @@ -171,6 +178,10 @@ func TestTranslations(t *testing.T) {

test.MultiByte = "1234feerf"

s := "toolong"
test.StrPtrMaxLen = &s
test.StrPtrLen = &s

err = validate.Struct(test)
NotEqual(t, err, nil)

Expand Down Expand Up @@ -565,6 +576,34 @@ func TestTranslations(t *testing.T) {
ns: "Test.RequiredMultiple",
expected: "RequiredMultiple is a required field",
},
{
ns: "Test.StrPtrMinLen",
expected: "StrPtrMinLen must be at least 10 characters in length",
},
{
ns: "Test.StrPtrMaxLen",
expected: "StrPtrMaxLen must be a maximum of 1 character in length",
},
{
ns: "Test.StrPtrLen",
expected: "StrPtrLen must be 2 characters in length",
},
{
ns: "Test.StrPtrLt",
expected: "StrPtrLt must be less than 1 character in length",
},
{
ns: "Test.StrPtrLte",
expected: "StrPtrLte must be at maximum 1 character in length",
},
{
ns: "Test.StrPtrGt",
expected: "StrPtrGt must be greater than 10 characters in length",
},
{
ns: "Test.StrPtrGte",
expected: "StrPtrGte must be at least 10 characters in length",
},
}

for _, tt := range tests {
Expand Down

0 comments on commit 36cd0d5

Please sign in to comment.