@@ -55,9 +55,11 @@ func Test_Bind_Query(t *testing.T) {
55
55
type Query2 struct {
56
56
Name string
57
57
Hobby string
58
+ Default string `query:"default,default:hello"`
58
59
FavouriteDrinks []string
59
60
Empty []string
60
61
Alloc []string
62
+ Defaults []string `query:"defaults,default:hello|world"`
61
63
No []int64
62
64
ID int
63
65
Bool bool
@@ -76,13 +78,15 @@ func Test_Bind_Query(t *testing.T) {
76
78
require .Equal (t , nilSlice , q2 .Empty )
77
79
require .Equal (t , []string {"" }, q2 .Alloc )
78
80
require .Equal (t , []int64 {1 }, q2 .No )
81
+ require .Equal (t , "hello" , q2 .Default )
82
+ require .Equal (t , []string {"hello" , "world" }, q2 .Defaults )
79
83
80
84
type RequiredQuery struct {
81
85
Name string `query:"name,required"`
82
86
}
83
87
rq := new (RequiredQuery )
84
88
c .Request ().URI ().SetQueryString ("" )
85
- require .Equal (t , "name is empty" , c .Bind ().Query (rq ).Error ())
89
+ require .Equal (t , "bind: name is empty" , c .Bind ().Query (rq ).Error ())
86
90
87
91
type ArrayQuery struct {
88
92
Data []string
@@ -204,15 +208,15 @@ func Test_Bind_Query_Schema(t *testing.T) {
204
208
205
209
c .Request ().URI ().SetQueryString ("namex=tom&nested.age=10" )
206
210
q = new (Query1 )
207
- require .Equal (t , "name is empty" , c .Bind ().Query (q ).Error ())
211
+ require .Equal (t , "bind: name is empty" , c .Bind ().Query (q ).Error ())
208
212
209
213
c .Request ().URI ().SetQueryString ("name=tom&nested.agex=10" )
210
214
q = new (Query1 )
211
215
require .NoError (t , c .Bind ().Query (q ))
212
216
213
217
c .Request ().URI ().SetQueryString ("name=tom&test.age=10" )
214
218
q = new (Query1 )
215
- require .Equal (t , "nested is empty" , c .Bind ().Query (q ).Error ())
219
+ require .Equal (t , "bind: nested is empty" , c .Bind ().Query (q ).Error ())
216
220
217
221
type Query2 struct {
218
222
Name string `query:"name"`
@@ -230,11 +234,11 @@ func Test_Bind_Query_Schema(t *testing.T) {
230
234
231
235
c .Request ().URI ().SetQueryString ("nested.agex=10" )
232
236
q2 = new (Query2 )
233
- require .Equal (t , "nested.age is empty" , c .Bind ().Query (q2 ).Error ())
237
+ require .Equal (t , "bind: nested.age is empty" , c .Bind ().Query (q2 ).Error ())
234
238
235
239
c .Request ().URI ().SetQueryString ("nested.agex=10" )
236
240
q2 = new (Query2 )
237
- require .Equal (t , "nested.age is empty" , c .Bind ().Query (q2 ).Error ())
241
+ require .Equal (t , "bind: nested.age is empty" , c .Bind ().Query (q2 ).Error ())
238
242
239
243
type Node struct {
240
244
Next * Node `query:"next,required"`
@@ -248,7 +252,7 @@ func Test_Bind_Query_Schema(t *testing.T) {
248
252
249
253
c .Request ().URI ().SetQueryString ("next.val=2" )
250
254
n = new (Node )
251
- require .Equal (t , "val is empty" , c .Bind ().Query (n ).Error ())
255
+ require .Equal (t , "bind: val is empty" , c .Bind ().Query (n ).Error ())
252
256
253
257
c .Request ().URI ().SetQueryString ("val=3&next.value=2" )
254
258
n = new (Node )
@@ -354,7 +358,7 @@ func Test_Bind_Header(t *testing.T) {
354
358
}
355
359
rh := new (RequiredHeader )
356
360
c .Request ().Header .Del ("name" )
357
- require .Equal (t , "name is empty" , c .Bind ().Header (rh ).Error ())
361
+ require .Equal (t , "bind: name is empty" , c .Bind ().Header (rh ).Error ())
358
362
}
359
363
360
364
// go test -run Test_Bind_Header_Map -v
@@ -463,7 +467,7 @@ func Test_Bind_Header_Schema(t *testing.T) {
463
467
464
468
c .Request ().Header .Del ("Name" )
465
469
q = new (Header1 )
466
- require .Equal (t , "Name is empty" , c .Bind ().Header (q ).Error ())
470
+ require .Equal (t , "bind: Name is empty" , c .Bind ().Header (q ).Error ())
467
471
468
472
c .Request ().Header .Add ("Name" , "tom" )
469
473
c .Request ().Header .Del ("Nested.Age" )
@@ -473,7 +477,7 @@ func Test_Bind_Header_Schema(t *testing.T) {
473
477
474
478
c .Request ().Header .Del ("Nested.Agex" )
475
479
q = new (Header1 )
476
- require .Equal (t , "Nested is empty" , c .Bind ().Header (q ).Error ())
480
+ require .Equal (t , "bind: Nested is empty" , c .Bind ().Header (q ).Error ())
477
481
478
482
c .Request ().Header .Del ("Nested.Agex" )
479
483
c .Request ().Header .Del ("Name" )
@@ -499,7 +503,7 @@ func Test_Bind_Header_Schema(t *testing.T) {
499
503
c .Request ().Header .Del ("Nested.Age" )
500
504
c .Request ().Header .Add ("Nested.Agex" , "10" )
501
505
h2 = new (Header2 )
502
- require .Equal (t , "Nested.age is empty" , c .Bind ().Header (h2 ).Error ())
506
+ require .Equal (t , "bind: Nested.age is empty" , c .Bind ().Header (h2 ).Error ())
503
507
504
508
type Node struct {
505
509
Next * Node `header:"Next,required"`
@@ -514,7 +518,7 @@ func Test_Bind_Header_Schema(t *testing.T) {
514
518
515
519
c .Request ().Header .Del ("Val" )
516
520
n = new (Node )
517
- require .Equal (t , "Val is empty" , c .Bind ().Header (n ).Error ())
521
+ require .Equal (t , "bind: Val is empty" , c .Bind ().Header (n ).Error ())
518
522
519
523
c .Request ().Header .Add ("Val" , "3" )
520
524
c .Request ().Header .Del ("Next.Val" )
@@ -595,7 +599,7 @@ func Test_Bind_RespHeader(t *testing.T) {
595
599
}
596
600
rh := new (RequiredHeader )
597
601
c .Response ().Header .Del ("name" )
598
- require .Equal (t , "name is empty" , c .Bind ().RespHeader (rh ).Error ())
602
+ require .Equal (t , "bind: name is empty" , c .Bind ().RespHeader (rh ).Error ())
599
603
}
600
604
601
605
// go test -run Test_Bind_RespHeader_Map -v
@@ -648,7 +652,40 @@ func Benchmark_Bind_Query(b *testing.B) {
648
652
for n := 0 ; n < b .N ; n ++ {
649
653
err = c .Bind ().Query (q )
650
654
}
655
+
656
+ require .NoError (b , err )
657
+ require .Equal (b , "tom" , q .Name )
658
+ require .Equal (b , 1 , q .ID )
659
+ require .Len (b , q .Hobby , 2 )
660
+ }
661
+
662
+ // go test -v -run=^$ -bench=Benchmark_Bind_Query_Default -benchmem -count=4
663
+ func Benchmark_Bind_Query_Default (b * testing.B ) {
664
+ var err error
665
+
666
+ app := New ()
667
+ c := app .AcquireCtx (& fasthttp.RequestCtx {})
668
+
669
+ type Query struct {
670
+ Name string `query:"name,default:tom"`
671
+ Hobby []string `query:"hobby,default:football|basketball"`
672
+ ID int `query:"id,default:1"`
673
+ }
674
+ c .Request ().SetBody ([]byte (`` ))
675
+ c .Request ().Header .SetContentType ("" )
676
+ c .Request ().URI ().SetQueryString ("" )
677
+ q := new (Query )
678
+ b .ReportAllocs ()
679
+ b .ResetTimer ()
680
+ for n := 0 ; n < b .N ; n ++ {
681
+ * q = Query {}
682
+ err = c .Bind ().Query (q )
683
+ }
684
+
651
685
require .NoError (b , err )
686
+ require .Equal (b , "tom" , q .Name )
687
+ require .Equal (b , 1 , q .ID )
688
+ require .Len (b , q .Hobby , 2 )
652
689
}
653
690
654
691
// go test -v -run=^$ -bench=Benchmark_Bind_Query_Map -benchmem -count=4
@@ -1314,7 +1351,7 @@ func Test_Bind_Cookie(t *testing.T) {
1314
1351
}
1315
1352
rh := new (RequiredCookie )
1316
1353
c .Request ().Header .DelCookie ("name" )
1317
- require .Equal (t , "name is empty" , c .Bind ().Cookie (rh ).Error ())
1354
+ require .Equal (t , "bind: name is empty" , c .Bind ().Cookie (rh ).Error ())
1318
1355
}
1319
1356
1320
1357
// go test -run Test_Bind_Cookie_Map -v
@@ -1424,7 +1461,7 @@ func Test_Bind_Cookie_Schema(t *testing.T) {
1424
1461
1425
1462
c .Request ().Header .DelCookie ("Name" )
1426
1463
q = new (Cookie1 )
1427
- require .Equal (t , "Name is empty" , c .Bind ().Cookie (q ).Error ())
1464
+ require .Equal (t , "bind: Name is empty" , c .Bind ().Cookie (q ).Error ())
1428
1465
1429
1466
c .Request ().Header .SetCookie ("Name" , "tom" )
1430
1467
c .Request ().Header .DelCookie ("Nested.Age" )
@@ -1434,7 +1471,7 @@ func Test_Bind_Cookie_Schema(t *testing.T) {
1434
1471
1435
1472
c .Request ().Header .DelCookie ("Nested.Agex" )
1436
1473
q = new (Cookie1 )
1437
- require .Equal (t , "Nested is empty" , c .Bind ().Cookie (q ).Error ())
1474
+ require .Equal (t , "bind: Nested is empty" , c .Bind ().Cookie (q ).Error ())
1438
1475
1439
1476
c .Request ().Header .DelCookie ("Nested.Agex" )
1440
1477
c .Request ().Header .DelCookie ("Name" )
@@ -1460,7 +1497,7 @@ func Test_Bind_Cookie_Schema(t *testing.T) {
1460
1497
c .Request ().Header .DelCookie ("Nested.Age" )
1461
1498
c .Request ().Header .SetCookie ("Nested.Agex" , "10" )
1462
1499
h2 = new (Cookie2 )
1463
- require .Equal (t , "Nested.Age is empty" , c .Bind ().Cookie (h2 ).Error ())
1500
+ require .Equal (t , "bind: Nested.Age is empty" , c .Bind ().Cookie (h2 ).Error ())
1464
1501
1465
1502
type Node struct {
1466
1503
Next * Node `cookie:"Next,required"`
@@ -1475,7 +1512,7 @@ func Test_Bind_Cookie_Schema(t *testing.T) {
1475
1512
1476
1513
c .Request ().Header .DelCookie ("Val" )
1477
1514
n = new (Node )
1478
- require .Equal (t , "Val is empty" , c .Bind ().Cookie (n ).Error ())
1515
+ require .Equal (t , "bind: Val is empty" , c .Bind ().Cookie (n ).Error ())
1479
1516
1480
1517
c .Request ().Header .SetCookie ("Val" , "3" )
1481
1518
c .Request ().Header .DelCookie ("Next.Val" )
@@ -1591,7 +1628,7 @@ func Test_Bind_Must(t *testing.T) {
1591
1628
c .Request ().URI ().SetQueryString ("" )
1592
1629
err := c .Bind ().Must ().Query (rq )
1593
1630
require .Equal (t , StatusBadRequest , c .Response ().StatusCode ())
1594
- require .Equal (t , "Bad request: name is empty" , err .Error ())
1631
+ require .Equal (t , "Bad request: bind: name is empty" , err .Error ())
1595
1632
}
1596
1633
1597
1634
// simple struct validator for testing
0 commit comments