Skip to content

Commit e805052

Browse files
committed
Merge remote-tracking branch 'upstream/master' into rm-gitter-im-link
2 parents 2098ff0 + 378f26e commit e805052

File tree

7 files changed

+2207
-1174
lines changed

7 files changed

+2207
-1174
lines changed

.github/workflows/workflow.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ jobs:
3838
with:
3939
go-version: 1.23.x
4040
- name: golangci-lint
41-
uses: golangci/golangci-lint-action@v4
41+
uses: golangci/golangci-lint-action@v6
4242
with:
4343
version: latest

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ require (
88
github.com/go-playground/locales v0.14.1
99
github.com/go-playground/universal-translator v0.18.1
1010
github.com/leodido/go-urn v1.4.0
11-
golang.org/x/crypto v0.32.0
12-
golang.org/x/text v0.21.0
11+
golang.org/x/crypto v0.33.0
12+
golang.org/x/text v0.22.0
1313
)
1414

1515
require (
1616
golang.org/x/net v0.34.0 // indirect
17-
golang.org/x/sys v0.29.0 // indirect
17+
golang.org/x/sys v0.30.0 // indirect
1818
)

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
1111
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
1212
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1313
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
14-
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
15-
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
14+
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
15+
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
1616
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
1717
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
18-
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
19-
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
21-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
18+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
19+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20+
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
21+
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
2222
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

translations/en/en.go

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -217,17 +217,18 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
217217
customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
218218
var err error
219219
var t string
220-
220+
var f64 float64
221221
var digits uint64
222222
var kind reflect.Kind
223223

224-
if idx := strings.Index(fe.Param(), "."); idx != -1 {
225-
digits = uint64(len(fe.Param()[idx+1:]))
226-
}
224+
fn := func() (err error) {
225+
if idx := strings.Index(fe.Param(), "."); idx != -1 {
226+
digits = uint64(len(fe.Param()[idx+1:]))
227+
}
227228

228-
f64, err := strconv.ParseFloat(fe.Param(), 64)
229-
if err != nil {
230-
goto END
229+
f64, err = strconv.ParseFloat(fe.Param(), 64)
230+
231+
return
231232
}
232233

233234
kind = fe.Kind()
@@ -240,6 +241,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
240241

241242
var c string
242243

244+
err = fn()
245+
if err != nil {
246+
goto END
247+
}
248+
243249
c, err = ut.C("min-string-character", f64, digits, ut.FmtNumber(f64, digits))
244250
if err != nil {
245251
goto END
@@ -250,6 +256,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
250256
case reflect.Slice, reflect.Map, reflect.Array:
251257
var c string
252258

259+
err = fn()
260+
if err != nil {
261+
goto END
262+
}
263+
253264
c, err = ut.C("min-items-item", f64, digits, ut.FmtNumber(f64, digits))
254265
if err != nil {
255266
goto END
@@ -258,6 +269,16 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
258269
t, err = ut.T("min-items", fe.Field(), c)
259270

260271
default:
272+
if fe.Type() == reflect.TypeOf(time.Duration(0)) {
273+
t, err = ut.T("min-number", fe.Field(), fe.Param())
274+
goto END
275+
}
276+
277+
err = fn()
278+
if err != nil {
279+
goto END
280+
}
281+
261282
t, err = ut.T("min-number", fe.Field(), ut.FmtNumber(f64, digits))
262283
}
263284

@@ -305,17 +326,18 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
305326
customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
306327
var err error
307328
var t string
308-
329+
var f64 float64
309330
var digits uint64
310331
var kind reflect.Kind
311332

312-
if idx := strings.Index(fe.Param(), "."); idx != -1 {
313-
digits = uint64(len(fe.Param()[idx+1:]))
314-
}
333+
fn := func() (err error) {
334+
if idx := strings.Index(fe.Param(), "."); idx != -1 {
335+
digits = uint64(len(fe.Param()[idx+1:]))
336+
}
315337

316-
f64, err := strconv.ParseFloat(fe.Param(), 64)
317-
if err != nil {
318-
goto END
338+
f64, err = strconv.ParseFloat(fe.Param(), 64)
339+
340+
return
319341
}
320342

321343
kind = fe.Kind()
@@ -328,6 +350,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
328350

329351
var c string
330352

353+
err = fn()
354+
if err != nil {
355+
goto END
356+
}
357+
331358
c, err = ut.C("max-string-character", f64, digits, ut.FmtNumber(f64, digits))
332359
if err != nil {
333360
goto END
@@ -338,6 +365,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
338365
case reflect.Slice, reflect.Map, reflect.Array:
339366
var c string
340367

368+
err = fn()
369+
if err != nil {
370+
goto END
371+
}
372+
341373
c, err = ut.C("max-items-item", f64, digits, ut.FmtNumber(f64, digits))
342374
if err != nil {
343375
goto END
@@ -346,6 +378,16 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
346378
t, err = ut.T("max-items", fe.Field(), c)
347379

348380
default:
381+
if fe.Type() == reflect.TypeOf(time.Duration(0)) {
382+
t, err = ut.T("max-number", fe.Field(), fe.Param())
383+
goto END
384+
}
385+
386+
err = fn()
387+
if err != nil {
388+
goto END
389+
}
390+
349391
t, err = ut.T("max-number", fe.Field(), ut.FmtNumber(f64, digits))
350392
}
351393

translations/en/en_test.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,12 @@ func TestTranslations(t *testing.T) {
175175
Datetime string `validate:"datetime=2006-01-02"`
176176
PostCode string `validate:"postcode_iso3166_alpha2=SG"`
177177
PostCodeCountry string
178-
PostCodeByField string `validate:"postcode_iso3166_alpha2_field=PostCodeCountry"`
179-
BooleanString string `validate:"boolean"`
180-
Image string `validate:"image"`
181-
CveString string `validate:"cve"`
178+
PostCodeByField string `validate:"postcode_iso3166_alpha2_field=PostCodeCountry"`
179+
BooleanString string `validate:"boolean"`
180+
Image string `validate:"image"`
181+
CveString string `validate:"cve"`
182+
MinDuration time.Duration `validate:"min=1h30m,max=2h"`
183+
MaxDuration time.Duration `validate:"min=1h30m,max=2h"`
182184
}
183185

184186
var test Test
@@ -248,6 +250,9 @@ func TestTranslations(t *testing.T) {
248250
test.BooleanString = "A"
249251
test.CveString = "A"
250252

253+
test.MinDuration = 1 * time.Hour
254+
test.MaxDuration = 3 * time.Hour
255+
251256
test.Inner.RequiredIf = "abcd"
252257

253258
err = validate.Struct(test)
@@ -792,6 +797,14 @@ func TestTranslations(t *testing.T) {
792797
ns: "Test.CveString",
793798
expected: "CveString must be a valid cve identifier",
794799
},
800+
{
801+
ns: "Test.MinDuration",
802+
expected: "MinDuration must be 1h30m or greater",
803+
},
804+
{
805+
ns: "Test.MaxDuration",
806+
expected: "MaxDuration must be 2h or less",
807+
},
795808
}
796809

797810
for _, tt := range tests {

0 commit comments

Comments
 (0)