-
Notifications
You must be signed in to change notification settings - Fork 1
/
primatives.go
231 lines (196 loc) · 4.57 KB
/
primatives.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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
package jsonapi
import (
"encoding/json"
"fmt"
)
// Intger
// JSONInt a struct to aide representation of int in json
type JSONInt struct {
Null bool
Set bool
Value int
}
// UnmarshalJSON unmarshalls an integer jsonfield into a JSONInt
func (i *JSONInt) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil || string(data) == "null" {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp int
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONInt8 a struct to aide representation of int8 in json
type JSONInt8 struct {
Null bool
Set bool
Value int8
}
// UnmarshalJSON unmarshalls an integer jsonfield into a JSONInt8
func (i *JSONInt8) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp int8
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONInt32 a struct to aide representation of int32 in json
type JSONInt32 struct {
Null bool
Set bool
Value int32
}
// UnmarshalJSON unmarshalls an integer jsonfield into a JSONInt32
func (i *JSONInt32) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp int32
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONInt64 a struct to aide representation of int64 in json
type JSONInt64 struct {
Null bool
Set bool
Value int64
}
// UnmarshalJSON unmarshalls an integer jsonfield into a JSONInt64
func (i *JSONInt64) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp int64
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// Unsigned Integer
// JSONUInt a struct to aide representation of uint in json
type JSONUInt struct {
Null bool
Set bool
Value uint
}
// UnmarshalJSON unmarshalls an unsigned integer jsonfield into a JSONUInt
func (i *JSONUInt) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp uint
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONUInt32 a struct to aide representation of uint32 in json
type JSONUInt32 struct {
Null bool
Set bool
Value uint32
}
// UnmarshalJSON unmarshalls an unsigned integer jsonfield into a JSONUInt32
func (i *JSONUInt32) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp uint32
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONInt64 a struct to aide representation of uint64 in json
type JSONUInt64 struct {
Null bool
Set bool
Value uint64
}
// UnmarshalJSON unmarshalls an unsigned integer jsonfield into a JSONInt64
func (i *JSONUInt64) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
i.Set = true
if data == nil {
// The key was set to null
i.Null = true
return nil
}
// The key isn't set to null
var temp uint64
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
i.Value = temp
return nil
}
// JSONString a struct to aide representation of string in json
type JSONString struct {
Null bool
Set bool
Value string
}
// UnmarshalJSON unmarshalls a string jsonfield into a JSONString
func (s *JSONString) UnmarshalJSON(data []byte) error {
// If this method was called, the value was set.
s.Set = true
if data == nil || string(data) == "null" {
// The key was set to null
s.Null = true
return nil
}
// The key isn't set to null
var temp string
if err := json.Unmarshal(data, &temp); err != nil {
fmt.Printf("[JSONAPI] error decoding response: %v", err)
if e, ok := err.(*json.SyntaxError); ok {
fmt.Printf("[JSONAPI] syntax error at byte offset %d", e.Offset)
}
fmt.Printf("[JSONAPI] response: %q", data)
return err
}
s.Value = temp
return nil
}