-
Notifications
You must be signed in to change notification settings - Fork 2
/
query_string.go
89 lines (69 loc) · 1.39 KB
/
query_string.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package hermes
import (
"strconv"
)
type QueryString interface {
String(string, ...string) string
Int(string, ...int) int
Int64(string, ...int64) int64
Float(string, ...float64) float64
Bool(string, ...bool) bool
}
type queryString struct {
req Request
}
func ParseQuery(req Request) QueryString {
return &queryString{
req: req,
}
}
func (qs *queryString) String(s string, d ...string) string {
v := qs.req.Query(s)
if len(v) == 0 && len(d) > 0 {
return d[0]
}
return string(v)
}
func (qs *queryString) Int(s string, d ...int) int {
var defaultValue int
v := qs.req.Query(s)
if i, err := strconv.Atoi(string(v)); err == nil {
return i
}
if len(d) > 0 {
return d[0]
}
return defaultValue
}
func (qs *queryString) Int64(s string, d ...int64) int64 {
var defaultValue int64
v := qs.req.Query(s)
if i, err := strconv.ParseInt(string(v), 10, 64); err == nil {
return i
}
if len(d) > 0 {
return d[0]
}
return defaultValue
}
func (qs *queryString) Float(s string, d ...float64) float64 {
var defaultValue float64
v := qs.req.Query(s)
if f, err := strconv.ParseFloat(string(v), 64); err == nil {
return f
}
if len(d) > 0 {
return d[0]
}
return defaultValue
}
func (qs *queryString) Bool(s string, d ...bool) bool {
v := qs.req.Query(s)
if b, err := strconv.ParseBool(string(v)); err == nil {
return b
}
if len(d) > 0 {
return d[0]
}
return false
}