generated from WillAbides/goproject-tmpl
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdecode.go
160 lines (139 loc) · 4.07 KB
/
decode.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package rjson
import (
"bytes"
"encoding/json"
)
// DecodeBool reads a boolean value at the beginning of data. If data begins with null, v is untouched.
func DecodeBool(data []byte, v *bool) (p int, err error) {
var val bool
val, p, err = ReadBool(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeBoolCompat(data []byte, v *bool) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeFloat64 reads a float64 value at the beginning of data. If data begins with null, v is untouched.
func DecodeFloat64(data []byte, v *float64) (p int, err error) {
var val float64
val, p, err = ReadFloat64(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeFloat64Compat(data []byte, v *float64) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeInt64 reads an int64 value at the beginning of data. If data begins with null, v is untouched.
func DecodeInt64(data []byte, v *int64) (p int, err error) {
var val int64
val, p, err = ReadInt64(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeInt64Compat(data []byte, v *int64) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeInt32 reads an int32 value at the beginning of data. If data begins with null, v is untouched.
func DecodeInt32(data []byte, v *int32) (p int, err error) {
var val int32
val, p, err = ReadInt32(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeInt32Compat(data []byte, v *int32) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeInt reads an int value at the beginning of data. If data begins with null, v is untouched.
func DecodeInt(data []byte, v *int) (p int, err error) {
var val int
val, p, err = ReadInt(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeIntCompat(data []byte, v *int) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeUint64 reads a uint64 value at the beginning of data. If data begins with null, v is untouched.
func DecodeUint64(data []byte, v *uint64) (p int, err error) {
var val uint64
val, p, err = ReadUint64(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeUint64Compat(data []byte, v *uint64) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeUint32 reads a uint32 value at the beginning of data. If data begins with null, v is untouched.
func DecodeUint32(data []byte, v *uint32) (p int, err error) {
var val uint32
val, p, err = ReadUint32(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeUint32Compat(data []byte, v *uint32) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeUint reads a uint value at the beginning of data. If data begins with null, v is untouched.
func DecodeUint(data []byte, v *uint) (p int, err error) {
var val uint
val, p, err = ReadUint(data)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeUintCompat(data []byte, v *uint) (p int, err error) {
return decodeCompatHelper(data, v)
}
// DecodeString reads a string value at the beginning of data. If data begins with null, v is untouched.
// If buf is not nil, it will be used as a working for building the string value.
func DecodeString(data []byte, v *string, buf *[]byte) (p int, err error) {
var val string
val, p, err = ReadString(data, buf)
if err != nil {
return nullOrBust(data, err)
}
*v = val
return p, err
}
func decodeStringCompat(data []byte, v *string) (p int, err error) {
return decodeCompatHelper(data, v)
}
// nullOrBust tries to read "null" on data and returns origErr if it fails
func nullOrBust(data []byte, origErr error) (p int, err error) {
p, err = ReadNull(data)
if err != nil {
return 0, origErr
}
return p, nil
}
func decodeCompatHelper(data []byte, v interface{}) (p int, err error) {
decoder := json.NewDecoder(bytes.NewReader(data))
err = decoder.Decode(v)
if err != nil {
return 0, err
}
return int(decoder.InputOffset()), nil
}